2010-01-18 23 views

risposta

4

Basato su the thread you are citing, suppongo che desideri restituire la concatinazione di tutti i valori contenuti nelle celle, interpretando tutti i valori come stringhe?

Per questo, è possibile utilizzare una macro VBA che assomiglia a questo:

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 

A titolo di esempio, si può chiamare in questo modo:

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

E 'questo quello che stavi cercando ?

Mike

4

Provare la seguente macro, non molto elegante, nel senso che non fa alcun controllo degli errori, ecc, ma opere. Assegnare la macro a un pulsante, fare clic in una cella, fare clic sul pulsante macro, evidenziare l'intervallo desiderato (sorgente) da unire usando il mouse (si riempirà automaticamente nell'intervallo nella casella di input nella finestra di dialogo), fare clic su OK, evidenziare la destinazione cella (riempirà automaticamente la casella di input nella finestra di dialogo successiva) fare clic su OK, tutte le celle verranno unite con un singolo carattere di spazio nella cella di destinazione, che può essere nell'intervallo di origine originale). Fino a te per eliminare manualmente le celle superflue. Funziona con righe e colonne ma non con blocchi.

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

Giusto per aggiungere alla soluzione di Mike, se si desidera ottenere la vostra gamma da una variabile invece di un intervallo definito (ho avuto problemi con la sintassi):

Sub MyMacro() 

dim myVar As Range 

    MsgBox ConcatinateAllCellValuesInRange(myVar) 

End Sub