我有一些从其他地方导入的数据。您看到的表单主要是通过将数据从F和G向上移动一行来解决,问题出现在我需要的第10行到第13行,这将是数据上移后的一个将是10到12我需要把它从9到单元格A到D的数据复制到第F行的末尾。然后继续向下并且如果任何其他行有相同的“问题”则继续下去......
我希望我很清楚,如果不是请问,但有人可以帮助我吗?我考虑过使用直到最终副本的概念,但我可以看到它不起作用,因为不是所有的细胞都需要它......它只需要在机会出现时发生。
附上表格的链接,希望澄清问题。
答案 0 :(得分:2)
我刚用您提供的数据测试了此代码。应该是好的,基于工作表中的数据。当然,如果数据范围发生变化,可能需要稍作调整。
Sub clean_data()
Dim wks As Worksheet
Dim cel As Range
Set wks = ThisWorkbook.Sheets("Imported Data")
With wks
'first bring columns F:G up to match their line
For Each cel In Intersect(.UsedRange, .UsedRange.Offset(1), .Columns(6))
If cel = vbNullString And cel.Offset(, -2) <> vbNullString Then
.Range(cel.Offset(1), cel.Offset(1, 1)).Copy cel
cel.Offset(1).EntireRow.Delete
End If
Next
'now fil columns A:D to match PO Date and PO#
For Each cel In Intersect(.UsedRange, .UsedRange.Offset(1), .Columns(1))
If cel = vbNullString And cel.Offset(, 5) <> vbNullString Then
.Range(cel.Offset(-1), cel.Offset(-1, 3)).Copy cel
End If
Next
End With
End Sub
答案 1 :(得分:0)
我认为这会做你想做的事情:
Sub CleanUpImport()
Dim LastCleanUpRow as Long
Dim FirstSORow as Long
Dim LastSORow
Dim TitleRow As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(ActiveSheet.Name)
LastCleanUpRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
TitleRow = 1
If Range("A1").Value = "" Then
TitleRow = Range("A1").End(xlDown).Row
End If
' Delete cells to line up columns F and G
If Range("F3").Value = "" And Range("G3").Value = "" Then
Range("F3:G3").Delete Shift:=xlUp
End If
' Set rows for first SO
LastSORow = LastCleanUpRow
FirstSORow = LastSORow
If Range("F" & LastSORow).Offset(-1).Value <> "" Then
FirstSORow = Range("F" & LastCleanUpRow).End(xlUp).Row
End If
' Copy SO header to any SOs that have multiple POs
Do Until FirstSORow = TitleRow
Range("A" & FirstSORow & ":D" & FirstSORow).Copy Range("A" & FirstSORow & ":D" & LastSORow)
LastSORow = Range("F" & FirstSORow).End(xlUp).Row
FirstSORow = LastSORow
If Range("F" & LastSORow).Offset(-1).Value <> "" Then
FirstSORow = Range("F" & LastSORow).End(xlUp).Row
If FirstSORow = TitleRow Then FirstSORow = FirstSORow + 1
End If
Loop
End Sub