Samenvoegen van kolommen

Status
Niet open voor verdere reacties.

BarbaraC

Gebruiker
Lid geworden
18 sep 2023
Berichten
25
Beste,

Ik weet niet hoe ik verder moet met onderstaande macro. Zie ook bestand in bijlage, met een zelfgemaakt voorbeeldje.

De macro voegt de tekst in kolom A samen met de tekst in kolom B en plaatst deze tekst in kolom B (overschrijven dus).

Code:
Sub ConcatColumns3()


With Sheets("Data")


Dim PersnrCell
Set PersnrCell = Range("A2")


Range("B2").Select


        For i = .UsedRange.Columns.Count To 1 Step -1
              Do While ActiveCell <> ""


      ActiveCell.Offset(0, 0).FormulaR1C1 = _
         ActiveCell.Offset(0, -1) & " " & ActiveCell.Offset(0, 0)


      ActiveCell.Offset(1, 0).Select
   Loop


        Next
        
        End With
        
End Sub


Twee vragen hierbij:

1. Hoe zorg ik dat hetzelfde gebeurt voor kolom C t.e.m. einde kolommen (in dit voorbeeld t.e.m. kolom H).
Namelijk telkens tekst kolom A en tekst kolom C samen in kolom C, tekst kolom A en kolom D samen in kolom D, etc.
Er wordt dus steeds vertrokken van de tekst in kolom A.

2. De macro stopt als er lege waarden zijn, terwijl lege waarden niet van belang zijn. Er moet dan nog steeds de waarde van kolom A gekopieerd en geplakt worden. Ik weet dat dit te maken heeft met de voorwaarde Do while ActiveCell <> "" - maar ik weet niet hoe dit correct te wijzigen...

Dankjewel alvast.
 

Bijlagen

Voorbeeldje:
Code:
Sub DoeMaar()
    Samenvoegen 1, 2, 10 [COLOR="#008000"]'Kolommen 1 en 2 naar kolom 10[/COLOR]
End Sub
        
Sub Samenvoegen(C1, C2, C3)
    [COLOR="#008000"]'Kolommen C1 en C2 samenvoegen en plaatsen in C3[/COLOR]
    With Sheets("Data")
        For i = 2 To .Range("A1").End(xlDown).Row
            .Cells(i, C3) = .Cells(i, C1) & " " & .Cells(i, C2)
        Next i
    End With
End Sub
 
@edmoor dankjewel! Met jouw voorbeeld kan ik al een stuk verder, maar ben er nog niet helemaal...

Mijn macro is dit geworden:

Code:
Sub Samenvoegen2()

With Sheets("Data")
For j = 2 To .Range("A1").End(xlToRight).Column


    With Sheets("Data")
        For i = 2 To .Range("A1").End(xlDown).Row
        .Cells(i, j) = .Cells(i, 1) & " " & .Cells(i, j)
        Next i
    End With
    
Next j
End With
    
End Sub

Het probleem is echter dat de macro niet stopt.
Van zodra de allerlaatste cel van de tabel bereikt is, begint de macro waar van voor af aan.
Hoe kan ik dat tegenhouden?

Mvg,
Barbara
 
Ik begrijp niet waarom je die wijziging gedaan hebt.
Je wilt 2 kolommen samenvoegen naar 1 andere kolom.
Dat was je vraag en is precies wat mijn voorbeeld doet.
Zie macro: DoeMaar
 
Laatst bewerkt:
Ik begrijp niet waarom je die wijziging gedaan hebt.
Je wilt 2 kolommen samenvoegen naar 1 andere kolom.
Dat was je vraag en is precies wat mijn voorbeeld doet.
Zie macro: DoeMaar

Nee, toch niet. Mijn vraag was niet in een andere kolom, maar wel in dezelfde kolom..
In mijn oorspronkelijke vraag stond: "De macro voegt de tekst in kolom A samen met de tekst in kolom B en plaatst deze tekst in kolom B (overschrijven dus)."
De bedoeling is immers dat in elke cel het personeelsnummer er ook bij staat...

Mvg,
Barbara
 
Je kan gewoon opgeven welke 2 kolommen moeten worden samengevoegd en in welke kolom dat geplaatst moet worden.
Zie macro: DoeMaar

Maak daar dus dit van en laat de Samenvoegen macro zoals ik deze plaatste ongemoeid:
Code:
Sub DoeMaar()
    Samenvoegen 1, 2, 2
    Samenvoegen 1, 3, 3
    Samenvoegen 1, 4, 4
    Samenvoegen 1, 5, 5
    Samenvoegen 1, 6, 6
    Samenvoegen 1, 7, 7
    Samenvoegen 1, 8, 8
End Sub
 
Laatst bewerkt:
Je kan gewoon opgeven welke 2 kolommen moeten worden samengevoegd en in welke kolom dat geplaatst moet worden.
Zie macro: DoeMaar

