• 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 als tekst samenvoegen in 1 rij , lege cellen overslaan

Status
Niet open voor verdere reacties.

Paulexcel

Gebruiker
Lid geworden
3 nov 2016
Berichten
5
Ik zit met de volgende uitdaging. Om een database te kunnen inlezen moet er een tekststring gemaakt worden uit een aantal excel-cellen die in de zelfde rij staan. Tussen de cellen moet een ; staan. Tot zover gaat dit gemakkelijk met =A1&";"&B1&";"&C1 etc. Het punt is dat er soms maar 1 cel gevuld is, maar dit kunnen er ook 40 zijn op dezelfde rij. Dan moeten er geen puntkomma's achter elkaar staan. Hoe laat ik Excel alleen de gevulde cellen samenvoegen (met welsteeds de puntkomma ertussen)? Ik denk dat ik niet aan een macro ontkom?

Wie kan mij helpen? Ik hoop dat ik mij een beetje duidelijk heb gemaakt zo.

Alvast veel dank! Paul
 
Moet de samenvoeging steeds gebeuren op basis van 40 cellen?
Dan zou je een UDF kunnen schrijven die dat uitvoert.
 
Nee, op basis van (laten we zeggen) maximaal 40 cellen.

Wat is een UDF?
 
Een UDF (user defined function) is een zelfgeschreven functie.

Als je een voorbeeldbestandje post zal je wel per kerende een oplossing aangereikt worden.
 
Als je deze code in een module plakt:

Code:
Public Function samendoen(rij As Integer)
 'van kolom 1 tot kolom 40
 For i = 1 To 40
 ' als de cel niet leeg is dan
   If Cells(rij, i) <> "" Then
 ' tekst samenstellen met de gegevens van die cellen
    tekst = tekst & Cells(rij, i) & ";"
   End If
 Next
' dit is de samengevoegde rij zondr de laatste ;
samendoen = Left(tekst, Len(tekst) - 1)
End Function

dan kan je in kolom 41 deze UDF aanroepen met =samendoen(rij()) waarin rij het rijnummer is waarvan je de samenvoeging wil hebben.

In de code staat de uitleg erbij zodat je makkelijk de dingen kunt aanpassen aan je eigen behoefte.
 
Voor cel O3 en verder...
Code:
[English]	=SUBSTITUTE(TRIM(A2&" "&B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2&" "&I2&" "&J2&" "&K2&" "&L2&" "&M2&" "&N2);" ";";")

[Dutch] 	=SUBSTITUEREN(SPATIES.WISSEN(A2&" "&B2&" "&C2&" "&D2&" "&E2&" "&F2&" "&G2&" "&H2&" "&I2&" "&J2&" "&K2&" "&L2&" "&M2&" "&N2);" ";";")

Ik snap alleen niet in je voorbeeld hoe je die dubbele quotes in gedachten hebt. Zit daar een structuur in? Want je wilt een heel blok (in het midden) tussen de dubbele quotes, maar verder ook nog enkele element zelf tussen de dubbele quotes. Of zelfs nog zónder de dubbele quotes... ???
 
@Cobbe, kan ook zonder lusje... ;)
Code:
Function VoegSamen(rBereik As Range) As String

    VoegSamen = Replace(Application.Trim(Join(Application.Transpose(Application.Transpose(rBereik)))), " ", ";")

End Function
 
??? Hmmm... mijn formule of UDF begreep je niet?
 
Ja sorry Ginger, ik ben direct met die van Cobbe aan de slag gegaan, was al heel blij dat ik die een beetje begreep :-).

Jij ook bedankt voor je input. Het is fantastisch dat mensen elkaar op deze manier helpen!
 
Ja sorry Ginger
Ha ha ha... dáár ging 't mij niet om hoor. In principe is mijn UDF iets flexibeler dan die van Cobbe. Je mag met die van van mij straffeloos meer dan 40 cellen inzetten op een regel. De aanroep vanuit de sheet is bijvoorbeeld: =VoegSamen(A1:E1) of =VoegSamen(A1:O1) of =VoegSamen(A1:ZZ1). Je zal zien dat het bij allemaal wordt opgepakt. Dus ook de laatste.
Maar verder moet je gewoon gebruiken waar je je lekker bij voelt hoor. No problemo. ;)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan