Excel VBA-if/then语句-用破折号标识单元格

Excel VBA-if/then语句-用破折号标识单元格,vba,excel,Vba,Excel,我试着写一行VBA,如果单元格A1中的任何地方都有一个破折号,那么B1会说“蓝色”。如果没有破折号,B1将显示“红色” 我编写了以下代码,但它不起作用,我不确定我是否正确地完成了“喜欢”部分: ActiveCell.FormulaR1C1 = _ "=IF(RC[-1]=" - ",""Blue"",""Red"")" 谢谢你能提供的任何帮助!我已经做了很多搜索,但找不到任何不包含特定数字或文本的示例。您可以使用以下简单的VBA脚本: Sub Test() Dim sh1 As Wor

我试着写一行VBA,如果单元格A1中的任何地方都有一个破折号,那么B1会说“蓝色”。如果没有破折号,B1将显示“红色”

我编写了以下代码,但它不起作用,我不确定我是否正确地完成了“喜欢”部分:

ActiveCell.FormulaR1C1 = _
    "=IF(RC[-1]=" - ",""Blue"",""Red"")"

谢谢你能提供的任何帮助!我已经做了很多搜索,但找不到任何不包含特定数字或文本的示例。

您可以使用以下简单的VBA脚本:

Sub Test()
Dim sh1 As Worksheet
Set sh1 = Sheets("Sheet1")

        Application.ScreenUpdating = False

                For x = 1 To sh1.Cells(rows.Count, "A").End(xlUp).Row

                    If InStr(1, sh1.Range("A" & x).Value, UCase("-"), 1) > 0 Then sh1.Range("B" & x).Value= "Red"
                    If InStr(1, sh1.Range("A" & x).Value, UCase("-"), 1) < 0 Then sh1.Range("B" & x).Value = "Blue"

                Next x

        Application.ScreenUpdating = True

End Sub
子测试()
Dim sh1作为工作表
设置sh1=板材(“板材1”)
Application.ScreenUpdating=False
对于x=1到sh1.Cells(rows.Count,“A”).End(xlUp).Row
如果InStr(1,sh1.Range(“A”和x).Value,UCase(“-”,1)大于0,则sh1.Range(“B”和x).Value=“红色”
如果InStr(1,sh1.Range(“A”和x).Value,UCase(“-”,1))小于0,则sh1.Range(“B”和x).Value=“蓝色”
下一个x
Application.ScreenUpdating=True
端接头
或一行:

ActiveCell.FormulaR1C1 = "=IF(ISERROR(FIND(""-"",RC[-1])),""Red"",""Blue"")"

我不认为在每个“B”列单元格中都放一个公式是一个好的做法,Excel可能需要很长时间来计算

试试这个:

Sub Example()

    mySheet.Cells(1, "B").Value = IIf(Not InStr(1, mySheet.Cells(1, "A"), Chr(45), vbTextCompare) = 0, "Blue", "Red")

End Sub
您可以使用此代码循环每个要设置该条件的单元格

职能:

IIf等于Excel工作表函数“IF”

InStr在另一个字符串中搜索一个字符串,可以将唯一字符作为criterea传递。我使用chr(45),因为它根据传递的代码返回一个字符,45个对破折号的引用

ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(FIND(""-"",RC[-1])),""Blue"",""Red"")"
其他几个答案中的错误已纠正(但未指出)在于将公式从

“-”

“”-“”


i、 e.从
-
的单双引号变成双引号。单引号是字符串的结尾-您甚至可以看到
-
在您的问题中以黑色文本显示,而不是红色文本,因此,它不是插入到
ActiveCell中的字符串的一部分。FormulaR1C1

要创建一个Excel公式,建议您使用
FIND
函数。在VBA中,您可以使用
指令