VBA Excelissä

Excel is fun

Teen VBA:lla paljon makroja. Nyt ongelmani on löytää sheet1 välilehdeltä ne rivit jotka täyttävät hakuarvon. En halua kirjata pitkiä koodia vaan tiedän, että se onnistuu muutamalla rivillä. Voisiko se olla jotain valitun alueen solut käydään läpi ja jos arvo löytyy niin rivi kopioidaan tiettyyn paikkaa ja tämä toistetaan niin monesti kun alue on testattu. Auttakaa jos tiedätte ratkaisun.

Jos olet excelissä hyvä tekemään apuohjelmia niin voitaisiin jakaa kokemuksia enemmälti.

Excelillä voi tehdä mitä vain!

8

769

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Nimimerkki

      Nyt nopeasti, mutta palaan asiaan uudelleen:

      > Voisiko se olla jotain valitun alueen solut käydään läpi ja jos arvo
      > löytyy niin rivi kopioidaan tiettyyn paikkaa ja tämä toistetaan niin
      > monesti kun alue on testattu. Auttakaa jos tiedätte ratkaisun.

      Itse laittaisin nuo tiedot lista muotoon ( Tietikanta taulukko ), yhdelle taulukolle, ainakun tietoa syötetään tuohon taulukkoon lista järjestetään haluttuun järjestykseen.

      sitten erikois suodatuksella suodatan näkyviin tuosta vain ne halutut tiedot.

      Jos haluaisin muussa muodossa tiedot, tekisin oman pohjan toiseen taulukkoon ja makrolla kopoisin halutut tiedot tuolle toiselle taulukolle.

      Tässä jokuaika sitten joku kysyi miten syötetään tieto ( Autoista ) suoraan haluttuun muotoon, mutta itse en käyttäisi sellaista mallia, koska jos haluat muita pohjia ja et voi kovin yksinkertaisesti pomia haluttuja tietoja jos tiedot ovat muussa muodossa kuin lista muodossa.

      Aloitan uuden projektin ensi viikolla joss on tarkoitus pitää listaa asiakkaista ( yhdele taulukolle ) ja heihin kohdistuviin tapahtumiin ( toiselle taulukolle ). Tuosta pitää esimerkiksi tulostaa jonkun aisakkaan tiedot ja tapahtumat peräkkäin, toden näköisesti tehen pohjan tulostusta varten johon siirrän valitun asiakkaan tiedot ja tapahtumat.

      En nyt rupea vääntään tuota makroa, mutta palataan asiaan.

      > Jos olet excelissä hyvä tekemään apuohjelmia niin voitaisiin
      > jakaa kokemuksia enemmälti.

      Juuri siksi ole täällä, itse en niin hyvä ole mutta kokemuksia otan vastaan ja yritän vähän kirjoitella, vaikka tuo kirjallinen ilmaisu aika huonoa ja hidasta onkin.

      > Excelillä voi tehdä mitä vain!   

      Kyllä ehdottomasti, mutta excelin ongelma on se että asioita voi tehdä niinn monella eri tavalla että tahtoo mennä sekaisin mikä on oikein kuhunkin tilanteeseen, ja kun oppii koko aja uutta niin toiseta päästä jo tahtoo unohtua toisia asioita. Siksi suosittenen että jo suunnittelu vaiheessa luo joitakin sääntöja joita sitten noudattaa niin kauan kuin mahdollista, näin monimutkainenkin projeksti pysyy edes jollakin tavalla kasassa, esim minulla Tiedot listaan omaan taulukkoon, tulostus omaan taulukkonn, sivun ylä laitaan rivit 1-15 mahdolliset toiminta napit ja makrot jne.....

    • tossapa sulle makro, jolla kikkailemalla voi sitten tehdä mitä vaan, koska se palauttaa Rangen...

      nyt hakee 1000 sarakkeista A:D ja kopioi rivit Taul2 sarakkeeseen A ensimmäistä tyhjästä solusta alkaen
      Union funktiota joutuu käyttään sen takia, koska luku voi löytyä useammasta sarakkeesta ja tällöin alueet leikkaavat ja antaa virheilmoituksen- tolla siis korjataan tuo...

      moduuliin...
      Function LaajennettuHaku(Hakuehto As Variant, _
      Hakualue As Range, _
      Optional Mitä As Variant, _
      Optional Miten As Variant, _
      Optional Kokosolu As Boolean) As Range

      Dim solu As Range
      Dim Eka As String
      If IsMissing(Mitä) Then Mitä = xlValues
      If IsMissing(Miten) Then Miten = xlPart
      If IsMissing(Kokosolu) Then Kokosolu = False

      With Hakualue
      Set solu = .Find( _
      What:=Hakuehto, _
      LookIn:=Mitä, _
      LookAt:=Miten, _
      SearchOrder:=xlByRows, _
      SearchDirection:=xlNext, _
      MatchCase:=Kokosolu, _
      SearchFormat:=False)
      If Not solu Is Nothing Then
      Set LaajennettuHaku = solu
      Eka = solu.Address
      Do
      Set LaajennettuHaku = Union(LaajennettuHaku, solu)
      Set solu = .FindNext(solu)
      Loop While Not solu Is Nothing And solu.Address Eka
      End If
      End With

      End Function

      Sub Testi()
      On Error GoTo virhe:
      Dim löydetty As Range
      Set löydetty = LaajennettuHaku(1000, Columns("A:D"), xlValues, xlPart, False).EntireRow
      Union(löydetty, löydetty).Copy Range("Taul2!A65536").End(xlUp).Offset(1, 0).EntireRow
      Exit Sub
      virhe:
      MsgBox "Hakuehdollasi ei löytynyt yhtään tietuetta!"
      End Sub

      Keep Excelling

      • Excel is fun

        Kiitos tästä koodista. Sairaan hyvä juttu. Tunnut osaavan Exceliä aika hyvin.

        PALATAAN AIHEESEEN

        Excel is FUN


      • ei löydä kaikkea

        Tämä esimerkki on minullekin tarpeellinen, mutta jotain hämärää tässä taitaa olla. Muokkasin yhden rivin seuraavaksi:
        Set löydetty = LaajennettuHaku("x", Columns("m:m"), xlValues, xlPart, False).EntireRow

        X:n tilalla kokeilin aakkosia ja numerot 0-9. Muut hakuehdot toimivat, mutta ei kirjaimet c, d, e, i, n, o, p, q, r, s ja t, vaan niillä tulee aina tuo virheilmoitus. Sarakkeesta kuitenkin oikeasti löytyy noitakin merkkejä. Mistähän tuo ongelma johtuu? Käytössä on siis excelin versio 2003.

        (saa nähdä nostaako S24 nämä vanhoihin viesteihin vastaukset listalla ylös, vai jääkö edelleen tänne "piiloon")


    • ainakin mulla toimii 2003 versiossa tää

      Sub Testi()
      On Error GoTo virhe:
      Dim löydetty As Range
      Set löydetty = EtsiJaSiirrä("d", Columns("m:m")).EntireRow
      Union(löydetty, löydetty).Copy Range("Sheet2!A65536").End(xlUp).Offset(1, 0).EntireRow
      Exit Sub
      virhe:
      MsgBox "Hakuehdollasi ei löytynyt yhtään tietuetta!"
      End Sub


      Function EtsiJaSiirrä(Hakuehto As Variant, HakuAlue As Range) As Range
      Dim solu As Range
      Dim EkaOsoite As String
      Worksheets("Sheet1").Activate
      With HakuAlue
      Set solu = .Find( _
      What:=Hakuehto, _
      LookIn:=xlValues, _
      LookAt:=xlWhole, _
      SearchOrder:=xlByRows, _
      SearchDirection:=xlNext, _
      MatchCase:=False, _
      SearchFormat:=False)
      If Not solu Is Nothing Then
      Set EtsiJaSiirrä = solu
      EkaOsoite = solu.Address
      Do
      Set EtsiJaSiirrä = Union(EtsiJaSiirrä, solu)
      Set solu = .FindNext(solu)
      Loop While Not solu Is Nothing And solu.Address EkaOsoite
      End If
      End With
      End Function

      • ei vieläkään

        Kiitos vastauksesta. Tuo uusikaan versio ei kyllä jostain syystä toimi tällä koneella (tai käyttäjällä). Mikään muu haku ei näytä tuottavan tulosta kuin *-merkki, joka tietysti kopioi kaikki ei-tyhjät solut.

        Edellinen esimerkki toimii siis minulla paremmin, mutta en ole vielä päässyt selville, että miksi vain osaa kirjaimista voi hakea. Tällä koneella on käytössä enkunkielinen Excel 2003 (11.8332.8333).


      • ei vieläkään kirjoitti:

        Kiitos vastauksesta. Tuo uusikaan versio ei kyllä jostain syystä toimi tällä koneella (tai käyttäjällä). Mikään muu haku ei näytä tuottavan tulosta kuin *-merkki, joka tietysti kopioi kaikki ei-tyhjät solut.

        Edellinen esimerkki toimii siis minulla paremmin, mutta en ole vielä päässyt selville, että miksi vain osaa kirjaimista voi hakea. Tällä koneella on käytössä enkunkielinen Excel 2003 (11.8332.8333).

        sama enkkuversio mullakin, mutta SP3 lisäksi.
        Todella outoa on toi "ei toimivuus" - ei muuten toiminut mullakaan enää toi ekaversio???
        Muokkasin ton jälkimmäisen siitä ja se toimii ihan jees


      • toimii jossain
        kunde kirjoitti:

        sama enkkuversio mullakin, mutta SP3 lisäksi.
        Todella outoa on toi "ei toimivuus" - ei muuten toiminut mullakaan enää toi ekaversio???
        Muokkasin ton jälkimmäisen siitä ja se toimii ihan jees

        Joo, mullakin on siis SP3 asennettuna. Esimerkkisi toimii loistavasti kotikoneessani, jossa on suomiversio 2007 (SP2). Ei nyt oikein hahmota, että miksi toisen koneen vanhemmassa versiossa toimii niin oudosti. Pitää testailla lisää, kunhan ehtii.

        Jotain muuta saattaa hyödyttää, joten alla uudempi esimerkkisi hieman muokattuna (helpottaa ainakin itselläni vähän testaamista, varsinkin kun tuon liittää nappiin), ja tämä siis toimii aivan kuten on tarkoituskin:

        Sub Testi()
        On Error GoTo virhe:
        Dim löydetty As Range
        Merkki = InputBox("Anna haettava merkkijono", "Haku")
        Sarake = InputBox("Anna sarake, josta haetaan", "Sarake")
        Set löydetty = EtsiJaSiirrä(Merkki, Columns(Sarake)).EntireRow
        Union(löydetty, löydetty).Copy Range("Taul2!A65536").End(xlUp).Offset(1, 0).EntireRow
        Exit Sub
        virhe:
        MsgBox "Hakuehdollasi ei löytynyt yhtään tietuetta!"
        End Sub

        Function EtsiJaSiirrä(Hakuehto As Variant, HakuAlue As Range) As Range
        Dim solu As Range
        Dim EkaOsoite As String
        Worksheets("Taul1").Activate
        With HakuAlue
        Set solu = .Find( _
        What:=Hakuehto, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)
        If Not solu Is Nothing Then
        Set EtsiJaSiirrä = solu
        EkaOsoite = solu.Address
        Do
        Set EtsiJaSiirrä = Union(EtsiJaSiirrä, solu)
        Set solu = .FindNext(solu)
        Loop While Not solu Is Nothing And solu.Address EkaOsoite
        End If
        End With
        Worksheets("Taul2").Activate
        End Function


    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Anteeksi mies

      En vaan osaa kohdata sinua ja olla normaali. En tiedä mikä vaivaa. Samaan aikaan tekee mieli tulla lähelle ja kuitenkin
      Ikävä
      59
      11285
    2. Mietin aina vain

      Minä niin haluaisin nähdä sinut. Ei tuo yhden ainoan kuvan katsominen paljon helpota... Miksi sinä et voisi olla se roh
      Tunteet
      17
      4791
    3. Hetken jo luulin, että en ikävöi sinua koko aikaa

      Mutta nyt on sitten taas ihan hirveä ikävä jotenkin. Tiedätköhän sinä edes, kuinka peruuttamattomasti minä olen sinuun r
      Ikävä
      33
      4217
    4. Outoa että Trump ekana sanoutui irti ilmastosopimuksesta

      kun Kaliforniaa riepottelee siitä johtuvat tuhoisat maastopalot. Hirmumyrskytkin ovat USA:ssa olleet tuhoisia.
      Maailman menoa
      450
      2270
    5. Palstan henkisesti sairaat ja lihavat

      Täällä on sairaita, työttömiä ihmisiä kirjoittelemassa joilla ei ole tarkoituksena kuin satuttaa ihmisiä. Jos eksyt pals
      Ikävä
      114
      2200
    6. Saan kengurakkaan kotiin viikon päästä

      Mitä tapahtui? Martina hehkutti tätä stoorissaan reilu viikko sitten, mutta eipä aussimiestä Suomessa näkynyt, vaan tapa
      Kotimaiset julkkisjuorut
      263
      1678
    7. FinFamin ryhmät

      Älkää hyvät ihmiset luottako tähän tahoon. Ryhmiä on, mutta eivät ne toimi. Ihmisiä savustetaan ulos, vaikka näissä piir
      Salo
      0
      1441
    8. Osmo Peltola voitti ansaitusti Kultaisen Venlan - Kirvoitti yleisöltä mahtavan reaktion!

      JEE, onnea Osmo! Osmo Peltola voitti Vuoden esiintyjän Kultainen Venla -palkinnon. Isä-Peltsin ja Osmon luontoseikkailu
      Suomalaiset julkkikset
      83
      1270
    9. Olen vähän

      Hysteerinen se on totta. Etkai ymmärrä miten syvästi tunnen sinua kohtaan. Ja olet aina lähelläni. Olet osa jo jotain. I
      Ikävä
      10
      1175
    10. Ähtärin sotkut

      Ähtärin kaupungin tilintarkastus tai mikä lie ollut LAITETTU SALAISEKSI. 🤔🤔🤔
      Ähtäri
      39
      1166
    Aihe