• 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.

Data ophalen uit meerdere sheets, output filteren en sorteren per kolom

Status
Niet open voor verdere reacties.

jonks

Nieuwe gebruiker
Lid geworden
30 mrt 2011
Berichten
4
Helpers,

Ik wil graag met een macro een output pagina vullen vanuit meerdere sheets met brondata.

De data wil ik vervolgens per kolom kunnen filteren op unieke waarden, sorteren op 2 criteria (#1 land, #2 naam).

Voorbeeld bestandje bijgevoegd, ik probeer VBA te leren - maar ben pas net bezig. Vooral het nesten van de verschillende functies vind ik erg lastig. Dus, alle hulp is welkom!

Bekijk bijlage Test klant land.zip
 
Laatst bewerkt:
Code:
Sub tst()
  Dim sh As Integer
   Dim cl As Variant
     For sh = 2 To 3
       For Each cl In Sheets(sh).Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  If cl > 0 Then
     Sheets("Output").Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(, 3).Value = cl.EntireRow.Value
    End If
   Next cl
  Next sh
End Sub
 
Thanks HSV,

vat ik het zo goed samen:
Hij kijkt in sheet 2 en 3 naar colomn A.
Voor alle niet lege cellen pakt ie het rij nummer en plakt ie de waarden van de hele rij in de eerste lege cel van "output" kolom 2.

Nog wel een paar vragen;

1) Hoe kan ik ook filteren zodat alleen de unieke waarden in de output sheet komen?
2) Hoe kan ik de code ook meteen zo laten sorteren op waarden in kolom C en dan kolom A?
3) Als het niet om sheet 2 en 3 zou gaan maar om 2,5,6 en 8 kun je dan nog steeds een for loopje gebruiken?

De code gaat ook goed als er ergens een veld leeg maar in het echte bestand zijn de bronsheets anders opgemaakt, is er een handig loopje dat kolom voor kolom ophaalt en goed plaatst in output?
 
Laatst bewerkt:
Deze oplossing maakt gebruik van de tabel-faciliteit van Excel 2007. De code om de twee tabellen samen te voegen wordt daardoor relatief eenvoudig:
Code:
    With Worksheets("Output").ListObjects(1)
        If .ListRows.Count > 0 Then .DataBodyRange.Rows.Delete
        Worksheets("Nederlands bedrijf").ListObjects(1).DataBodyRange.Copy _
            Destination:=.HeaderRowRange(1).Offset(1)
        Worksheets("Allerlei bedrijven").ListObjects(1).DataBodyRange.Copy _
            Destination:=.ListRows(.ListRows.Count).Range.Offset(1)
    End With
Noot: een tabel in Excel 2007 heet in vba een listobject.
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan