如果列A包含x AND列B包含y那么添加值

时间:2016-04-20 09:36:08

标签: excel vba excel-vba

我对macros很新(现在已经有几天了!)但是我正在慢慢地努力。如果列D包含文本“(2)”并且列AG包含文本“Adult”,我想创建一个将值<2>添加到单元格的宏。

我创建了一个宏,到目前为止,如果列D包含文本“(2)”,到目前为止将单元格的值更改为5(而不是添加到它) - 我花了一段时间搞乱“和“功能,但我似乎无法找到一种方法,使其考虑到AG列中的”(2)“文本”成人“文本(I只能让它搜索一个或另一个。)

这是我的尝试(这不包括我尝试包含“成人”文字的任何失败):

Sub BUBFindGuests()
    Dim SrchRng As Range
    lastRow = Range("D" & Rows.Count).End(xlUp).Row
    Set SrchRng = Range("D1:D" & lastRow, "AG1:AG" & lastRow)
    For Each cel In SrchRng
        If InStr(1, cel.Value, "(2)") > 0 Then
            With cel.Offset(0, 39)
                .Offset(-1, 0) = "5"
            End With
        End If
    Next cel
End Sub

我基本上只是想弄清楚如何在AG列中添加“成人”文字,以及如何使宏添加而不是更改最终价值。我也相对肯定我的代码的某些部分是不必要的或笨重的,但凭借我的经验水平,我不确定如何纠正它。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

根据您的代码判断,您希望 2添加到C列,如果是这样的话,这应该可以解决问题:

Sub BUBFindGuests()

lastRow = Sheets("SHEETNAME").Range("D" & Rows.Count).End(xlUp).Row

For x = 1 to lastRow
  If InStr(1, Sheets("SHEETNAME").Cells(x, 4), "(2)") <> 0 _ 'Checks column D
  And Instr(1, Sheets("SHEETNAME").Cells(x, 33), "Adult") <> 0 Then 'Checks column AG
    Sheets("SHEETNAME").Cells(x, 3).Value = _
    Sheets("SHEETNAME").Cells(x, 3).Value + 2 'Change 3 to the appropriate column 
  End If
Next x

End Sub

答案 1 :(得分:2)

您可以像搜索(2)一样搜索成人。只需使用两次InStr函数并组合结果 - 布尔值。你可以用两种方式做到这一点,逻辑与或嵌套在两个if语句:

  • If InStrResult1 **And** InStrResult2 Then 'do stuff End If
  • If InStrResult1 Then If InStrResult2 Then 'do stuff End If End If

抱歉结局不好。

然后,您可以将单元格的当前值存储在变量中。然后将2添加到该变量(myVariable = myVariable + 2),然后将其值设置为您的单元格而不是5。

答案 2 :(得分:1)

编辑:事实证明我误解了你的问题。见修订后的代码。

Sub BUBFindGuests()

    Dim SrchRng As Range
    lastRow = Range("D" & Rows.Count).End(xlUp).Row
    Set SrchRng = Range("D1:D" & lastRow, "AG1:AG" & lastRow)
    For Each cel In SrchRng

        If InStr(1, cel.Value, "(2)") > 0 And InStr(1, cel.Value, "Adult") > 0 Then cel.Offset(-1, 39).Value = .Offset(-1, 0).Value & "5"

    Next cel

End Sub