2010-01-18 10 views

Odpowiedz

4

Na podstawie the thread you are citing, myślę, że chcesz zwrócić konkatinację wszystkich wartości przechowywanych przez komórki, interpretując wszystkie wartości jako ciągi?

W tym celu można użyć makra VBA, który wygląda tak:

Function ConcatinateAllCellValuesInRange(sourceRange As Excel.Range) As String 
    Dim finalValue As String 

    Dim cell As Excel.Range 

    For Each cell In sourceRange.Cells 
     finalValue = finalValue + CStr(cell.Value) 
    Next cell 

    ConcatinateAllCellValuesInRange = finalValue 
End Function 

Jako przykład można nazwać tak:

Sub MyMacro() 
    MsgBox ConcatinateAllCellValuesInRange([A1:C3]) 
End Sub 

Czy to, czego szukali ?

Mike

4

Wypróbuj następujące makro, nie bardzo elegancki w tym, że nie wykonuje sprawdzanie błędów itp ale prace. Przypisz makro do przycisku, kliknij komórkę, kliknij przycisk makra, podświetl odpowiedni zakres (źródłowy), aby scalić za pomocą myszy (automatycznie wypełnisz zakres w polu wprowadzania w oknie dialogowym), kliknij przycisk ok, zaznacz cel komórka (automatycznie wypełni pole wejściowe w następnym oknie dialogowym) kliknij OK, wszystkie komórki zostaną połączone z pojedynczym znakiem spacji w komórce docelowej, która może znajdować się w oryginalnym zakresie źródłowym). Aż do usunięcia niepotrzebnych komórek ręcznie. Roboty z wierszami i kolumnami, ale nie z blokami.

Sub JoinCells() 

Set xJoinRange = Application.InputBox(prompt:="Highlight source cells to merge", Type:=8) 
xSource = 0 
xSource = xJoinRange.Rows.Count 
xType = "rows" 
If xSource = 1 Then 
    xSource = xJoinRange.Columns.Count 
    xType = "columns" 
End If 
Set xDestination = Application.InputBox(prompt:="Highlight destination cell", Type:=8) 
If xType = "rows" Then 
    temp = xJoinRange.Rows(1).Value 
    For i = 2 To xSource 
     temp = temp & " " & xJoinRange.Rows(i).Value 
    Next i 
Else 
    temp = xJoinRange.Columns(1).Value 
    For i = 2 To xSource 
     temp = temp & " " & xJoinRange.Columns(i).Value 
    Next i 
End If 

xDestination.Value = temp 

End Sub 
0

Wystarczy dodać do roztworu Mike'a, jeśli chcesz uzyskać zakres od zmiennej zamiast zdefiniowanego zakresu (miałem kłopoty ze składnią):

Sub MyMacro() 

dim myVar As Range 

    MsgBox ConcatinateAllCellValuesInRange(myVar) 

End Sub 
Powiązane problemy