Cómo dividir una celda

Me preguntaba si hay una manera de dividir las celdas en la list de imágenes en 8 segmentos de personajes poniendo cada 8 caracteres en la hoja2 e include campo1, campo2, campo3 para cada línea.

IDNUM FIELD1 FIELD2 FIELD3 CONVSTATUS DUPEID IMAGELIST 7 Person1 07/20/1982 20321 4 0 000001370000013900000140000001410000014200000143000001440000014500000146000001470000014800000149000001500000015100000152000001530000015400000155000001560000015700000158000001590000016000000161000001620000016300000164000001650000016600000167000001680000016 8 Person2 08/20/1984 240761 4 1 000002030000020400000205000002060000020700000208000002090000021000000212000002160000021700000218000002190000022000000221000002220000022300000224000002250000022600000227000002280000022900000230000002310000023200000233000002340000023500000236000002370000023 9 Person3 09/13/1986 240762 4 1 00000403000004040000040500000406000004070000040800000409000004100000041200000416 ​ 

Esto es lo que espero archivar al final. (acortado debido a la list de imágenes puede ser muy grande en tamaño)

 Person1 07/20/1982 20321 00000137 Person1 07/20/1983 20322 00000139 Person1 07/20/1984 20323 00000140 Person2 08/20/1984 240761 00000203 Person2 08/20/1984 240761 00000204 Person2 08/20/1984 240761 00000205 Person3 09/13/1986 240762 00000403 Person3 09/13/1986 240762 00000404 Person3 09/13/1986 240762 00000405 

Con IDNUM en A1 (según la image de muestra), ejecute este código.

IMAGESET split

 Sub split_img_set() Dim rw As Long, lr As Long, v As Long, vi As Long, vVALs As Variant With ActiveSheet '<-set this worksheet reference properly!! lr = .Cells(Rows.Count, 2).End(xlUp).Row .Cells(lr + 3, 2).Resize(1, 4) = Array(.Cells(1, 2).Value, .Cells(1, 3).Value, .Cells(1, 3).Value, "IMAGES") For rw = 2 To lr vVALs = .Cells(rw, 2).Resize(1, 6).Value vi = Len(vVALs(1, UBound(vVALs, 2))) For v = 1 To vi Step 8 .Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Resize(1, 3) = Array(vVALs(1, 1), vVALs(1, 2), vVALs(1, 3)) .Cells(Rows.Count, 2).End(xlUp).Offset(0, 3).NumberFormat = "@" .Cells(Rows.Count, 2).End(xlUp).Offset(0, 3) = Mid(vVALs(1, UBound(vVALs, 2)), v, 8) Next v Next rw End With End Sub 

Los resultados se crearán bajo los valores existentes. Puede haber habido un error de publicación, pero los primeros dos valores IMAGELIST de muestra no eran directamente divisibles por 8 , con 255 caracteres de longitud.

Aquí hay un fragment de código con el que puede comenzar (suponiendo que está copyndo de Sheet1 a Sheet2):

 Sub Test2() Dim wsSheet As Worksheet Set wsSheet = ActiveWorkbook.Worksheets("Sheet1") Dim LastRow As Integer, RowsToCopy As Integer, Counter As Integer, Step As Integer, ILCol As Integer ILCol = 4 Counter = 2 LastRow = wsSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, After:=[A1]).Row For i = 2 To LastRow RowsToCopy = Len(wsSheet.Cells(i, ILCol)) / 8 Step = 1 For t = 1 To RowsToCopy ActiveWorkbook.Sheets("Sheet2").Cells(Counter, 4).Value = CStr(Mid(wsSheet.Cells(i, ILCol).Value, Step, 8)) Step = Step + 8 Counter = Counter + 1 Next t Next i End Sub 

Simplemente cambie ILCol = 4 a cualquier columna en la que se encuentre la columna IMAGELIST. Igualmente tendrá que escribir en un bucle para copyr sobre las otras columnas, luego formatee la nueva columna como "00000000", pero este debería ser un buen comienzo.