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

Tabel 1 naar Tabel 2 filteren (verschillende omvang)

  • Onderwerp starter Onderwerp starter Arito
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Arito

Gebruiker
Lid geworden
31 mei 2006
Berichten
140
Ik heb twee tabs in de sheet. In de tweede tab staat in kolom A een textcode en in kolom B een 1 of een 0 bij die textcode. Ik wil graag dat als er een 1 naast de textcode staat, de textcode wordt gekopieerd, of verwezen, naar de gele vakjes in de eerste tab.

Extra lastigheid is dat de tabel op de eerste tab 50 rijen heeft, en op de tweede tab 500. Op de eerste tab moeten de textcodes in kolom A geplaats worden, en als A50 vol zit in kolom C, E, G etc.

Verder wil ik graag dat de textcodes ook op alfabetische volgorde gesorteerd zijn.

Kolommen B, D, F etc. moeten leeg blijven.

Ik heb geen idee hoe ik hier mee moet beginnen. Alle hulp is welkom.

Alvast bedankt,
 

Bijlagen

Weet niet of het mogelijk is met een formule maar met VBA is dit wel te doen.

Heb nog wel een vraag of je 1 regel op blad 1 gevuld moet worden of dat er hier nog een header tekst bovenkomt om aan te duiden wat de kolommen voorstellen?
 
Code:
Sub overzetten()
Dim c As Range
Dim kolom, legeregel As Long

'Zet Excel scherm update uit
Application.ScreenUpdating = False

'Maak tabblad 1 leeg
Sheets(1).Cells.ClearContents

'sorteer tabblad 2
With Worksheets("Sheet2").Sort
    .SetRange Range("A1:B500")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

kolom = 1

    'loop door kolom B op blad 2 en kijk of de inhoud van de cel 1 is.
    'als inhoud 1 is worden de gegevens uit kolom a op dezelfde regel over gezet naar de eerste lege cel op blad 1
    For Each c In Sheets(2).Range("B1:B500")
        
        If Cells(1, kolom) = "" Then
            legeregel = 1
        Else
            legeregel = Sheets(1).Cells(65536, kolom).End(xlUp).Row + 1
        End If
          
        If c.Value = 1 Then
            Sheets(1).Cells(legeregel, kolom) = c.Offset(0, -1)
        End If
        
        If legeregel = 50 Then kolom = kolom + 2
        
    Next c
    
'zet Excel scherm update aan
Application.ScreenUpdating = True
    
End Sub
 
Laatst bewerkt:
Code:
Sub overzetten()
Dim c As Range
Dim kolom, legeregel As Long

'Zet Excel scherm update uit
Application.ScreenUpdating = False

'Maak tabblad 1 leeg
Sheets(1).Cells.ClearContents

'sorteer tabblad 2
With Worksheets("Sheet2").Sort
    .SetRange Range("A1:B500")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

kolom = 1

    'loop door kolom B op blad 2 en kijk of de inhoud van de cel 1 is.
    'als inhoud 1 is worden de gegevens uit kolom a op dezelfde regel over gezet naar de eerste lege cel op blad 1
    For Each c In Sheets(2).Range("B1:B500")
        
        If Cells(1, kolom) = "" Then
            legeregel = 1
        Else
            legeregel = Sheets(1).Cells(65536, kolom).End(xlUp).Row + 1
        End If
          
        If c.Value = 1 Then
            Sheets(1).Cells(legeregel, kolom) = c.Offset(0, -1)
        End If
        
        If legeregel = 50 Then kolom = kolom + 2
        
    Next c
    
'zet Excel scherm update aan
Application.ScreenUpdating = True
    
End Sub

Demeter,

ik heb niet gekeken of je code de vraag van TS oplost, maar wat me opviel is de declaratie van je variabelen niet helemaal lekker loopt.

Code:
Dim c As Range
Dim kolom, legeregel As Long

Op deze manier wordt c als een range aanzien, legeregel als long, maar kolom wordt niet aanzien als long maar als variant, terwijl de bedoeling waarschijnlijk toch een long variabele was. Vandaar:

Code:
Dim c As Range
Dim kolom [COLOR="SeaGreen"]as long[/COLOR], legeregel As Long

PS. Dit heeft niet de intentie je af te breken, maar is opbouwend van bedoeling .
Oh, en wees gerust je bent niet de enigste die die fout maakt. Je ziet ze meer dan je denkt.




Je schrijft:
 
Als aanvulling hierop voeg ik toe dat men vaak in de naam van de variabele de declaratie verwerkt.
Dan zie je direct om wat voor variabele het gaat.

Bijv.:
Dim strTekst as String
Dim sTekst as String
Dim bControle as Boolean
Dim intGetal as Integer
Dim iGetal as Integer

Etc.

Ook zeer opbouwend bedoeld.;):D

Je bent inderdaad niet de enigste:cool:

Met vriendelijke groet,


Roncancio
 
Heren,

Bedankt voor de opbouwende kritieken :).

Heb me er altijd aan vast gehouden dat ik met de komma manier kon declareren. Lijkt me ook vrij logisch.

@Roncancio,
Je hebt geheel gelijk dat je de naam van je het type declaratie meeneemt in je var.

Thanks.

Pretti weekend alvast. :thumb:
 
Bedankt voor de hulp iedereen. Ik zal hiermee verder gaan werken maar het zal denk ik wel even duren voordat ik het door heb. Zal de vraag alvast op opgelost zetten. Nogmaals bedankt! :thumb:
 
Ik heb de code gecopy-paste in VBA, en dan krijg ik de volgende error bij het runnen van de macro: Run-time error '438'. Als ik dan debug klik licht de volgende regel op:

With Worksheets("Sheet2").Sort

Als ik het gehele sorteer gedeelte weghaal doet de macro het wel, alleen niet gesorteerd. Op zich niet een groot probleem maar ik ben benieuwd waarom het sorteren niet goed gaat.
 
Laatst bewerkt:
Arito,

maak eens van worksheets("sheets2")
sheets(2)

denk dat ik een foutje heb gemaakt in de code.
had het sorteer gedeelte uit een macro geknipt en deze zonder nakijken in jouw code geplaatst :o
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan