我有一个报告,该报告是从客户端的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列遇到“拆分处理”时,它将转到内部循环,从在Y中找到“拆分处理”的位置开始向下排1行,然后遍历这些行行,并且如果AI包含文本,它将复制AH中的值并将其粘贴到在Y列中发现“ Split Disposition”的原始行中与AH对应的列中。这些行的数量有所不同,但它们始终为一一个接一个。
如果循环在单元格Y5中找到“拆分处置”,则表示不同,则内部循环将从AI6开始,如果它具有文本复制AH6并粘贴到AK5列中,则如果AI7包含文本,它将复制AH7并可能粘贴它在AL5中(如果是与AH7相匹配的列)。
答案 0 :(得分:1)
使用退出选项将内部循环更改为for循环,这似乎可行。
Sub Split_Dispositions_One_Line()
Dim LastRow As Integer
Dim i As Integer
LastRow = Worksheets("Data").UsedRange.Rows.Count
With Worksheets("Data")
For x = 1 To LastRow
If InStr(Range("Y" & x).Value, "Split Disposition") Then
For i = x + 1 To LastRow
If Application.WorksheetFunction.IsText(Range("AI" & i).Value) Then
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
ElseIf IsEmpty(Range("AI" & i).Value) Then
Exit For
End If
Next i
End If
Next x
End With
End Sub