我目前正在尝试开发一个VBA代码来帮助我分析界面的工作情况,代码基本上有2个主要步骤,我遇到了麻烦,第一个是删除以300开头的行, 195或210(这个位正在工作,但我需要激活宏至少3次才能清除它,所以它没有正确循环)。这是我的代码:
Dim MyString As String
MyString = "300 , 195 , 210"
For X = 1 To Range("E" & Rows.Count).End(xlUp).row
Do
If Replace(MyString, Left(Range("E" & X).value, 3), "") <> MyString Then Range("E" & X).EntireRow.Delete
Loop Until MyString <> "MyString"
第二部分有点棘手,主要信息行可能有1到4行,这些行由它们如何开始定义(如果它们从100开始它是一个新输入,如果它以200或220开头它是上面显示的100行的一部分)。 如果该输入有超过1行,我需要它们在同一行(在主列右侧的列上),所以我可以使用数据,但到目前为止,我只能够将“附加行”移动到另一列:
Dim row As Long
For row = 2 To 99999
' Check if "save" appears in the value anywhere.
If Range("E" & row).value Like "*220Z010*" Then
' Copy the value and then blank the source.
Range("F" & row).value = Range("E" & row).value
Range("E" & row).value = ""
End If
If Range("E" & row).value Like "*220Z020*" Then
' Copy the value and then blank the source.
Range("G" & row).value = Range("E" & row).value
Range("E" & row).value = ""
End If
If Range("E" & row).value Like "*200Z547*" Then
' Copy the value and then blank the source.
Range("H" & row).value = Range("E" & row).value
Range("E" & row).value = ""
End If
If Range("E" & row).value Like "*220Z030*" Then
' Copy the value and then blank the source.
Range("H" & row).value = Range("E" & row).value
Range("E" & row).value = ""
End If
我试图尽可能清楚,但请随意询问您是否有任何疑问。
提前致谢!
答案 0 :(得分:0)
以下代码执行您所描述的内容,我能够理解。我不得不猜测你的原始数据是什么样的,正如Ron Rosenfeld建议的那样,如果你提供原始数据和你想要的输出,你就更有可能得到你需要的帮助。但至少我在这里提供的内容应该让你开始。
请注意,我已将其分解为2个例程,如您所述。第一个例程删除行,然后第二个例程移动行。你没有说你是否想在移动它们之后删除它们,所以我没有。这些例程假设您的数据没有间隙。
Sub main()
removeRows
moveLines
End Sub
Sub removeRows()
Dim r As Range, s As String, d() As Integer, num As Integer
Set r = Range("E1")
While r <> ""
r.Select
s = Left(r, 3)
If s = "300" Or s = "195" Or s = "210" Then
num = num + 1
ReDim Preserve d(1 To num) As Integer
d(num) = r.row
End If
Set r = r.Offset(1, 0)
Wend
While num > 0
Rows(d(num)).Delete
num = num - 1
Wend
End Sub
Sub moveLines()
Dim r As Range, cell As Range, i As Integer, s As String
Set r = Range("E1")
Set r = Range(r, r.End(xlDown))
For Each cell In r
cell.Select
i = 0
s = Left(cell, 3)
If s = "100" Then
Do
i = i + 1
s = Left(cell.Offset(i, 0), 3)
If s = "200" Or s = "220" Then cell.Offset(0, i) = cell.Offset(i, 0)
Loop Until s <> "200" And s <> "220"
End If
Next
End Sub