Avatar billede cstern Nybegynder
14. november 2000 - 13:44 Der er 8 kommentarer og
1 løsning

Åbne Excel + søg

Kan nogen fortælle mig hvordan man på en simpel måde åbner et navngivet Excel regneark (\"lookup.xls\") (arket behøver ikke at blive vist, man skal blot have adgang til data), og søger efter en bestemt værdi i en navngiven søjle. Dernæst skal jeg bruge værdien i den samme række som den fundne men i en anden navngiven søjle.

Eks: Jeg har et regneark i Excel med søjlerne \"nummer\" (=A) og \"ident\" (=D).

Jeg vil lede efter nummer = 5628 i søjlen kaldet \"nummer\" og output skal være værdien der står ud for 5628 men i søjlen kaldet \"ident\" - altså en lookup table.

Hvis man også kunne få celle navne vil det være et plus (f.eks A456, D456 (den sidste giver sig selv i dette tilfælde))

Der skal ikke tages hensyn til at \"5628\" kan optræde flere gange i søjlen \"nummer\".

Er 60 point ok?
Avatar billede buhl Nybegynder
14. november 2000 - 22:52 #1
Som en slags \"kom godt fra start\" stump, prøv følgende

Option Explicit

Function LookUp(ByVal vSearch As Variant) As Variant
    On Error Resume Next
    LookUp = Application.WorksheetFunction.VLookup(vSearch, ActiveSheet.Range(\"A1:D2000\"), 4, False)
    If Err.Number <> 0 Then
        LookUp = Empty \' do *not* use vbEmpty
    End If
End Function

Sub test()
    If Not IsEmpty(LookUp(6)) Then
        MsgBox \"Found!\"
    Else
        MsgBox \"Nope!\"
    End If
End Sub

Der er efterhånden mange Excel-spørgsmål i VB kategorien, så det er nogle gange lidt uklart hvorvidt de enkelte spørgsmål går på VBA eller VB. Ovenstående er VBA - altså på godt dansk - koden virker kun indefra Excel.

Derudover bruger jeg luksus-løsningen Application.WorksheetFunction, som allerede indeholder en VLookUp. Til gengæld returnerer den altså ikke nogen informationer om den fundne række. - Så - hvis dette virkeligt er nødvendigt er der kun en Do-While konstruktion tilbage.

Du må give lyd fra dig, hvis du skal have lidt hjælp til dette.

:) Buhl


Avatar billede cstern Nybegynder
14. november 2000 - 23:12 #2
Uh, det skulle helst virke fra VB. Delprojektet er en parser hvor en stor oversættelsestabel findes i et regneark. Men programmet skal køre på nogle maskiner hvor der ikke nødvendigvis findes Excel, så derfor er VBA ikke aktuelt. Nogle dataleverandører har endda Microsoft fobi, så de benytter \"alt andet\" end Microsoft til regneark osv.
Der er mulighed for at konvertere tabellen til andet, f.eks. flatfile ren ascii), men det vil nok give en alt for dårlig performance, da vi taler om 10.000+ lookups per parsing-kørsel.

Hele projektet er et datainsamlingsprojekt hvor mange data-leverandører skal sende forskellige kildedata* gennem parseren som skal producere et ensartet produkt, som herefter skal behandles centralt og benyttes til forskellige landsstatistikker (bare lidt baggrundsoplysninger). *leverandørerne ønsker ikke at jeg skal have adgang til rå kildedata, ellers var det nemt nok.
Avatar billede moses Praktikant
15. november 2000 - 08:12 #3
Hvis det ikke er Excel, så skal du jo finde ud af, hvordan du kontrollerer \"det andet regneark\".

Visual Basic har jo ikke direkte mulighed for at gå ind i et hvilket som helst program. Der skal jo lige et par kodestumper til at fortælle den det !!!

Det gælder også Excel !
Avatar billede cstern Nybegynder
15. november 2000 - 09:13 #4
Jo, det er jeg jo nok klar over. Grunden til at jeg har valgt excel i første omgang er at data er tilgængelige i dette format (lookup tabellen), og at VB jo fra fødslen kan læse en række formater, også MS, som f.eks. Access. Og det kan jo være man kan lave det med en Data control eller Ado control, det er jeg bare ikke så stiv i. Derfor spørger jeg i dette forum.
Avatar billede buhl Nybegynder
15. november 2000 - 20:43 #5
Okay - Ren VB på maskiner uden Excel. Det komplicerer sagen en anelse. Som du selv er inde på, kan ADO være en løsning. Vi får dog stadig brug for en Excel-compliant ODBC driver (typisk kaldet ODBCJT.DLL) som skal være installeret på de pågældende PC\'er.

Hvis dette ikke er muligt, er der to alternativer tilbage. Enten kan man implementere en \"Parse Excel Regneark\" algoritme, dvs. vi får brug for BIF-formatet her (eller evt. senere udgaver), som er Excels interne format, eller også kan man benytte den flade ASCII-fil. Sidstnævnte forslag behøver ikke nødvendigvis give en dårlig performance. Ved at indlæse filen i en passende sorteret struktur, evt. kombineret med hashing, kan man hurtigt finde de pågældende entries. Dette er dog lidt for omfattende til at uddybe her.
Avatar billede buhl Nybegynder
17. november 2000 - 22:46 #6
...You\'re next, mr. cstern

hvis jeg skal have en chance for at hjælpe dig.

Hvad siger du til ovennævnte forslag?
Avatar billede cstern Nybegynder
18. november 2000 - 11:10 #7
Jeg tror at ODBC varianten er at foretrække. Men i dette tilfælde kan man vel lige så godt konvertere tabellen til Access 2000 og bruge det som datakilde? Jeg råder over Office Prem, så det er ikke noget problem at lave Access tabellerne. Men som sagt jeg ikke så god til DB programmering i VB - har købt en bog om emnet og kan åbne en DB via Data control men det er vist også nogenlunde så langt jeg er pt.
Mht DLL\'erne bliver de vist installeret på klientmaskinen hvis man sørger for at bruge Package and Deployment Wizard der hører til VB.
Hvis du kan anvise en let måde at løse problemet vha enten en Excel eller Access datakilde får du pointene, som jeg sætter op til 150.
Avatar billede cstern Nybegynder
22. november 2000 - 14:05 #8
...You\'re next, mr. buhl ;-)

Har du nogen forslag? Ellers vil jeg bare lukke spm og selv sidde og pusle videre med det.
Avatar billede cstern Nybegynder
24. november 2000 - 08:43 #9
Hvis der er nogen der kommer med et brugbart forslag (har ikke selv haft tid endnu) så opretter jeg et nyt spm så I kan få points.
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