• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

zoeken in alle werkbladen van een excel

Status
Niet open voor verdere reacties.

prinshf

Gebruiker
Lid geworden
21 jan 2017
Berichten
29
Ik wil een spreadsheet maken en dat bestaat uit laten we zeggen 40 bladzijden.
Nu wil ik in Excel zoeken naar onderstaande regels.

1e gevecht 1 railgun, 1 exo, 1 schurk, 3 hoover, 1 kampioen
2e gevecht 1 kampioen, 3 hoover, 1 schurk, 1 exo, 1 railgun

Het kan ook zijn dat deze legers (het komt uit een spel) in een andere volgorde op die regel staan in het spreadsheet staan dus bijvoorbeeld,

1e gevecht 1 exo, 1 schurk, 3 hoover, 1 kampioen, 1 railgun,
2e gevecht 1 kampioen, 3 hoover, ,1 exo, 1 railgun, 1 schurk

Hoe kan ik Excel nu zoeken naar deze regels in alle bladen. En moeten deze regels (legers) dan in 1 kolom staan of moeten ze in verschillende kolommen neergezet worden om te kunnen zoeken.

groet herman
 
Beste Herman,

Alle tabbladen afgaan kan met de volgende loop:
Code:
foreach sh in sheets
<macro die doet wat jij wilt dat hij op het tabblad doet>
next sh

als je hiermee niet zelf verder kan, kun je beter even een voorbeeldbestandje uploaden.
dan heb ik een beter beeld van wat je nou precies wilt bereiken.
 
Begin eerst eens met een opzet in Excel en plaats dat opzetje even hier. Uit de geplaatste vraag is weinig zinnigs op te maken.
 
Met onderstaande code wordt elke cel in kolom C van elk blad gesorteerd (resultaat in kolom D voor een vergelijking).

Code:
Sub hsv()
Dim sq, i As Long, cl, sh As Worksheet
With CreateObject("System.Collections.ArrayList")
    For Each sh In Sheets
     sq = sh.Range("c1", sh.Cells(Rows.Count, 3).End(xlUp).Address)
      For i = 1 To UBound(sq)
            For Each cl In Split(sq(i, 1), ",")
             If Not cl = "" And Not cl = " " And Not .contains(cl) Then .Add Trim(cl)
            Next cl
          .Sort
         sq(i, 1) = Join(.toarray, ",")
          .Clear
       Next i
       sh.Cells(1, 4).Resize(UBound(sq)) = sq
     Next sh
 End With

Nu zal het geen al te moeilijke klus zijn om de gegevens te vinden met een andere code.
Helaas weet ik niet welk blad de zoekcriteria heeft.
 

Bijlagen

Bedankt Harry,

Zo kan het natuurlijk ook, als je zorgt dat alles in de zelfde volgorde staat.

bedankt herman
 
Herman,

Je hoeft er alleen maar voor te zorgen dat de cellen komma-gescheiden zijn (is niet overal het geval nl).
Uiteraard kan het resultaat in kolom C gezet worden en dan alles wordt overschreven.
 
Hallo Harry, Dit werkt prima op deze manier, Alles staat op dezelfde volgorde erin en dan is inderdaad makkelijk zoeken. Bij het eerste bestand dat ik er in had gezet zal ik steeds zoeken op een nieuwe ingevoegde tabblad. Maar zou dit zelfde ook kunnen bij het bijgaande bestand? Alleen staan ze nu naast elkaar ipv onder elkaar. Het gaat hier om kolom C en D. Daar zal ook steeds gezocht op een nieuw toegevoegd tabblad.

met vriendelijke groet, Herman
 

Bijlagen

Maak even een kopie van het bestand en test daar de code.
De cellen worden nl. overschreven.

Code:
Sub hsv()
Dim sq, jj As Long, i As Long, cl, sh As Worksheet
With CreateObject("System.Collections.ArrayList")
    For Each sh In Sheets
     For jj = 3 To 4
      sq = sh.Range(sh.Cells(1, jj), sh.Cells(Rows.Count, jj).End(xlUp).Address)
        For i = 1 To UBound(sq)
            For Each cl In Split(sq(i, 1), ",")
             If Not Trim(cl) = "" And Not .contains(cl) Then .Add Trim(cl)
            Next cl
          .Sort
         sq(i, 1) = Join(.toarray, ",")
          .Clear
       Next i
       sh.Cells(1, jj).Resize(UBound(sq)) = sq
       Erase sq
      Next jj
     Next sh
 End With
