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

cellen samenvoegen

Status
Niet open voor verdere reacties.

appie36

Gebruiker
Lid geworden
19 mei 2009
Berichten
196
Hallo,

Ik heb gegevens in twee kolommen, nu wil ik deze samenvoegen zodat alle namen die achter de 1 in de eerste kolom staan worden samengevoegd tot 1 regel (alle namen in 1 cel) dit ook zo voor nr 2 enz.
=A1&""&A2 handmatig invoeren is geen doen, is een groot bestand met veel regels. Iemand nog een idee? Ik vond hier op het forum nog wel een vba met de functie RemoveDuplicates, deze voegt de gegevens van kolom B niet samen. Deze werkte niet voor mij

Mvg
Ab
 

Bijlagen

  • voorbeeldje.xlsx
    8,8 KB · Weergaven: 55
Welke code heb je gevonden dan en waarom is het geen doen?
 
Deze code, ook hier van het forum.

Deze voegt wel mooi alles uit kolom A bij elkaar maar van kolom B blijven dan alleen de gegevens van de eerste match over, de rest is weg.




Sub M_snb()
Blad1.Range("$A$1:$B$25").RemoveDuplicates 2, 1
End Sub
 
Code:
Sub hsv()
Dim sv, i As Long
sv = Cells(1, 1).CurrentRegion
 With CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(sv)
   .Item(sv(i, 1)) = .Item(sv(i, 1)) & IIf(.Item(sv(i, 1)) = "", sv(i, 2), "," & sv(i, 2))
  Next
 Cells(1, 4).Resize(.Count, 2) = Application.Transpose(Array(.keys, .items))
 End With
End Sub
 
Ja dit bedoel ik, super. Nu moet ik er alleen nog uit zien te komen hoe het werkt zodat ik het mijn eigen bestand werkend kan krijgen.
 
Ook met sumiere kennis van VBA op te lossen; aangepaste versie van internet:
https://support.microsoft.com/nl-be/help/213477/vba-macro-to-concatenate-columns-of-data-in-excel

Code:
Sub Cellensamenvoegen()

Dim i, b, y As Integer
i = 0
b = 0
y = 0

Range("b1").Select
a = ActiveCell.Offset(0, -1)
   Do While ActiveCell <> ""
    If i = 0 Then GoTo verder
    If ActiveCell.Offset(0, -1) <> ActiveCell.Offset(-1, -1) Then
             a = ActiveCell.Offset(0, -1)
             y = y + 1:  b = 0
    End If
verder:
    If b = 0 Then
             ActiveCell.Offset(-(i - y), 1).FormulaR1C1 = ActiveCell.Offset(0, -1) & _
             ActiveCell.Offset(0, 0)
        Else
               ActiveCell.Offset(-(i - y), 1).FormulaR1C1 = ActiveCell.Offset(-(i - y), 1).FormulaR1C1 _
                & "," & ActiveCell.Offset(0, 0)
    End If
      ActiveCell.Offset(1, 0).Select
      i = i + 1: b = b + 1
   Loop

End Sub
 
@Jempi

Vermijd 'Select' in VBA.
Vermijd interaktie met een werkblad in VBA zoveel mogelijk.
Gebruik bij voorkeur VBA methoden als 'currentregion'.

De voorbeeldcode van MS is vaak niet de snuggerste.
 
@snb

Bedankt voor de tips, maar zoals u zult begrepen hebben, ben een leek met VBA.

Heb de beginselen geleerd in avondcursussen (nu al 15j geleden) , kennis uitgebreid (!) met zoeken op internet en hier.

Hoe bepaal ik waar de cursor moet starten? (ik dus via Select)
Ook de code
Code:
sv = Cells(1, 1).CurrentRegion
begrijp ik niet (Cells(1,1) = 1e rij, 1e kolom, waarom sv)?
Ik heb uw versie doen lopen via F8, maar zag nooit de cursus veranderen van kolom of rij.
In mijn versie kan ik lijn per lijn het programma opvolgen.

