2014-12-11 6 views
3

Я пытаюсь написать макрос, где, если есть ячейка со словом «TOTAL», тогда она будет вводить тире в ячейке под ней. Например:Использование «Если ячейка содержит» в VBA excel

enter image description here

В приведенном выше случае, я хотел бы прочерк в ячейке F7 (примечание: может быть любое количество столбцов, поэтому он всегда будет строка 7, но не всегда колонка F).

В настоящее время я использую этот код, но он не работает, и я не могу понять, почему.

Dim celltxt As String 
Range("C6").Select 
Selection.End(xlToRight).Select 
celltxt = Selection.Text 
If InStr(1, celltext, "TOTAL") > 0 Then 
Range("C7").Select 
Selection.End(xlToRight).Select 
Selection.Value = "-" 
End If 

Справка будет принята с благодарностью. Надеюсь, я не делаю что-то глупое.

+0

'Это не работает, и я не могу понять, почему' - * как * он не работает? – LittleBobbyTables

+0

@LittleBobbyTables Нет сообщения об ошибке, но он просто не помещает «-» в ячейку (поэтому ячейка остается пустой). – Moogle

+3

НИКОГДА. КОГДА-ЛИБО. ИСПОЛЬЗОВАНИЕ. ВЫБРАТЬ. – Chrismas007

ответ

8

Это будет проходить через все ячейки заданного диапазона, которые вы определяете ("RANGE TO SEARCH"), и добавьте штрихи в ячейку ниже, используя метод Offset(). Как наилучшая практика в VBA, вы никогда не должны использовать метод Select.

Sub AddDashes() 

Dim SrchRng As Range, cel As Range 

Set SrchRng = Range("RANGE TO SEARCH") 

For Each cel In SrchRng 
    If InStr(1, cel.Value, "TOTAL") > 0 Then 
     cel.Offset(1, 0).Value = "-" 
    End If 
Next cel 

End Sub 
+0

Работает отлично, приветствует. – Moogle

0

Вы хотите что-то ищите?

If ActiveCell.Value == "Total" Then 

    ActiveCell.offset(1,0).Value = "-" 

End If 

могли бы вы сделать что-то вроде этого

Dim celltxt As String 
celltxt = ActiveSheet.Range("C6").Text 
If InStr(1, celltxt, "Total") Then 
    ActiveCell.offset(1,0).Value = "-" 
End If 

который похож на то, что у вас есть.

1
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

If Not Intersect(Target, Range("C6:ZZ6")) Is Nothing Then 

    If InStr(UCase(Target.Value), "TOTAL") > 0 Then 
     Target.Offset(1, 0) = "-" 
    End If 

End If 

End Sub 

Это позволит вам добавить столбцы динамически и автоматически вставлять дефис под любые столбцы в строке C после 6, содержащей случае нечувствительной «Total». Примечание. Если вы пройдете ZZ6, вам нужно будет изменить код, но это должно привести вас туда, куда вам нужно идти.

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