条件循环的VBA代码
我正在尝试在Excel中创建条件循环宏。B列包含姓,C列包含名,D列包含名和姓。我试图让宏在D列=C列+B列时进行检测 如果D=C+B,则清除D的内容 因此,以下内容适用于单行:条件循环的VBA代码,vba,excel,Vba,Excel,我正在尝试在Excel中创建条件循环宏。B列包含姓,C列包含名,D列包含名和姓。我试图让宏在D列=C列+B列时进行检测 如果D=C+B,则清除D的内容 因此,以下内容适用于单行: Sub ClearContentsD () If Range("D1").Value = Range("C1").Value + Space(1) + Range("B1") Then Range("D1").ClearContents End Sub 如果没有添加的空间(1),它将无法工作,我无法让它在整个工作
Sub ClearContentsD ()
If Range("D1").Value = Range("C1").Value + Space(1) + Range("B1") Then Range("D1").ClearContents
End Sub
如果没有添加的空间(1),它将无法工作,我无法让它在整个工作表中循环:
Sub ClearContentsLoop()
Application.ScreenUpdating = False
Dim i As Long
For i = 1 To Rows.Count
Next i
Do While Cells(i, 4).Value = Cells(i, 3).Value + Space(1) + Cells(i, 2).Value
Cells(i, 4).ClearContents
Loop
Application.ScreenUpdating = True
End Sub
VBA不喜欢我这样做。任何帮助都将不胜感激
CJ一些问题:
- 必须将字符串与
和
连接起来。加号(
)用于添加李>+
- 你的
循环没有做任何事情:它的主体是空的李>For
- 您的
循环最多运行一次,因为Do While
不会递增李>i
- 为什么您需要两个循环(
和For
)是个谜李>Do While
- 一张工作表有许多行,您只使用其中的一小部分,因此不要循环遍历所有行(
),而使用For
UsedRange
- 你的
Sub ClearContentsLoop()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To ActiveSheet.UsedRange.Rows.Count
If Cells(i, 4).Value = Cells(i, 3).Value & " " & Cells(i, 2).Value Then
Cells(i, 4).ClearContents
End If
Next i
Application.ScreenUpdating = True
End Sub
有一种方法可以忽略正在计算的值中的空格。试试这个:
Application.ScreenUpdating = False
Dim i As Long
For i = 1 To Rows.Count
If InStr(1, Cells(i, 4).Value, Cells(i, 2).Value, vbTextCompare) > 0 And InStr(1, Cells(i, 4).Value, Cells(i, 3).Value, vbTextCompare) > 0 Then Cells(i, 4).ClearContents
Next i
Application.ScreenUpdating = True
说明:
通过使用InStr函数,您正在测试另一个文本字符串中是否存在一个文本字符串,如果至少找到一个匹配项,则该函数返回一个非零值(找到匹配项的位置)。在上面的示例中,您同时测试名和姓是否存在,如果两者都存在,则代码将清除单元格的内容
而且,正如注释部分所指出的,您需要在循环中执行此操作,以便按照指定计算和更新工作表长度下的所有单元格
请确保在原始数据的副本上进行测试,以便在要回滚更改时不会丢失原始值!;) 你能提供一个代码使用的例子吗?VBA不喜欢我的做法,而不是一个问题描述,除非你详细告诉我们VBA不喜欢什么。这具体意味着什么?另外,如果希望“John Smith”等于“John”+“Smith”,则需要一个空格,除非单元格值在“John”之后包含空格。
“John Smith”
不等于“John”+“Smith”
。在VBA中,+
仅用于算术。您需要“John”和“Smith”
,因为&
是串联运算符。您有一个For循环
,它从1计数到行。Count
(但不做其他操作)将i
的值保留为行。Count+1
。然后有一个Do循环
,它测试行i
上的值。但行i
不存在。我猜你的Do循环
应该是If
在For循环
中。这很有效,谢谢。我尝试先使用If/Then函数,但没有成功,但我的it无法使用空循环和(+)函数。