我有一张包含A:H列的表格。我需要将每60个字符的H列拆分成一个新行并将A:G复制到这些新行中。
以下是数据的来源以及我的需求:
在完美的世界中,开头会有一列可以计算每条消息的每一行。因此,列A1
为1
,A2
为2
,A3
为1
,A4
为{{} 1}}等等。
我需要执行29,453行,因此手动执行此操作并非真正的选择。
请帮忙吗?
答案 0 :(得分:2)
这并不是那么困难。
首先,将所有日志备注存储在数组中
第二次,遍历数组中的每个日志备注,对于每个循环,执行do while循环以插入新行;将值复制到新行;每隔60个字符拆分字符串。
只要子串的长度超过60,就继续循环。
第三,用于分割H列的单元格;这可以通过使用Mid函数来显示基于characer位置的值。
例如,第一行我们将从字符位置1到60显示
例如。 Mid(subString, 1, 60)
而对于第二行,我们将从字符位置61开始显示
例如。 Mid(subString, 61, Len(subString))
然后对于后续的do while循环,第二行将从字符位置1到60等显示
有关Mid功能的信息:
中(字符串,开头,长度)
string =完整的原始文本
start =角色的起始位置
length =字符长度
Cell Offset信息:
.Cells(rowNo,colNo).Offset(RowOffset,ColumnOffset)
RowOffset =例如。 [1 =单元格下方1行] [-1 =单元格上方1行]
ColumnOffset =例如。 [1 =单元格右侧1个col] [-1 =单元格左侧1个col]
完整解决方案
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
注意:这可能不是最有效的解决方案。肯定有比这更好的解决方案。