U hebt me hier al suggesties gegeven, zal ze zeker opzoeken en trachten toe te passen.
Alleen, ik werk nog met Office 2007, ik heb de indruk dat men hier bijna uitsluitend met hogere versies werkt.
Met vriendelijke groeten.
 
De code die ik geschreven heb in #4 is ook gemaakt met Excel 2007.
In Vba van Excel 2016 zal ook niet veel verschil zitten dunkt me.

En:
Code:
sv = Cells(1, 1).CurrentRegion

mag ook zo...
Code:
sv = Cells(1).CurrentRegion

..geschreven worden.
 
Laatst bewerkt:
De code van HSV loopt ook In Excel 95.

Echte VBA code kun je niet volgen in Excel, omdat die geen gebruik maakt van een Excel werkblad.

De code die jij plaatste is een imitatie van wat een gebruiker met de hand in Excel kan doen: gebruik liever VBA in plaats van Excel.

Heb jij een basisboek VBA bij de hand ?
 
@ hsv

Eerst sorry, het is uw code die ik met F8 probeer te begrijpen, niet die van snb.
Voor mij is uw programmaatje een hele brok; dus was het een uitdaging om u te evenaren (in resultaat).
 
@ snb

Er is dus een verschil tussen Visual Basic (wat ik gebruik?) en VBA, bedoelt u dat?
Weer iets bijgeleerd.

En neen, ik heb geen handboek VBA.
 
Laatst bewerkt:
Er is een verschil tussen VB en VBA.
Maar jij gebruikt ook gewoon VBA. Alleen niet zo'n handige VBA code.
 
Laatst bewerkt:
Ik ben bezig met de code van hsv, in het voorbeeld bestand krijg ik het wel voor elkaar, ook als ik Cells(1, 1).CurrentRegion vervang door Range("tabel1").CurrentRegion maar in mijn eigen bestand krijg ik steeds de foutmelding: Fout 1004 tijdens uitvoering. Het bestand bestaat uit 8000 regels wat na samenvoegen rond de 800 regels zou moeten zijn, is het misschien te veel?
 
Nee, hoor dat is het probleem niet.

Plaats eens exact de code in jouw bestand en geef aan in welke regel je de foutmelding krijgt.
 
normaal is range("Tabel1") al een deftig bereik, dus moet je daar geen currentregion meer omheen zetten.
Je kan anders proberen jezelf te testen met
Code:
Msgbox range("tabel1").address
Heeft dat een foutmelding, dan bestaat er geen "Tabel1" bijvoorbeeld ...
 
Ik heb maar een screenshot van de foutmelding gemaakt, een fout in de code geeft hij niet aan.
 

Bijlagen

  • afbeelding1.JPG
    afbeelding1.JPG
    52,7 KB · Weergaven: 51
Vreemd, moet je deze screenshot eens zien!
 

Bijlagen

  • Appie36.png
    Appie36.png
    43,9 KB · Weergaven: 48
Sommige cellen bevatten bij mij veel inhoud, deze worden door de formule weer samengevoegd waardoor het zelfde woord steeds maar weer terug komt. Heb dus veel dubbele, soms wel tot 50 of meer. Ik denk dat ik dan teveel tekens in een excel cel krijg waardoor de foutmelding komt. Eerst maar is kijken hoe ik die dubbel waarden er uit kan krijgen. Als ik steeds wat regels wis kom ik op een punt dat de formule wel werkt en geen foutmelding meer geeft. voor 1 samenvoeging is geteld met de formule =Lengte kom ik aan meer dan 48000 karakters, dat zal wel een beetje te veel van het goed zijn.
 
[FONT=&amp]Het totaal aantal tekens dat een cel kan bevatten = 32767.
De grootte van een integer dus.[/FONT]


Gemakkelijk te testen met:
Code:
=herhaling("z";3276[COLOR="#FF0000"]8[/COLOR])
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan