2010-01-18 19 views

Respuesta

4

Basado en the thread you are citing, supongo que desea devolver la concatinación de todos los valores almacenados en las celdas, interpretando todos los valores como cadenas?

Para ello, se puede utilizar una macro VBA que se parece a esto:

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 modo de ejemplo, se puede llamar así:

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

Es esto lo que estabas buscando ?

Mike

4

Prueba la siguiente macro, no muy elegante en el que no se hace ninguna comprobación de errores, etc, pero las obras. Asigne la macro a un botón, haga clic en una celda, haga clic en el botón de macro, resalte el rango deseado (origen) para fusionar con el mouse (se rellenará automáticamente en el cuadro de diálogo de entrada), haga clic en Aceptar, resalte el destino celda (completará automáticamente el cuadro de entrada en el cuadro de diálogo siguiente) haga clic en Aceptar, todas las celdas se fusionarán con un único carácter de espacio en la celda de destino, que puede estar en el rango de fuente original). Depende de ti para eliminar las celdas superfluas manualmente. Trabaja con filas y columnas pero no con bloques.

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

Sólo para añadir a la solución de Mike, si usted desea conseguir su rango de una variable en lugar de un rango definido (que tenía problemas con la sintaxis):

Sub MyMacro() 

dim myVar As Range 

    MsgBox ConcatinateAllCellValuesInRange(myVar) 

End Sub 
Cuestiones relacionadas