Avatar billede omel1 Nybegynder
14. oktober 2010 - 10:16 Der er 14 kommentarer og
1 løsning

VBA find værdi i ekstern regneark og returner kolonnenr

Er der nogen der kan hjælpe mig med en funktion som leder efter en værdi i et eksternt excelark i en bestemt række og hvis den finder værdien så returnere den kolonne nr ?

funktionsnavn(ekstern Excelarks placering og navn,Arknavn,Række,værdi) returner kolonnenr for værdi i ekstern ark som den finder først
Avatar billede omel1 Nybegynder
14. oktober 2010 - 11:03 #1
ps: navnet på det eksterne ark skal gerne stå i kæde ref i excel arket så hvis jeg skifter kæden skifter ref også i funktionen
Avatar billede supertekst Ekspert
14. oktober 2010 - 18:00 #2
Rem Indsættes i Modul
Rem I A1 er komplet sti anført
Rem BrugerDefineret Function
Rem =søgVærdi(A1;2;16;88) (sti,arkNr,Række,Værdi)
Rem
Rem =============================================
Public Function søgVærdi(sti, ark, række, værdi)
Dim xlsObj As Object, kol As Integer, cVærdi
On Error GoTo fejl

    Set xlsObj = CreateObject("Excel.Application")
    With xlsObj
        .Workbooks.Open sti
        .ActiveWorkbook.Sheets(ark).Activate
        antalkolonner = .ActiveCell.SpecialCells(xlLastCell).Column
       
        søgVærdi = 0
       
        For kol = 1 To antalkolonner
            cVærdi = .Cells(række, kol)
            If cVærdi = værdi Then
                søgVærdi = kol              'kolonneNr returneres
                Exit For
            End If
        Next kol
       
fejl:
        xlsObj.Quit
        Set xlsObj = Nothing
    End With

End Function
Avatar billede omel1 Nybegynder
14. oktober 2010 - 20:40 #3
Kan det lade sig at gøre uden at det eksterne ark bliver åbnet ?
Avatar billede supertekst Ekspert
14. oktober 2010 - 22:57 #4
Den eksterne fil vises ikke når jeg afvikler funktionen.
Avatar billede omel1 Nybegynder
15. oktober 2010 - 07:24 #5
Det har bare givet mig grå hår at finde ud af det her.. hvis det her lykkes uden at give problemer så har du velfortjent dine point.

jeg har et ark hvor jeg skal bruge formlen 50-100 gange vil det give problemer ?? performance eller lign ?
Avatar billede supertekst Ekspert
15. oktober 2010 - 08:36 #6
Lad os så håbe det kan lade sig gøre..

50-100 gange lyder af meget. Hvad er formålet, hvis jeg må spørge?  Det kunne jo være at det evt. skulle konstrueres anderledes.
Avatar billede omel1 Nybegynder
15. oktober 2010 - 11:21 #7
Jeg har flere afd.nr stående i hver sin kolonne i et ark for en periode, hvor jeg har flere (finans)konti stående med beløb i hver sin række

afd Nr 100            Afd nr 200  Osv

Konto xxxx beløb      Beløb      Osv
Konto xxxx beløb      Beløb      Osv

osv


dette skal samles sammen i et ark hvor man sammenligner flere perioder og gammelt år

samtidigt skal dette sammenholdes med et budget hvor man skal summere hen over 12 md dvs "år tid dato" samt for måneden

håber det giver mening
Avatar billede omel1 Nybegynder
15. oktober 2010 - 11:23 #8
efter et par små rettelser ser det ud til at virke,

Men hvordan kan jeg slippe for at den ikke vil opdatere kæder og gemme ændringer når den har fat i det eksterne ark
Avatar billede supertekst Ekspert
15. oktober 2010 - 11:51 #9
Tak for info i #7

Fint,hvis det virker.

Forstår ikke meningen med 2. afsnit #8
Avatar billede omel1 Nybegynder
15. oktober 2010 - 11:59 #10
i det eksterne ark er der ref. til andre eksterne ark, når du så åbner dem i funktionen vil den gerne opdatere disse kæder, og det skal den ikke, og når den lukker arket spørges der om jeg vil gemme ændringerne, og det skal den ikke den skal bare efterlade det som det var da den åbende det
Avatar billede supertekst Ekspert
15. oktober 2010 - 13:29 #11
Ok - skal prøve at forhindre dette..
Avatar billede supertekst Ekspert
15. oktober 2010 - 14:33 #12
Rem VERSION 2
Rem =========
Rem Indsættes i Modul
Rem I A1 er komplet sti anførtcel
Rem BrugerDefineret Function
Rem =søgVærdi(A1;2;16;88) (sti,arkNr,Række,Værdi)
Rem
Rem =============================================
Public Function søgVærdi(sti, ark, række, værdi)
Dim xlsObj As Object, kol As Integer, cVærdi
'On Error GoTo fejl

    Set xlsObj = CreateObject("Excel.Application")
    With xlsObj
        .Application.DisplayAlerts = False          '<-- +

        .Workbooks.Open sti
        .ActiveWorkbook.Sheets(ark).Activate
        antalkolonner = .ActiveCell.SpecialCells(xlLastCell).Column
       
        søgVærdi = 0
       
        For kol = 1 To antalkolonner
            cVærdi = .Cells(række, kol)
            If cVærdi = værdi Then
                søgVærdi = kol              'kolonneNr returneres
                Exit For
            End If
        Next kol
       
fejl:
        xlsObj.ActiveWorkbook.Saved = True          '<-- +
        xlsObj.Quit
        Set xlsObj = Nothing
    End With

End Function
Avatar billede supertekst Ekspert
27. oktober 2010 - 14:00 #13
Nogen afklaring?
Avatar billede omel1 Nybegynder
27. oktober 2010 - 14:12 #14
Har lige været på ferie...

og jeps det virker tusind tak for hjælpen
Avatar billede supertekst Ekspert
27. oktober 2010 - 14:21 #15
Fint & selv tak...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester