第一个代码用于查看数字20是否已经在B28到B47的空格中。如果是这种情况,我希望它继续下一步。如果数字20不存在,那么我希望它将数字添加到B47行,然后在完成之后结束。在添加数字20之后我试图让它停止的问题。我没有结束,它继续沿着专栏继续下去,因为它没有任何结果而增加了20多分。我一直试图创建的是一个循环,它首先检查所有单元格,如果找不到20则将其添加一次,而不是添加20次。
我之后的第二个代码就是尝试删除B28中的所有空行直到B47。但是,它没有这样做,并且跳过这个循环完全转移到Blargh3而不是。我试过为此创建循环,但Excel总是给我一个错误。在尝试过自己之后,我已经尝试过研究如何解决这个问题。我找不到任何帮助我的东西。
由于我对VBA很陌生,所以非常感谢帮助。
For Each Cell In Worksheets("Sheet1").Range("B28:B48")
If Cell.Value > 19 Then
GoTo Blargh2
Else:
Range("B" & 47, "BM" & 47).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B" & 47) = 20
Dim a As Long
For a = 3 To 65
Cells(47, a) = 3
Next
End If
Next
Blargh2:
For Each Cell In Worksheets("Sheet1").Range("B28:B47")
If Cell.Value = 0 Then
Row.Delete X1DeleteShiftUp
Else:
GoTo Blargh3
End If
Next
Blargh3:
Dim i As Long
For i = 47 To 29 Step -1
If Range("B" & i) - Range("B" & i).Offset(-1, 0) > 1 Then
Range("B" & i, "BM" & i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B" & i) = Range("B" & i).Offset(1, 0) - 1
Dim c As Long
For c = 3 To 65
Cells(i, c) = 3
Next
i = i + 1
End If
Next
答案 0 :(得分:2)
启用即时窗口 - > ctrl + g 或在菜单栏中点击 View
=> Immediate Window
这将是基于你的逻辑的第一部分
Sub FirstPart()
Dim is20There As Range
With Range("B28:B47")
Set is20There = .Find(What:="20", LookIn:=xlValues, lookat:=xlPart)
End With
If is20There Is Nothing Then
Debug.Print "20 is not there, executing your code now"
Range("B" & 47, "BM" & 47).Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B" & 47) = 20
Dim a As Long
For a = 3 To 65
Cells(47, a) = 3
Next
Else
Debug.Print "exiting because 20 is there"
End If
End Sub
第一个循环中的内容是
使用范围.Find
中的B28:B47
函数来查找值20.如果值在那里,那么循环的Else
部分将执行,除了打印之外什么都不做消息到立即窗口已找到20。
这是20不存在的时候
如果找不到20(If is20There is Nothing
评估为True
),那么你可以执行你的代码,我想在B47添加一行(将最后一行向下移动)并用3号填充单元格一直到第65列,除了B列,你似乎将数字20分配给。
因此,如果20不存在,那么代码就什么都不做。
这是20岁时(没有发生)
第二部分循环通过B28:B47向后(从结束开始到开始)并删除整行(如果其中任何一行为空(仅B列)
这是在
之前
然后运行代码
Sub SecondPart()
Dim i As Long
Dim cell As Range
For i = 47 To 28 Step -1
Set cell = Range("B" & i)
If IsEmpty(cell) Then
Rows(cell.Row & ":" & cell.Row).Delete shift:=xlUp
End If
Next i
End Sub
这是在
之后