2016-12-21 3 views
0

Hallo Leute, ich bin neu, um Makro und VBA zu übertreffen. Ich muss ein Makro erstellen, das mehrere Zellen in einer Auswahl von mehreren Zeilen zu einer einzelnen Zeichenfolge-Zelle mit Zeilenvorschub/Wagenrücklauf verkettet, z. B.Excel 2010 Makro

. Auswahl Bild:

enter image description here

Nach Verkettung sollte es so aussehen:

in eine einzelne Zelle Verkettete:

enter image description here

Mein aktueller Code funktioniert die Verkettung in einer Zelle, aber nicht Hinzufügen der Zeilenumbrüche:

Sub concat_3() 
    Dim row As Range 
    Dim cell As Range 
    Dim txt As String 

    For Each row In Selection 
     For Each cell In row.Cells 
      txt = txt & cell.Value 
     Next cell 
     txt = txt & vbCrLf 
    Next row 
    Selection.ClearContents 
    txt = Left(txt, Len(txt) - 2) 
    Selection(1).Value = txt 
End Sub 

Jede Hilfe, die ich bekomme, wird sehr geschätzt.

Antwort

1

Ich habe Ihren Code mit For-Schleifen (nicht für jeden) bearbeitet und es funktioniert irgendwie für mich. Versuchen.

Sub concat_3() 
    Dim c As Range 
    Dim txt As String 

    Dim i As Integer 
    Dim j As Integer 

    Set c = Selection 
    txt = "" 
    For i = 1 To c.Rows.Count 
     For j = 1 To c.Columns.Count 
      txt = txt & c(i, j).Value 
     Next j 
     txt = txt & vbCrLf 
    Next i 

    txt = Left(txt, Len(txt) - 2) 
    'to output in Sheet1 A1 
    Sheets("Sheet1").Range("A1") = txt 
End Sub 
+0

Es funktioniert perfekt. Vielen Dank. – Semayah

+0

Hey Nightcrawler, wie kann ich die Ausgabe auf ein anderes Arbeitsblatt in derselben Arbeitsmappe schreiben, damit ich die ursprünglichen Daten beibehalten kann? Ich probierte das Arbeitsblatt.Activate .... – Semayah

+0

Überarbeitete den Code. – nightcrawler23

0

ist hier ein anderer gehen:

Vorher:

enter image description here

Einige Code:

Sub fhuscvc() 
    Dim s As String, i As Long, a As Range 
    i = 0 
    s = "" 

    For Each a In Selection 
     s = s & " " & a.Value 
     i = i + 1 
     If i = 2 Then 
      i = 0 
      s = s & vbCrLf 
     End If 
    Next a 

    Selection.Clear 
    Selection(1).Value = s 
End Sub 

Und nach:

enter image description here

Der feste Block von Räumen jedes Paar von Elementen trennen, ist recht nicht .... schade, dass der TAB Charakter nicht innerhalb der Zellen funktioniert.

+0

Dies funktioniert für 2 Spaltenauswahlen, nicht irgendeine Anzahl von Spalten. :) – nightcrawler23

+0

@ nightcrawler23 Sie sind richtig –