End Sub
 
Laatst bewerkt:
Hoi Harry.
Dit moet ik in een macro zetten? Sorry ik weet wel iets van Excel maar ik ben een echte beginner, die eigenlijk alleen de basics kent.

m.vr.gr. herman
 
Herman,

Druk Alt+F11.

Je zit nu in de Vb-editor.
Ga naar menu 'Invoegen' en klik op 'Module'.
In het grote witte vlak plaats je de gekopieerde code.
Sluit de Vb-editor.

Bestand opslaan.als → met macro's.

Macro's inschakelen bij de opties van Excel.

De macro krijg je aan de praat door speciale knopjes in de Ribbon, een zelfgemaakte knop op je werkblad, of met Alt+F8 en op uitvoeren drukken.
Vergelijken alvorens opnieuw op te slaan.
 
Hoi Harry, Dit werkt perfect. Hartelijk dank voor het uitzoekende en tijd die je er in hebt gestopt.

m.vr.gr herman
 
Dik kwartiertje werk. :)

Ben ik nog nieuwsgierig waar je op wilt zoeken.
 
Dik kwartiertje werk. :)

Had ook in een klein kwartiertje gekund:d
Code:
If Not Trim(cl) = "" And Not .contains(cl)

Mooi gemaakt. Had ik niet zo kunnen verzinnen.:thumb:
 
Laatst bewerkt:
Kijk, daar heb ik wel 5 minuten laten liggen. :d
 
waar ik op wil zoeken is of ik de combinatie van legers al eerder ben tegen gekomen en welke legers ik daar voor heb gebruikt
en wat betekend deze code
If Not Trim(cl) = "" And Not .contains(cl)

mvg herman
 
Als de tekst van de opgesplitste cel in delen niet leeg is na het ontdoen van overbodige spaties AND nog niet is toegevoegd Then Voeg het toe aan de collectie.

Bv. (1 leger, 2 gevecht, 2 gevecht, 1 leger, 2 schurk) dan is het resultaat → (1 leger, 2 gevecht, 2 schurk).

1 leger en 2 gevecht waren al toegevoegd.

Dat stukje code is iets korter geschreven dan ik er in eerste instantie had staan...if not cl = "" and not cl = " " and ...
Waarom ik de Trim functie daar niet gebruikte en aan het eind wel zal me zijn ontgaan.
De code in #9 heb ik daar op aangepast, en kan je zo 1 op 1 overnemen.
 
Laatst bewerkt:
Hallo Harry,

Over het eerste gedeelte was ik al zo enthousiast , dat ik meerdere werelden en andere gevechten er heb ingevoegd. Het spel heet Forge of Empires en ik speel daar in 4 werelden. Maar sorry dat ik niet helemaal begrijp wat je bedoeld. Ik kan een beetje werken met Excel, maar qua macro's ben ik een echte nitwit. Daarom heb ik het nieuwe blad wat ik heb gemaakt nu bijgevoegd. Misschien zou jij het kunnen aanpassen voor mij.

mvg herman
 

Bijlagen

Fijn om te vernemen Herman.

Test het maar eens.
Code:
Sub hsv()
Dim sq, jj As Long, i As Long, cl, sh As Worksheet
With CreateObject("System.Collections.ArrayList")
    For Each sh In Sheets
     For jj = 1 To sh.UsedRange.Columns.Count
      sq = sh.Range(sh.Cells(1, jj), sh.Cells(Rows.Count, jj).End(xlUp).Address)
        If IsArray(sq) Then
               For i = 2 To UBound(sq)
                   For Each cl In Split(sq(i, 1), ",")
                      If Not Trim(cl) = "" And Not .contains(cl) Then .Add Trim(cl)
                   Next cl
                 .Sort
                  sq(i, 1) = Join(.toarray, ",")
                 .Clear
               Next i
            sh.Cells(1, jj).Resize(UBound(sq)) = sq
           Erase sq
        End If
      Next jj
     Next sh
 End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan