Información división en las filas

June 13

James tiene algunos datos en una hoja de cálculo que está contenida en una serie de filas. Una de las columnas de los datos incluyen las células que tienen varias líneas por celular. (Los datos de la celda se separó en líneas pulsando Alt + Enter entre elementos.) James le gustaría dividir estos datos en varias filas. Por ejemplo, si hay tres líneas de datos en una sola celda de la fila, entonces los datos en esa célula deben dividirse a cabo en tres filas.

Excel ofrece una manera práctica de dividir los datos en columnas separadas utilizando el texto a la herramienta de Columnas. Esto puede ser usado para dividir los datos en función de la presencia del carácter ASCII 10, que es lo que Excel inserta al presionar Alt + Enter. El problema es que mientras este se divide correctamente los datos en columnas separadas, no ponerlo en filas separadas, como James pidió.

Esto significa que la solución a este problema debe incluir el uso de una macro. Un enfoque se muestra en el siguiente código. En este ejemplo, la macro se supone que desea a "ampliar" todo en la hoja de trabajo, y que los datos en la hoja de trabajo comienza en la fila 1.

Sub CellSplitter1 ()
Temperatura dévil como variante
Dim cText As String
Dim J As Integer
Dim K As Integer
Dim L As Integer
Dim iColumn As Integer
LNumCols Dim As Long
LNumRows Dim As Long

iColumn = 4

Establecer wksSource = ActiveSheet
Establecer wksNew = Worksheets.Add

iTargetRow = 0
Con wksSource
lNumCols = .Range ("IV1"). End (xlToLeft) .Column
lNumRows = .Range ("A65536"). End (xlUp) .Row
Para J = 1 Para lNumRows
CText = .Cells (J, iColumn) .Value
Temperatura = división (cText, Chr (10))
Para K = 0 Para UBound (Temp)
iTargetRow = iTargetRow + 1
Para L = 1 a lNumCols
Si L <> Entonces iColumn
wksNew.Cells (iTargetRow, L) _
= .Cells (J, L)
Más
wksNew.Cells (iTargetRow, L) _
= Temperatura (K)
End If
Siguiente L
Siguiente K
Siguiente J
End With
End Sub

Tenga en cuenta que con el fin de ejecutar la macro, tendrá que especificar, utilizando la variable iColumn, la columna que contiene las células a dividirse aparte. Como está escrito aquí, la macro divide además información en la cuarta columna. Además, las versiones-separaron de las células se almacenan en una nueva hoja de cálculo, de modo que la hoja de cálculo original no se ve afectado en absoluto.

La macro se basa en el uso de la función Split para destrozar las células multilínea. Esta función sólo está disponible a partir de Excel 2000, y no está disponible en Excel para Mac en absoluto. Además, es posible que desee sólo ejecutar la macro en una selección particular de células. Para superar todos estos problemas potenciales, usted tendrá que considerar la siguiente macro, en su lugar:

Sub CellSplitter2 ()
Dim iSplitCol As Integer
Dim IEND As Integer
Dim sTemp As String
Dim iCount As Integer
Dim i As Integer
Dim wksNew como hoja de trabajo
Dim wksSource como hoja de trabajo
Dim lRow como de largo
Dim lRowNew como de largo
LRows Dim As Long
Dim lRowOffset como de largo
ITargetRows Dim As Integer
Dim iCol As Integer
ICols Dim As Integer
Dim iColOffset As Integer
Dim AWF Como WorksheetFunction

On Error GoTo ErrRoutine
Application.ScreenUpdating = False

Columna 'Set de dividir
iSplitCol = 4

iCols = Selection.Columns.Count
lRows = Selection.Rows.Count

iColOffset = Selection.Column - 1
lRowOffset = Selection.Row - 1
lRowNew = lRowOffset

Establecer wksSource = ActiveSheet
Establecer wksNew = Worksheets.Add

Establecer AWF = Application.WorksheetFunction
Con wksSource
Para lRow = (lRowOffset + 1) (lRowOffset + lRows)
sTemp = .Cells (lRow, iSplitCol)
Si Derecha (sTemp, 1) <> vbLf Entonces
sTemp = sTemp y vbLf
End If
iCount = (Len (sTemp) - _
Len (AWF.Substitute (sTemp, vbLf, "")))

Para iTargetRows = 1 Para iCount
lRowNew = lRowNew + 1
Para i = (iColOffset + 1) (iColOffset + iCols)
Si i <> Entonces iSplitCol
wksNew.Cells (lRowNew, i) _
= .Cells (LRow, i)
Más
IEND = InStr (sTemp, vbLf)
wksNew.Cells (lRowNew, i) _
= Izquierda (sTemp, IEND - 1)
sTemp = mediano (sTemp, IEND + 1)
End If
Siguiente i
ITargetRows Siguiente
Siguiente lRow
End With

ExitRoutine:
Establecer wksSource = Nothing
Establecer wksNew = Nothing
Establecer AWF = Nada
Application.ScreenUpdating = True
Exit Sub

ErrRoutine:
MsgBox Err.Description, vbExclamation
Reanudar ExitRoutine
End Sub

La macro todavía se basa en el uso de una variable para indicar la columna a partirse. En este caso, la variable es iSplitCol, y se establece en la columna 4. La macro sólo funciona en las celdas seleccionadas cuando se ejecuta por primera, y las células-split aparte se transfieren a una nueva hoja de cálculo. La dirección de la celda superior izquierda en la nueva hoja de cálculo es el mismo que en la celda superior izquierda seleccionado cuando se ejecuta la macro.

ExcelTips es su fuente de capacitación rentable Microsoft Excel. Esta punta (3263) se aplica a Microsoft Excel 97, 2000, 2002, y 2003. Usted puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y versiones posteriores) aquí: Información desdoblándose en Filas.