Sisu
Probleemi sõnastamine
Meil on andmebaas (loetelu, tabel – nimeta kuidas tahad) maksete infoga lehel kuupäev:
Ülesanne: printige kiiresti välja kassakviitung (makse, arve …) mis tahes sellest loendist valitud soovitud kirje kohta. Mine!
1. samm. Looge vorm
Raamatu teisel lehel (nimetagem seda lehte vorm) looge tühi vorm. Saate seda ise teha, võite kasutada valmis vorme, mis on võetud näiteks ajakirja Pearaamatupidaja veebisaitidelt või Microsofti veebisaidilt. Sain midagi sellist:
Tühjades lahtrites (Konto, summa, saadud jne) saab maksetabelist andmed teiselt lehelt – sellega tegeleme veidi hiljem.
2. samm: maksetabeli koostamine
Enne meie vormi jaoks tabelist andmete võtmist tuleb tabelit veidi moderniseerida. Nimelt sisestage tabelist vasakule tühi veerg. Kasutame sildi (olgu selleks ingliskeelne täht "x") sisestamiseks selle rea vastas, kust soovime vormile andmeid lisada:
Samm 3. Tabeli ja vormi sidumine
Suhtlemiseks kasutame funktsiooni VPR(OTSING) – selle kohta saad lähemalt lugeda siit. Meie puhul tuleb andmelehelt “x”-ga märgitud makse numbri sisestamiseks vormi lahtrisse F9 sisestada lahtrisse F9 järgmine valem:
=VLOOKUP(“x”,Andmed!A2:G16)
=VLOOKUP(“x”;Andmed!B2:G16;2;0)
Need. tõlgituna “arusaadavaks”, peaks funktsioon leidma andmelehel vahemikust A2: G16 tähega “x” algava rea ja andma meile selle rea teise veeru sisu ehk makse numbri.
Kõik teised vormi lahtrid täidetakse samamoodi – valemis muutub ainult veeru number.
Summa sõnades kuvamiseks kasutasin funktsiooni Enda PLEXi lisandmoodulist.
Tulemus peaks olema järgmine:
Etapp 4. Et ei oleks kahte “x”…
Kui kasutaja sisestab “x” mitmele reale, võtab funktsioon VLOOKUP ainult esimese leitud väärtuse. Sellise ebaselguse vältimiseks paremklõpsake lehe vahekaarti kuupäev ja siis Lähtetekst (Lähtekood). Kopeerige ilmuvas Visual Basicu redaktori aknas järgmine kood:
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long Dim str String Kui Target.Count > 1 then Exit Sub If Target.Column = 1 then str = Target.Value Application.EnableEvents = False r = Cells(Rows.Count) , 2).Lõpp(xlUp).Reavahemik("A2:A" & r).ClearContents Target.Value = str End If Application.EnableEvents = True End Sub
See makro takistab kasutajal esimesse veergu rohkem kui ühte x-i sisestamast.
Noh, see on kõik! Nautige!
- Funktsiooni VLOOKUP kasutamine väärtuste asendamiseks
- Funktsiooni VLOOKUP täiustatud versioon
- Summa sõnades (Propis funktsioon) PLEXi lisandmoodulist