2012-04-04 12 views
2

Ich hatte gehofft, dass jemand Einblick in die folgende Excel-Makroanforderung hätte.Excel-Makro für die Verkettung der ausgewählten Bereiche

Startbedingung: Variable Anzahl von Textwerten in Spalte A

Lösungsvorschlag: Ich mag würde in der Lage sein eine Variable Anzahl von aufeinanderfolgenden Zellen in Spalte A zu wählen, und dann hat der Text ist durch ein Komma getrennt und in eine einzelne Spalte neben der obersten Zelle in Spalte B.

Beispiele: A2-A4 würde auf dem Blatt ausgewählt werden. Nach dem Ausführen des Makros würde der Inhalt von B2 (direkt neben dem Anfang der Auswahl) Text in der Form "A2, A3, A4" enthalten.

A5-A10 ausgewählt ist: Nachdem das Makro ausgeführt wird, die Inhalte von B5 (Direkt angrenzend nach oben Auswahl) würden Text in der Form "A5, A6, A7, A8, A9, A10" enthalten.

Was mich umbringt, ist, wie man die Variabilität von Mehrfachselektionen ausnutzt, und außerdem bin ich nicht klar, wie man mit Excel-Makros umgehen soll. Ich habe einen CS-Abschluss, aber ich habe in der Infrastruktur gearbeitet, also bin ich ein bisschen eingerostet. Kann mir jemand helfen, das würde mir jede Menge Zeit ersparen. Danke an alle Antworten.

Antwort

2

Der folgende Code macht das, was Sie suchen. Ich habe nicht viele Kommentare hinzugefügt, weil ich nicht sicher bin, welche Kommentare angemessen sind. Zum Beispiel möchte ich nicht den Zweck jeder Aussage erklären, wenn Ihr CS-Grad Sie raten lässt. Ich vermute auch, dass Ihre Frage mehr ist als das Offensichtliche. Zum Beispiel, sollte ich dies eine Funktion mit dem Arbeitsblatt gemacht haben und Zeilennummern als Parameter übergeben. Bitte kommen Sie mit Fragen zurück und ich werde meine Antwort bei Bedarf verbessern.

Option Explicit 
Sub JoinCells() 

    Dim ColFirst As Long 
    Dim ColLast As Long 
    Dim JoinedValue As String 
    Dim RowCrnt As Long 
    Dim RowFirst As Long 
    Dim RowLast As Long 

    RowFirst = Selection.Row  ' First row of selection 
    ' Selection.Rows.Count returns the number of rows in the selection. 
    ' Warning! You can fool this code by making multiple selections. 
    RowLast = RowFirst + Selection.Rows.Count - 1 

    ColFirst = Selection.Column 
    ColLast = ColFirst + Selection.Columns.Count - 1 

    If ColFirst <> 1 Or ColLast <> 1 Then 
    Call MsgBox("Please select a range within column ""A""", vbOKOnly) 
    Exit Sub 
    End If 

    With Worksheets("xxxxxxx")  ' Worksheet of your choice. 

    JoinedValue = .Cells(RowFirst, "A").Value 
    For RowCrnt = RowFirst + 1 To RowLast 
     JoinedValue = JoinedValue & "," & .Cells(RowCrnt, "A").Value 
    Next 
    .Cells(RowFirst, "B").Value = JoinedValue 

    End With 

End Sub 
+0

Tony, das funktioniert perfekt. Vielen Dank. Eine Frage. Wie übergebe ich die aktuelle Auswahl (markierte Zellen) auf dem Arbeitsblatt an den Code, damit ich RowFirst und RowLast festlegen kann, indem Sie auf dem Blatt A2 bis A9 auswählen und das Makro mit einer Tastenkombination ausführen? Ich gehe davon aus, dass Sie die Werte in einer Funktion als Argumente übergeben müssten, aber ich kenne die Funktion nicht, um ausgewählte Zellen zu identifizieren. – Tom

+0

Ich habe das Makro aktualisiert, was meiner Meinung nach die einfachste Möglichkeit ist, die aktuelle Auswahl zu identifizieren. –

+0

Herausragend. Genau das, was ich gesucht habe. Ich danke dir sehr. Ich wünschte, ich könnte deine Bewertung stoßen. – Tom

Verwandte Themen