条件循环的VBA代码

条件循环的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),它将无法工作,我无法让它在整个工作

我正在尝试在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 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无法使用空循环和(+)函数。