Tekst-terugloop in één cel, gegevens splitsen

Items staan in één cel namelijk A1. En er is sprake van tekst terugloop door voor elk nieuw item eerst Alt+ Enter te geven. Hierdoor komt elk item op een nieuwe regel. We willen die items echter splitsen en elk item in een eigen cel plaatsen zodat het overzichtelijker wordt. Zie screenshot:

Dit kan op 4 manieren:
– Met een simpele formule die je in B1 invoert en vervolgens naar rechts sleept (2x)
– Met VBA (2x)

In[B1] =TRIM(MID(SUBSTITUTE($A1; CHAR(10); REPT(" "; 100)); (COLUMN(A1)-1)*100+1; 100))
en naar rechts slepen.

1. Kopieer de onderstaande code
2. Open een nieuwe werkmap
3. Druk op de toetscombinatie ALT + F11 om de Visual Basic Editor te openen
4. Druk op de toetscombinatie ALT + N om het menu Invoegen te openen
5. Druk op M om een standaard module in te voegen
6. Daar waar de cursor knippert voeg je de code in middels Ctrl + V
7. Druk op de toetscombinatie ALT + Q om de Editor af te sluiten en terug te keren naar Excel

Function SplitText(ByVal Cell As Range, ByVal LineNumber As Integer) As String
    Dim Lines As Variant
    Lines = Split(Cell.Value, Chr(10))
    If LineNumber - 1 <= UBound(Lines) Then
        SplitText = Lines(LineNumber - 1)
    Else
        SplitText = ""
    End If
End Function

Aangezien dit een functie is moet je nog één ding doen namelijk in B1 de volgende formule zetten:

In[B1] =SplitText($A1; COLUMN()-1)
en naar rechts slepen.

En de derde manier is ook VBA code:

Option Explicit
Sub Tekst_Terugloop_Van_Cel_Naar_Rij()
    Dim WsNieuw As Worksheet, rngBereik As Range
    Dim lngRij As Long, lngKolom As Long, lngVolgende As Long
    Dim lngTeller As Long, Data As Variant
    
    'Nieuw werkblad invoegen
    Set WsNieuw = Worksheets.Add
    
    'rngBereik is waar de gegevens staan
    With Worksheets("Sheet1")
        Set rngBereik = .Range("A1").CurrentRegion
        
        'Eerste rij met kolomtitels kopiëren
        rngBereik.Rows(1).Copy WsNieuw.Range("A1")
        lngVolgende = 2
        With rngBereik
            
            'Alle rijen doorlopen
            For lngRij = 2 To .Rows.Count
                lngTeller = 0
                
                'Alle kolommen doorlopen
                For lngKolom = 1 To .Columns.Count
                    
                    'Gegevens in cel splitsen
                    Data = Split(.Cells(lngRij, lngKolom).Value, _
                    Chr(10))
                    
                    'Gespliste gegevens wegschrijven naar rijen
                    WsNieuw.Cells(lngVolgende, lngKolom).Resize _
                    (UBound(Data) + 1).Value = Application.Transpose(Data)
                    
                    lngTeller = WorksheetFunction.Max(lngTeller, _
                    UBound(Data) + 1)
                Next lngKolom
                lngVolgende = lngVolgende + lngTeller
            Next lngRij
        End With
    End With
    WsNieuw.Cells.EntireColumn.AutoFit
End Sub

En de vierde manier:

in [B1] =TRIM(MID(SUBSTITUTE($A1;CHAR(10); REPT(" ";99));COLUMNS($A:A)*99-98;99))
en naar rechts slepen.

Leave a Reply

Your email address will not be published. Required fields are marked *