Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Haku useista sheeteistä ja lajittelu

Minä [02.01.2007 13:06:06]

#

Terve,

omista ohjelmointiajoista on jo aikaa joten asiat ovat ihan unohtuneet. Jos jollain on ideoita ja aikaa, niin viitsisitkö jelppiä? Tarvii kipeästi ja omat taidot ei riitä, niin ideoita kaivataan! :)

On siis Excel -projekti, jossa on sheettejä kahdesta noin kahteen kymmeneen. Sheetit on nimetty näin: "Haku", "1", "2", "3" jne jne..

"Numerosheeteissä" pohja on kaikissa sama:

[   x   ] [    x   ] [   x  ] [     x     ] [      x      ] [   x  ] [  x  ] [  x  ] [  x  ]
[Etunimi] [Sukunimi] [Osoite] [Postit. nro] [Postit.paikka] [puhelin] [arvo1] [arvo2] [arvo3]
Erkki Esimerkki Korpitie 123 X 3 69696 Hilsinki 012-345678 x  x  x

Eli ensimmäinen rivi sisältä vain painikkeet joita painamalla allaolevat tiedot saadaan lajiteltua. Esim. kun painan "Postitoimipaikka"-painiketta, niin kaikki allaolevat tiedot lajitellaan automaattisesti postitoimipaikan mukaan. Sama homma vastaavasti muilla kentillä. "Arvo" tilat voivat saada arvokseen vain "x" tai tyhjän.

Tuo tietojen lajíttelu on ensimmäinen kysymysmerkki minulle.

Toinen on ensimmäisen sheetin "haku". Eli yhteen ruutuun kirjoitetaan haettava sisältä, ja painikkeesta painamalla käydään kaikki olemassaolevat sheetit läpi ja läimästään ensimmäiselle sheetille nätisti kaikki vastaavat tiedot.

Eli jos haetaan sanalla "pekka" niin näkyviin tulee kaikista sheeteistä allekain ne henkilöt ja niiden tiedot joista löytyy sana "pekka". Haun pitäisi kattaa niin Pekka nimiset, pekkatiellä asuvat kuin pekkalassa majailevat henkilöt.

Toivottavasti siinä oli tarpeellinen tieto. Ehkä vähän sekavasti kirjoitettu, mutta jos edes joku ymmärtäisi :)

En välttämättä kaipaa valmista pohjaa, vaan myös ideat ja ajatukset otetaan mielenkiinnolla vastaan! Aika vain loppuu kesken enkä saa tuota millään tehtyä jos kukaan ei auta.. Pitää mennä 3.60€ päivärahan puolesta tetsaamaan vajaan viikon sisällä.

Hycke [02.01.2007 14:19:32]

#

Sorttauksen voi toteuttaa oheista koodinpätkää muokkaamalla.

ActiveSheet.UsedRange.Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlYes

Oheinen sortaa A-sarakkeen mukaan nousevaan järjestykseen, vaihtamalla a2-->b2 saat b sarakkeen mukaisen järjestyksen. Laskevaan järjestykseen saat vaihtamalla xlAscending --> xlDescending

Tuon haun voisi toteuttaa oheista koodia(ei juurikaan testattu) muokkaamalla:

Sub Hakua()
    hakusana = "pekka"
    For Each S In ActiveWorkbook.Sheets     'käydään läpi jokainen välilehti
        If S.Name <> "Haku" Then            ' ei kuitenkaan haku lehdykkää
            i = 3                           'määritellään ensimmäinen hakurivi
            Do Until S.Cells(i, "A").Value = ""   'loopataan joka rivi kunnes A-sarake on tyhjä
                j = 1                       'määritellään ensimmäinen hakusarake
                Do Until S.Cells(i, j).Value = ""
                    If InStr(1, S.Cells(i, j).Value, hakusana) > 0 Then 'verrataan hakusanaan
                        'jos löytyi niin kopioidaan haku lehdelle
                        KopioiRiviHakuun S.Name, i
                        Exit Do
                    End If
                    j = j + 1
                Loop
                i = i + 1
            Loop
        End If
    Next
End Sub

Sub KopioiRiviHakuun(S As String, ByVal Rivi As Long)
    hakui = 10  'hakutulokset alkavat riviltä 10
    Do Until Sheets("haku").Cells(hakui, "A").Value = "" 'etsitään ensimmäinen tyhjärivi haku lehdeltä
        hakui = hakui + 1
    Loop
    'kopioidaan tiedot annetusta sheetistä ja rivistä
    sar = 1 'kopioidaan alkaen sarakkeesta 1
    Do Until Sheets(S).Cells(Rivi, sar).Value = ""
        Sheets("haku").Cells(hakui, sar).Value = Sheets(S).Cells(Rivi, sar).Value
        sar = sar + 1
    Loop
End Sub

El-Ejecutor [02.01.2007 14:44:30]

#

Täysin off-topiccia tähän väliin (pahoittelen):

Minä kirjoitti:

Pitää mennä 3.60€ päivärahan puolesta tetsaamaan vajaan viikon sisällä.

1.1.2007 alkaen 3,8e.

Minä [02.01.2007 17:46:59]

#

Kiitos paljon Hycke! Tosta on jo hyvä viritellä. Onneksi on ihmisiä jotka osaavat :) Tuota kun tuijottaa, niin huomaa kuinka vähän noista oikeasti muistaa.. :/

3,80€/päivä? Jee.. Minähä rikastun :$ Tein jo pankin kanssa sopimuksen siitä, nyt tietävät miten toimia jos tilille ei enempää mahdu!

Minä [05.01.2007 22:03:43]

#

Sain tietojen haun toimimaan ja homma lähti jo käyttöön. Yksi tuossa jäi vain vaivaamaan..

Haku erottelee isot ja pienet kirjaimet. Hakusana "Pekka" ei löydä pekkkaa jos nimi on kirjoitettu vaikka vahingossa pienellä. Myöskään "pekka" ei löydä "Pekka":a..

Periaatteessa tuo ei haittaa, mutta tuntuu aika herkkätunteiselta. Voiko tuolle tehdä jotakin?

sooda [05.01.2007 22:19:52]

#

InStr:lle voi antaa parametrin vbTextCompare, jolloin eroa ei ole.

Minä [06.01.2007 12:03:39]

#

Jep, näin onkin. Kiitos sooda! Onko olemassa jotain hyviä saitteja vba:sta? Oppaita ja esimerkkejä

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta