Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何在IF语句中使用和_Excel_Vba - Fatal编程技术网

Excel 如何在IF语句中使用和

Excel 如何在IF语句中使用和,excel,vba,Excel,Vba,我想检查一下: 如果单元格(i,“A”)包含文本“Miami”,(i,“D”)包含文本“Florida”,则将单元格(i,“C”)的值更改为BA Sub-ABC() 将wsh设置为工作表,i设置为长,lngEndRowInv设置为长 设置wsh=ActiveSheet i=2 lngEndRowInv=wsh.Range(“A”&wsh.Rows.Count).End(xlUp).Row 而我认为您应该在IF语句中附加.value: If Cells(i, "A").Value <>

我想检查一下:

如果单元格(i,“A”)包含文本“Miami”(i,“D”)包含文本“Florida”,则将单元格(i,“C”)的值更改为BA

Sub-ABC()
将wsh设置为工作表,i设置为长,lngEndRowInv设置为长
设置wsh=ActiveSheet
i=2
lngEndRowInv=wsh.Range(“A”&wsh.Rows.Count).End(xlUp).Row

而我认为您应该在IF语句中附加.value:

If Cells(i, "A").Value <> "Miami" And Cells(i, "D").Value <> "Florida" Then
    Cells(i, "C").Value = "BA"
End IF
With ActiveSheet
  :
  .Cells(Row,Column)
  :
End With
如果单元格(i,“A”)值为“迈阿密”,单元格(i,“D”)值为“佛罗里达”,则
单元格(i,“C”)。Value=“BA”
如果结束

如果问题中没有输入错误,则说明您的条件错误:

你说过:

如果单元格(i,“A”)包含文本“Miami”

…但是你的代码说:

If Cells(i, "A") <> "Miami"

编辑:

对不起,我实在帮不了你。正如我在评论中所说,我不是Excel VBA专家。
通常我现在会打开Excel并亲自尝试您的代码,但我在家里的任何机器上都没有Excel(我使用OpenOffice)

只有一件事:您能识别出不起作用的行吗?
也许这有助于其他人回答这个问题

它是否曾经执行(或至少尝试执行)过
单元格(i,“C”).Value=“BA”
行?
或者
If单元格(i,“A”)像“*Miami*”
这样的东西已经
False


如果是,请尝试只检查一个单元格,看看是否有效。

简短语法课程

单元格(行、列)
标识单元格。对于正在使用的Excel版本,行必须是介于1和最大值之间的整数。列必须是标识符(例如:“a”、“IV”、“XFD”)或数字(例如:1、256、16384)

.Cells(行、列)
标识先前With语句中标识的工作表中的单元格:

If Cells(i, "A").Value <> "Miami" And Cells(i, "D").Value <> "Florida" Then
    Cells(i, "C").Value = "BA"
End IF
With ActiveSheet
  :
  .Cells(Row,Column)
  :
End With
如果省略点,
单元格(行、列)
位于活动工作表中。因此,
wsh=ActiveWorkbook
wsh.Range
并不是绝对必要的。然而,我总是使用With语句,所以当我在六个月后返回代码时,我不想知道我指的是哪张表。因此,我要写:

With ActiveSheet
  :
  .Range.  
  :
End With
With Sheets("xxxx")
  :
  .Range.  
  :
End With
实际上,除非我真的希望代码在活动工作表上工作,否则我不会写上面的内容。如果用户启动宏时激活了错误的工作表,该怎么办。我会写:

With ActiveSheet
  :
  .Range.  
  :
End With
With Sheets("xxxx")
  :
  .Range.  
  :
End With
因为我的代码只适用于xxxx页

单元格(行、列)
标识单元格。单元格(行、列)。xxxx标识单元格的属性<代码>值
是一个属性。值是默认属性,因此您通常可以忽略它,编译器将知道您的意思。但在某些情况下,编译器可能会感到困惑,因此建议包含
.Value

如果单元格是“迈阿密”、“南迈阿密”、“迈阿密、北”或任何类似的单元格,则“*Miami*”之类的单元格(行、列)将为True

单元格(行、列)。Value=“Miami”
如果单元格正好等于“Miami”,则该值将为True。例如,“迈阿密”将给出错误的答案。如果要接受MIAMI,请使用小写函数:

Lcase(Cells(Row,Column).Value) = "miami"  
我的建议

当您尝试不同的建议时,您的示例代码不断变化,我发现这些建议令人困惑。当我开始键入此内容时,您正在使用
单元格(行、列)“Miami”

使用

例如,如果你想接受“南迈阿密”和“北迈阿密”

使用

如果你想接受,确切地说,“迈阿密”和“佛罗里达”

使用


如果您不关心大小写。

如果您只是在字符串中查找“Miami”或“Florida”的出现情况(因为您在两端都放了*),那么最好使用InStr函数,而不是类似的函数。结果不仅更加可预测,而且我相信你会有更好的表现

此外,VBA不会短路,因此当您使用AND关键字时,无论第一次测试是否失败,它都会测试AND的两侧。在VBA中,在这些情况下最好使用2个if语句,这样,如果没有找到“Miami”,就不会检查“Florida”

我得到的另一个建议是,for-each循环比for循环快。使用.offset可以实现同样的效果,但效率更高。当然还有更好的方法(比如变体数组),但这些方法会增加本例中不需要的复杂性

以下是一些示例代码:

Sub test()

Application.ScreenUpdating = False
Dim lastRow As Long
Dim cell As Range
lastRow = Range("A" & Rows.Count).End(xlUp).Row

For Each cell In Range("A1:A" & lastRow)
    If InStr(1, cell.Value, "Miami") <> 0 Then
        If InStr(1, cell.Offset(, 3).Value, "Florida") <> 0 Then
            cell.Offset(, 2).Value = "BA"
        End If
    End If
Next

Application.ScreenUpdating = True
End Sub

子测试()
Application.ScreenUpdating=False
最后一排一样长
暗淡单元格作为范围
lastRow=范围(“A”和Rows.Count).End(xlUp).Row
对于范围内的每个单元格(“A1:A”和lastRow)
如果InStr(1,单元格值,“Miami”)为0,则
如果InStr(1,单元格偏移量(,3).Value,“Florida”)为0,则
单元格偏移量(,2).Value=“BA”
如果结束
如果结束
下一个
Application.ScreenUpdating=True
端接头

我希望您能发现其中的一些有用信息,并继续使用VBA^^

哦!!对不起,你说得对。我的错。我想要这个,如果细胞(I,“A”)像“迈阿密”。但是,当我使用它时,它不起作用。你能识别出任何其他错误吗:i=2 lngEndRowInv=wsh.Range(“A”&wsh.Rows.Count).End(xlUp).Row虽然我不是一个真正的Excel VBA专家(我知道VBA,但我只在Access中使用它,所以我从未使用过Excel特定的东西,如
单元格
)。但是一般来说:你怎么知道这个代码是不好的?它是否做了一些超出你预期的事情?它一点作用都没有吗?你收到错误信息了吗?如果是,它是什么?我逐行运行它,同时看到我的Excel表;它应该做的事情,它没有做。它工作得很好,直到我包括和。直到——如果单元格(i,“A”)像“Miami”,那么单元格(i,“C”).Value=“BA”。并且您确定Excel工作表中确实有一行单元格A包含“Miami”,单元格D包含“Florida”…@user823911这是因为它省略了
*
wildcards@brettdj那我该怎么办呢
Sub test()

Application.ScreenUpdating = False
Dim lastRow As Long
Dim cell As Range
lastRow = Range("A" & Rows.Count).End(xlUp).Row

For Each cell In Range("A1:A" & lastRow)
    If InStr(1, cell.Value, "Miami") <> 0 Then
        If InStr(1, cell.Offset(, 3).Value, "Florida") <> 0 Then
            cell.Offset(, 2).Value = "BA"
        End If
    End If
Next

Application.ScreenUpdating = True
End Sub