【发布时间】:2019-05-08 14:26:06
【问题描述】:
我有一份从客户的 SharePoint 下载的报告。该报告的长度取决于我运行它的站点和时间范围。大多数项目遇到的情况是,它们的信息在每个项目的一行中很好地排列在列中,但是在存在拆分决策的情况下,它将决策分为多行,并且不会在这些行中保留其他必要的信息。我正在尝试拆分配置并通过以下行查找循环以复制数量并根据它们的配置将它们粘贴到列中。
我设置了外循环并且它可以工作。当我设置内部循环时,它不会获取外部循环的值并向其添加 1 行。
Sub Split_Dispositions_One_Line()
Dim LastRow As Integer
Dim i As Integer
i = x + i
LastRow = Worksheets("Data").UsedRange.Rows.Count
With Worksheets("Data")
For x = 1 To LastRow
If InStr(Range("Y" & x).Value, "Split Disposition") Then
Do While Application.WorksheetFunction.IsText(Range("AI" & i).Value)
If InStr(Range("AI" & i).Value, "Release to Good Inventory") Then
Range("AH" & i).Copy Range("AK" & x)
ElseIf InStr(Range("AI" & i).Value, "Donate") Then
Range("AH" & i).Copy Range("AL" & x)
ElseIf InStr(Range("AI" & i).Value, "Destroy, Landfill") Then
Range("AH" & i).Copy Range("AM" & x)
ElseIf InStr(Range("AI" & i).Value, "Destroy, Animal Feed") Then
Range("AH" & i).Copy Range("AN" & x)
ElseIf InStr(Range("AI" & i).Value, "Return To Plant") Then
Range("AH" & i).Copy Range("AO" & x)
End If
Loop
End If
Next x
End With
End Sub
我的目标是遍历行,当我在 Y 列中遇到“Split Disposition”时,它将进入内部循环,从 Y 中找到“Split Disposition”的位置下降 1 行并循环遍历那些行,如果 AI 包含文本,它将复制 AH 中的值并将其粘贴到与原始行中的 AH 对应的列,在该列中它在 Y 列中找到“Split Disposition”。这些行的数量各不相同,但它们始终为一一个接一个。
如果循环在单元格 Y5 中找到“Split Disposition”,则内部循环将从 AI6 开始,如果它有文本复制 AH6 并粘贴到 AK5 列,那么如果 AI7 包含文本,它将复制 AH7 并可能粘贴它在 AL5 中(如果那是与 AH7 匹配的列)。
【问题讨论】:
-
请注意,行计数变量(
i和LastRow)必须是Long类型,因为 Excel 的行数超过了Integer可以处理的数量。 • 并且根本没有声明x。我建议始终激活Option Explicit:在 VBA 编辑器中转到 Tools › Options › Require Variable Declaration。 -
另一件事是您的
With Worksheets("Data")完全没用,因为您的Range语句都不是以点.开头,如果您希望您的范围使用With语句,您应该启动它们像.Range("Y" & x)这样的点。为With语句中的所有范围修复此问题。