设置
我有一个Excel文件,其中A到J列中包含源数据。
在K列中有一个“发送类型”值,它可以是“多个”或“单个”。
L列中有一个“发送计数”值,该值为数字(“N”)。
目标
1.复制源数据
1.插入N-1行
1.将该数据N-1次粘贴到这些行中。
我希望结果是粘贴N次的数据。
- 如果N为1,则不需要复制/插入/粘贴
- 如果N大于1,则结果应为显示N次的数据。
Excel工作表示例
当前VBA
Sub Copy_PROD_Paste_Send_Count()
Dim Copy_Row As Integer
Dim Send_Count As Variant
Dim TargetMapCount As Integer
Dim ProgressCount As Integer
Dim Send_Type As String
Dim ProgressTarget As Integer
Copy_Row = 1
TargetMapCount = Application.WorksheetFunction.SumIf(Range("K:K"), "Many", Range("L:L"))
Send_Type = Cells(Copy_Row, "K")
ProgressTarget = Application.WorksheetFunction.Count(Range("A:A")) + Application.WorksheetFunction.SumIf(Range("K:K"), "Many", Range("L:L")) - Application.WorksheetFunction.CountIf(Range("K:K"), "Many")
Application.ScreenUpdating = False
Do While (Cells(Copy_Row, "A") <> "")
Send_Count = Cells(Copy_Row, "L")
Send_Type = Cells(Copy_Row, "K")
If (Send_Type = "Many" And (Send_Count > 1) And IsNumeric(Send_Count)) Then
Range(Cells(Copy_Row, "A"), Cells(Copy_Row, "L")).Copy
Range(Cells(Copy_Row + 1, "A"), Cells(Copy_Row + Send_Count - 1, "L")).Select
Selection.Insert Shift:=xlDown
Copy_Row = Copy_Row + Send_Count - 1
ProgressCount = Range("A" & Rows.Count).End(xlUp).Row
Application.StatusBar = "Updating :" & ProgressCount - 1 & " of " & ProgressTarget & ": " & Format((ProgressCount - 1) / ProgressTarget, "0%")
End If
Copy_Row = Copy_Row + 1
Loop
End Sub
问题说明
宏在崩溃前最多执行大约2- 3 K行。我需要运行最多15 K。
我知道我应该试着把数据复制到一个数组中,在数组中操作它,然后把结果粘贴回一个新的工作表中,但我不知道该怎么做。
1条答案
按热度按时间2w2cym1i1#
下面是一个例程,它将输入表复制到一个数组,然后从输入构建一个输出数组(在内存中),然后将输出数组转储回工作表。
注:它忽略“单次/多次”列,而仅使用最后一列中的值来确定重复输出的次数。