Ja, de macro DoeMaar is een heel eenvoudige macro. Heel nuttig om te weten dat het zo eenvoudig kan.. Dankjewel.
Maar... ik weet niet op voorhand hoeveel kolommen (en rijen) er zullen zijn. Dan lijkt mijn aangepaste macro beter, niet?

Heb je een oplossing voor mijn laatst geposte vraag, nl. hoe het uitvoeren van de macro kan gestopt worden als het einde van de tabel bereikt is?

Mvg,
Barbara
 
Het aantal kolommen en rijen is niet van belang.
Je vraag over het stoppen van de macro ook niet.
Heb je wat ik plaatste wel getest in je voorbeeld document?
 
Laatst bewerkt:
Het aantal kolommen en rijen is niet van belang.
Je vraag over het stoppen van de macro ook niet.
Heb je wat ik plaatste wel getest in je voorbeeld document?


Ja hoor, wel degelijk getest.

De macro Doemaar() toen getest, maar uw tweede macro Samenvoegen() leek me interessanter. Als ik het nu opnieuw probeer: DoeMaar() geeft nu wel een compileerfout (onjuist aantal argumenten of ongeldige eigenschappen), dus geen idee wat ik nu anders doe dan voorheen. Misschien toen toch iets aangepast. Maar dan nog begrijp ik uw stelling niet dat het aantal kolommen of rijen er niet toe doet in deze macro. In je tweede voorbeeld ga je toch ook maar tot kolom 8? Wat als de tabel plots uit 15 kolommen blijkt te bestaan?

De macro Samenvoegen() werkte niet. Foutmelding. Werkte wel als ik de C1, C2, C3 verving... Macro ziet er dan als volgt uit:

Code:
Sub Samenvoegen4()    'Kolom C1 en C2 samenvoegen en plaatsen in C3
    'Samenvoegen(C1, C2, C3)
    
    With Sheets("Data")
        For i = 2 To .Range("A1").End(xlDown).Row
        .Cells(i, 3) = .Cells(i, 2) & " " & .Cells(i, 3)
        Next i
    End With
End Sub

Maar dan wijzigt die enkel kolom 3, andere kolommen blijven ongemoeid. Vandaar mijn aangepaste macro.

Kan je aub verder bouwen op mijn macro?
Is er een oplossing om de macro te doen stoppen na bereik van einde van tabel?
 
Ik denk niet dat je de bedoeling van de macro's begrijpt.
Je hebt ze beiden nodig en hoeft alleen maar de macro DoeMaar uit te voeren.
 
Ik denk niet dat je de bedoeling van de macro's begrijpt.
Je hebt ze beiden nodig en hoeft alleen maar de macro DoeMaar uit te voeren.

Wel, misschien kan je het mij dan even uitleggen?
Of misschien kan je even mijn Excelvoorbeeldje aanpassen en die terugbezorgen?
Dan slaag ik er misschien wel in om te begrijpen wat je bedoelt..
Ik leer immers heel graag bij.

Mvg,
Barbara
 
Open het document en druk op de knop:
 

Bijlagen

@edmoor dankjewel voor het document.

Dat blijkt inderdaad perfect te werken (exact dezelfde in mijn eigen bestand plakken, blijft echter wel foutmeldingen geven)
Anderzijds voldoet jouw macro niet als de tabel groter blijkt te zijn.. De macro stopt aan kolom 8, omdat de macro Doemaar() ook maar tot kolom 8 gaat.

Ik heb nogmaals mijn eigen macro in een apart voorbeeldje getest.
Het oorspronkelijk probleem dat het uitvoeren van de macro niet stopt aan het einde van de tabel bleek hier toch oké te zijn.
Opnieuw geplakt in mijn origineel bestand (die ik ondertussen verder herwerkte met andere macro's), en nu lijkt het toch te lukken.
Wellicht was er oorspronkelijk iets anders die toch het verder uitvoeren van de macro triggerde...

Mijn vraag is dus opgelost.

Mvg,
Barbara
 
Dan voeg je daar toch gewoon een zelfde regel aan toe?
Zoals bijvoorbeeld:
Samenvoegen 1, 9, 9
Samenvoegen 1, 10, 10
Of:
Samenvoegen 1, 100, 100
Of alles dat er tussen ligt of welk getal dan ook.

Daar ben je helemaal vrij in.
 
Laatst bewerkt:
Dan voeg je daar toch gewoon een zelfde regel aan toe?
Zoals bijvoorbeeld:
Samenvoegen 1, 9, 9
Samenvoegen 1, 10, 10
Of:
Samenvoegen 1, 100, 100

Daar ben je helemaal vrij in.

Dat kan goed zijn, maar de ene dag bestaat de export uit 10 kolommen, de andere dag uit 20 kolommen.
Ik maak een macro voor een collega. Het is niet de bedoeling dat die collega moet tellen hoeveel kolommen er zijn en dan vervolgens de macro moet gaan aanpassen.
Mijn macro past zich perfect aan aan het bereik van de tabel. Jouw macro doet dat niet.
Ik sluit dit topic af.
 
Omdat je nu pas verteld dat dat variabel is.
Maar graag gedaan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan