[EXCEL] Getallen samenvoegen in een komma gescheiden string

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • djkael
  • Registratie: December 2007
  • Laatst online: 18-02 23:11
Ik zou getallen uit opeenvolgende kolommen willen samenvoegen tot een string met die getallen erin door komma geschieden.
In vond wel een Tekst.samenvoegen in Excel, maar blijkbaar niets om getallen samen te combineren tot 1 string. Weet iemand een tip? Het zal allicht iets zijn voor VBA?

Acties:
  • 0 Henk 'm!

  • Fish
  • Registratie: Juli 2002
  • Niet online

Fish

How much is the fish

=CONCATENATE(A1,B1,C1,etc)

Iperf


Acties:
  • +1 Henk 'm!

Verwijderd

Probeer eens in een lege kolom erachter iets als A1&","&B1, etc. Het ampersand teken koppelt celinhoud aan elkaar.

edit: opslaan als -> comma seperated value (csv) werkt ook als je gewoon alle kolommen met komma's achter elkaar wil plakken.

[ Voor 36% gewijzigd door Verwijderd op 04-02-2010 22:53 ]


Acties:
  • 0 Henk 'm!

  • --Niels--
  • Registratie: September 2004
  • Laatst online: 21:37
Tekst.samenvoegen werkt ook gewoon met getallen...
Alleen is deze functie niet handig als je heel veel getallen samen wilt voegen, dan kun je beter een klein stukje VBA maken.

Acties:
  • 0 Henk 'm!

  • Speedmaster
  • Registratie: Juli 2005
  • Laatst online: 00:27

Speedmaster

Make my day...

djkael schreef op donderdag 04 februari 2010 @ 22:43:
Ik zou getallen uit opeenvolgende kolommen willen samenvoegen tot een string met die getallen erin door komma geschieden.
In vond wel een Tekst.samenvoegen in Excel, maar blijkbaar niets om getallen samen te combineren tot 1 string. Weet iemand een tip? Het zal allicht iets zijn voor VBA?
Copy past naar een tekst bestand en zoek en vervang doen vervang spatie voor ;

Of is dit te simpel

Acties:
  • 0 Henk 'm!

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 21:03
Wat dus hetzelfde is als tekst.samenvoegen() in de Nederlandstalige versie ;)

Het probleem met de ampersand of tekst.samenvoegen (concatenate) is dat het nogal omslachtig is voor grote reeksen zoals Nielas al zei. En zeker als je nog een komma ofzo wil toevoegen. Dan moet je inderdaad VBA gaan gebruiken. Onlangs heb ik echter deze handige gratis add-in ontdekt: http://xcell05.free.fr/morefunc/english/index.htm
Deze voegt 67 andere functies toe waaronder MCONCAT() waarbij je gemakkelijk gebruik kan maken van een range en ook nog eens een separator kan toevoegen zoals een komma of puntkomma: http://xcell05.free.fr/morefunc/english/mconcat.htm

edit:
Downloaden kan hier: http://software.carantina.com/morefunc-505/
De link op de homepage doe het namelijk niet.

[ Voor 7% gewijzigd door D-Three op 04-02-2010 23:24 ]


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:48

Reptile209

- gers -

Laagvliegerke schreef op donderdag 04 februari 2010 @ 23:11:
[...]
En zeker als je nog een komma ofzo wil toevoegen. Dan moet je inderdaad VBA gaan gebruiken.
[...]
Niks 'moet' ;)
Als je getallen in A1:A1000 staan, maak je een hulpkolommetje in B met =A1&",". Vervolgens een =TEKST.SAMENVOEGEN(B1:B1000) (of CONCATENATE voor Engelse versies). Alleen in B1000 moet je =A1000 neerzetten, om te voorkomen dat je nog een loze komma aan het einde krijgt.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 21:03
Misschien heb ik het verkeerd verwoord maar dat VBA gebruiken sloeg vooral op "omslachtig voor grote reeksen" en niet op het gebruik van de komma. ;) En dit omdat =TEKST.SAMENVOEGEN(B1:B1000) niet werkt, ik moet echt =TEKST.SAMENVOEGEN(B1;B2;B3;...;B1000) gaan ingeven. Geen idee waarom een range niet werkt.
Al moet ik toegeven dat ik niet aan jouw idee had gedacht. :)

[ Voor 12% gewijzigd door D-Three op 05-02-2010 20:47 ]


Acties:
  • +2 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Tja, zonder VBA is dit vrijwel onmogelijk dacht ik, maar met VBA is dit vrij simpel:
Visual Basic:
1
2
3
4
5
6
7
Public Function Joined(r As Variant, Optional delim As String = ",") As String
    Dim c As Variant
    For Each c In r
        If c <> "" Then Joined = Joined & delim & c
    Next
    Joined = Mid(Joined, Len(delim) + 1)
End Function


Overigens: Met een hulpkolommetje kun je natuurlijk in B1 =A1 zetten, en dan in B2 = B1 & "," & A1 (en die doortrekken)

En de grap is trouwens dat de eerste actie van de laatste macro's in [EXCEL] ontbrekende getallen in een reeks zoeken en opslaan de boel weer splitten is. :)
Laagvliegerke schreef op donderdag 04 februari 2010 @ 23:11:
Onlangs heb ik echter deze handige gratis add-in ontdekt:
Voor eigen gebruik geen probleem, maar is het echt handig als mensen een add-in moeten gaan installeren als je ze een spreadsheet opstuurt? :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 01:48

Reptile209

- gers -

Laagvliegerke schreef op vrijdag 05 februari 2010 @ 20:46:
Misschien heb ik het verkeerd verwoord maar dat VBA gebruiken sloeg vooral op "omslachtig voor grote reeksen" en niet op het gebruik van de komma. ;) En dit omdat =TEKST.SAMENVOEGEN(B1:B1000) niet werkt, ik moet echt =TEKST.SAMENVOEGEN(B1;B2;B3;...;B1000) gaan ingeven. Geen idee waarom een range niet werkt.
Al moet ik toegeven dat ik niet aan jouw idee had gedacht. :)
Verrek, dat is precies die stomme beperking die ik altijd pas ontdek als ik 'm echt gebruik (en niet uit het blote hoofd formules zit te typen). Het staat overigens ook in de omschrijving als je op de fx-knop klikt dat hij werkt met "single cells". De macro van pedorus lost het wel netjes op.

Zo scherp als een voetbal!


Acties:
  • 0 Henk 'm!

  • djkael
  • Registratie: December 2007
  • Laatst online: 18-02 23:11
Mooi Pedorus, je hebt me weer eens geholpen.
Ik had er geen idee van dat dit hier zo'n actief forum was; waar je heel snel waardevolle tips krijgt.

Acties:
  • 0 Henk 'm!

  • D-Three
  • Registratie: Oktober 2001
  • Laatst online: 21:03
pedorus schreef op vrijdag 05 februari 2010 @ 21:51:
[...]

Voor eigen gebruik geen probleem, maar is het echt handig als mensen een add-in moeten gaan installeren als je ze een spreadsheet opstuurt? :p
Inderdaad. Maar m'n VBA is allesbehalve uitstekend te noemen dus om snel eens een "eigenaardigheidje" uit te proberen is zo'n add-in voor mezelf wel handig :)

Acties:
  • 0 Henk 'm!

  • hood
  • Registratie: Mei 2007
  • Laatst online: 01-10 22:30
pedorus schreef op vrijdag 5 februari 2010 @ 21:51:
Tja, zonder VBA is dit vrijwel onmogelijk dacht ik, maar met VBA is dit vrij simpel:
Visual Basic:
1
2
3
4
5
6
7
Public Function Joined(r As Variant, Optional delim As String = ",") As String
    Dim c As Variant
    For Each c In r
        If c <> "" Then Joined = Joined & delim & c
    Next
    Joined = Mid(Joined, Len(delim) + 1)
End Function


Overigens: Met een hulpkolommetje kun je natuurlijk in B1 =A1 zetten, en dan in B2 = B1 & "," & A1 (en die doortrekken)

En de grap is trouwens dat de eerste actie van de laatste macro's in [EXCEL] ontbrekende getallen in een reeks zoeken en opslaan de boel weer splitten is. :)


[...]

Voor eigen gebruik geen probleem, maar is het echt handig als mensen een add-in moeten gaan installeren als je ze een spreadsheet opstuurt? :p
Ik weet dat dit een heel oud topic is maar wil je toch nog bedanken voor het script!

Never fall in love with your own design!


Acties:
  • +1 Henk 'm!

  • dixet
  • Registratie: Februari 2010
  • Laatst online: 00:23
hood schreef op dinsdag 2 juli 2024 @ 13:18:
[...]


Ik weet dat dit een heel oud topic is maar wil je toch nog bedanken voor het script!
Het nadeel van oude topics is dat de informatie erin ook verouderd is. VBA is echt een last resort in Excel en meestal helemaal niet nodig.

Excel heeft tegenwoordig de functie TEXTJOIN waarmee je in 1x de inhoud van een reeks cellen kan samenvoegen (in de Nederlandse excel heet dat TEKST.COMBINEREN)

Met de waarden 1 t/m 10 in cel A1 t/m J1 geeft deze formule

code:
1
=TEXTJOIN(", ";TRUE;A1:J1)


