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

时间:2018-08-08 14:31:53

标签: excel vba excel-vba

我试图写一条VBA行,如果单元格A1在单元格中的任何地方都包含破折号,则B1会说“蓝色”。如果没有破折号,那么B1会说“红色”。

我编写了以下代码,但无法正常工作,并且不确定是否正确执行了“ like”部分:

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

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

5 个答案:

答案 0 :(得分:1)

您也可以使用

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

答案 1 :(得分:0)

您可以使用以下简单的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

答案 2 :(得分:0)

或单线:

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

答案 3 :(得分:0)

我不认为将公式放在每个“ 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 在另一个字符串中搜索一个字符串,您可以将唯一的char作为criterea传递。我使用了chr( 45 ),因为它根据传递的代码返回一个char,其中45个引用了 Dash 代码。

答案 4 :(得分:0)

在其他几个答案中已纠正(但未指出)的错误在于将公式从

更改

" - "

"" - ""

即从-周围的单双引号变为双双引号。单引号结束了您的字符串-您甚至可以看到问题中的-出现在黑色文本中,而不是红色文本,因此,它不是插入到ActiveCell.FormulaR1C1中的字符串的一部分。 / p>