如何使用宏来分析界面输出?

时间:2017-09-04 18:31:37

标签: excel vba interface

我目前正在尝试开发一个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  

我试图尽可能清楚,但请随意询问您是否有任何疑问。

提前致谢!

1 个答案:

答案 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

这是我测试的结果: enter image description here