2016-04-20 2 views
2

Я очень новичок в макросах (прошло уже несколько дней!), Но медленно прокладывал себе путь. Я хотел бы создать макрос, который добавляет значение 2 в ячейку, если столбец D содержит текст «(2)» И столбец AG содержит текст «Взрослый».Если столбец A содержит x И столбец B содержит y THEN, добавьте значение

Я создал макрос, который до сих пор меняет значение ячейки на 5 (вместо того, чтобы добавлять к ней), если столбец D содержит текст «(2)» - я потратил некоторое время на общение с " И "функции, но я не могу найти способ сделать так, чтобы он учитывал как текст" (2) "в столбце D , так и текст" Взрослый "в столбце AG (я могу сделать это поиск того или другого).

Вот моя попытка (это не относится к какой-либо из моих неудачных попыток включить «для взрослых» текст):

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, а также как сделать макрос добавить, а не изменить конечное значение. Я также относительно уверен, что некоторые части моего кода не нужны или неуклюжи, но с моим уровнем опыта я не уверен, как исправить это. Любая помощь приветствуется.

+0

«Изменить конечное значение» ... не уверен, что вы имеете в виду, пытаетесь ли вы добавить 2 к значению ячейка в определенном столбце? Вы пытаетесь добавить 2 в конец строки (слова)? –

+0

Извинения за двусмысленность. Я пытаюсь добавить 2 к значению ячейки в определенном столбце. Также хотел бы поблагодарить всех, кто отправил сообщения - хотя я могу принять только один ответ, все ответы действительно помогли мне улучшить мое понимание VBA. Большое спасибо. – Antony

ответ

3

Судя по вашему коду, вы хотите добавить 2 в колонке С, если это так, то это должно сделать трюк:

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 
+2

Пока я работал над своим кодом так же, как на «sheet4», я ужалился и предложил вам изменить ваше определение последней строки на 'lastrow = Sheets (« SHEETNAME »). Range (« D »& Rows.Count) .End (xlUp) .Row' Альтернативно вы можете перенести весь этот код в оператор WITH. –

+0

Ах да, хорошо поймать, я сейчас обновляюсь. – Jordan

+2

FWIW, я думаю, что 'Cells (x,« AG »)' намного легче отлаживать, чем 'Cells (x, 33)' ;-) – Rory

1

EDIT: Оказалось, что я неправильно понял ваш вопрос. См. Пересмотренный код.

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 
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 к этой переменной(), а затем установите ее значение для своей ячейки вместо 5.

Смежные вопросы