dit resultaat
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Acties:
  • 0 Henk 'm!

  • hood
  • Registratie: Mei 2007
  • Laatst online: 01-10 22:30
dixet schreef op dinsdag 2 juli 2024 @ 14:28:
[...]

Het nadeel van oude topics is dat de informatie erin ook verouderd is. VBA is echt een last resort in Excel en meestal helemaal niet nodig.

Excel heeft tegenwoordig de functie TEXTJOIN waarmee je in 1x de inhoud van een reeks cellen kan samenvoegen (in de Nederlandse excel heet dat TEKST.COMBINEREN)

Met de waarden 1 t/m 10 in cel A1 t/m J1 geeft deze formule

code:
1
=TEXTJOIN(", ";TRUE;A1:J1)



dit resultaat
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
In office 365 en 2016 werkt dit niet.

Never fall in love with your own design!


Acties:
  • 0 Henk 'm!

  • Sleepoog
  • Registratie: September 2019
  • Laatst online: 21:32
Toeval bestaat niet... ik wilde net een oude formule herschrijven en TEXTJOIN was de oplossing. Dank @dixet voor de hint en @hood voor het kicken van dit topic.

Acties:
  • 0 Henk 'm!

  • PolarBear
  • Registratie: Februari 2001
  • Niet online
hood schreef op dinsdag 2 juli 2024 @ 16:12:
[...]


In office 365 en 2016 werkt dit niet.
In Office 365 werkt dit wel, deze versies worden ondersteund:
  • Excel for Microsoft 365
  • Excel for Microsoft 365 for Mac
  • Excel for the web
  • Excel 2021
  • Excel 2021 for Mac
  • Excel 2019
  • Excel 2019 for Mac

Acties:
  • 0 Henk 'm!

  • hood
  • Registratie: Mei 2007
  • Laatst online: 01-10 22:30
PolarBear schreef op dinsdag 2 juli 2024 @ 16:20:
[...]

In Office 365 werkt dit wel, deze versies worden ondersteund:
  • Excel for Microsoft 365
  • Excel for Microsoft 365 for Mac
  • Excel for the web
  • Excel 2021
  • Excel 2021 for Mac
  • Excel 2019
  • Excel 2019 for Mac
Je hebt gelijk, ik had 'true' getypt ipv 'waar'. 8)7

Never fall in love with your own design!


Acties:
  • +1 Henk 'm!

  • dix-neuf
  • Registratie: Juli 2018
  • Niet online
Een oplossing met een macro (geen functie) voor Excelversies die 'Texjoin' nog niet kennen.
Die is uiteraard omslachtiger, maar daar heb je geen last van.
Aangenomen is dat de gegevens in rij 1 beginnen, in het eerste blad staan, en dat de eerste kolom bepalend is voor het aantal rijen waarvoor je de oplossing wil toepassen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub macro1()
Dim x As Integer, y As Integer, lc As Integer
With Sheets(1)
x = 1
lc = .Cells(x, .Columns.Count).End(xlToLeft).Column
.Columns(lc).ClearContents
For x = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
lc = .Cells(x, .Columns.Count).End(xlToLeft).Column
.Cells(x, lc + 2).ClearContents
For y = 1 To lc
.Cells(x, lc + 2) = .Cells(x, lc + 2) & .Cells(x, y)
If y < lc Then .Cells(x, lc + 2) = .Cells(x, lc + 2) & ", "
Next y, x
With .Columns(lc + 2)
.HorizontalAlignment = xlLeft
.AutoFit
End With
End With
End Sub

[ Voor 11% gewijzigd door dix-neuf op 02-07-2024 17:52 ]


Acties:
  • +1 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

hood schreef op dinsdag 2 juli 2024 @ 13:18:
[...]


Ik weet dat dit een heel oud topic is maar wil je toch nog bedanken voor het script!
offtopic:
Ajb een volgende keer liever alleen een 'thumbs up' geven aan degene die antwoord gaf, met de knop rechtsboven elke post.
Nadeel van omhoog halen is dat men onterecht het hele topic kan gaan lezen en reageren waar dat niet meer nodig is. Maar goed, in dit geval heeft het goed uitgepakt en was het nuttig :P

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • LadyVodka
  • Registratie: Augustus 2015
  • Niet online
en zoiets?:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub CombineNumbers()
    Dim rng As Range
    Dim cell As Range
    Dim combinedString As String
    
    Set rng = Range("A1:C1") ' Pas de range aan naar de gewenste kolommen
    
    For Each cell In rng
        combinedString = combinedString & cell.Value & ","
    Next cell
    
    ' Verwijder laatste komma
    combinedString = Left(combinedString, Len(combinedString) - 1)
    
    MsgBox combinedString
End Sub
Pagina: 1