Excel VBA将某些长度的分隔列分成多行

我有一张A:H的专栏。 我需要将H列每60个字符分割成一个新行,并将A:G复制到这些新行中。

以下是数据是如何以及我想要的:

数据图片https://i.stack.imgur.com/bVt25.png

在一个完美的世界里,在开始的时候会有一个专栏来logging每条消息的每一行。 所以A1栏是1A22A31A42等等。

有29453行,我需要做到这一点,所以手动做这不是一个真正的select。

请帮忙吗?

这并不是那么困难。

首先 ,将所有日志logging存储在一个数组中

其次 ,遍历数组中的每个日志logging和每个循环,做一个do while循环来插入新行; 将值复制到新行; 每60个字符分割一次string。

只要子串的长度超过60,就继续循环。

第三 ,对于列H的单元划分; 这可以通过使用中间函数来显示基于字符位置的值。

例如,我们将从字符位置1到60显示第一行

例如。 Mid(subString, 1, 60)

而对于第二行,我们将从字符位置61开始显示

例如。 Mid(subString, 61, Len(subString))

然后对于后续的while循环,第二行将从字符位置1到60等显示。

中function信息:

中(string,开始,长度)

string=完整的原始文本

开始=angular色的开始位置

长度=字符的长度

信息偏移量:

.Cells(rowNo,colNo).Offset(RowOffset,ColumnOffset)

RowOffset =例如。 [1 =单元格下方的1行] [-1 =单元格上方的1行]

ColumnOffset =例如。 [1 =单元格右边1列] [-1 =单元格左边1列]

完整解决scheme

 Option Explicit 'split every 60 characters new row Sub SplitEverySixtyChar() Dim ws As Worksheet Dim rowNo As Long Dim lastRowNo As Long Dim arrayLogNote As Variant Dim logNote As Variant Dim subString As String Set ws = ThisWorkbook.Sheets("Sheet1") With ws 'Find last row no lastRowNo = (.Cells(.Rows.Count, 1).End(xlUp).Row) 'Store all log note in array arrayLogNote = .Range("H2:H" & lastRowNo).Value 'Starting row no is 2 rowNo = 2 For Each logNote In arrayLogNote subString = CStr(logNote) Do While Len(subString) > 60 'Insert new row .Cells(rowNo, 1).Offset(1, 0).EntireRow.Insert 'Copy the cell from A:G col into new row .Cells(rowNo, 1).Offset(1, 0).Value = .Cells(rowNo, 1).Value .Cells(rowNo, 2).Offset(1, 0).Value = .Cells(rowNo, 2).Value .Cells(rowNo, 3).Offset(1, 0).Value = .Cells(rowNo, 3).Value .Cells(rowNo, 4).Offset(1, 0).Value = .Cells(rowNo, 4).Value .Cells(rowNo, 5).Offset(1, 0).Value = .Cells(rowNo, 5).Value .Cells(rowNo, 6).Offset(1, 0).Value = .Cells(rowNo, 6).Value .Cells(rowNo, 7).Offset(1, 0).Value = .Cells(rowNo, 7).Value 'Display text for new row from character position 60 onwards .Cells(rowNo, 8).Offset(1, 0).Value = Mid(subString, 61, Len(subString)) 'Display text from character position 1 to 60 .Cells(rowNo, 8).Value = Mid(subString, 1, 60) subString = .Cells(rowNo, 8).Offset(1, 0).Value 'Increment Row No rowNo = rowNo + 1 Loop 'Increment Row No rowNo = rowNo + 1 Next logNote End With End Sub 

注意:这可能不是最有效的解决scheme。 肯定有比这更好的解决scheme。