webentwicklung-frage-antwort-db.com.de

Verwenden von "Wenn Zelle enthält" in VBA Excel

Ich versuche, ein Makro zu schreiben, in dem, wenn es eine Zelle mit dem Wort "TOTAL" gibt, ein Bindestrich in die Zelle darunter eingegeben wird. Zum Beispiel:

enter image description here

Im obigen Fall möchte ich einen Strich in Zelle F7 (Hinweis: Es könnte eine beliebige Anzahl von Spalten vorhanden sein, daher wird es immer Zeile 7 sein, jedoch nicht immer Spalte F).

Ich verwende diesen Code derzeit, aber er funktioniert nicht und ich kann nicht herausfinden, warum.

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

Hilfe wäre dankbar. Hoffentlich mache ich nichts Dummes.

5
Moogle

Dadurch werden alle Zellen in einem bestimmten Bereich, den Sie ("RANGE TO SEARCH") definieren, durchlaufen und in der darunter liegenden Zelle mit der Offset()-Methode Bindestriche eingefügt. Als bewährte Methode in VBA sollten Sie niemals die Select-Methode verwenden.

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
12
Chrismas007

Das macht dasselbe, verbessert mit CONTAINS:

Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
Dim I As Long
Dim xRet As String
For I = 1 To LookupRange.Columns(1).Cells.Count
     If InStr(1, LookupRange.Cells(I, 1), LookupValue) > 0 Then
        If xRet = "" Then
            xRet = LookupRange.Cells(I, ColumnNumber) & Char
        Else
            xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
        End If
    End If
Next
SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function
1
Michinio
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

Auf diese Weise können Sie Spalten dynamisch hinzufügen und nach 6, die die Groß- und Kleinschreibung nicht berücksichtigt, einen Strich unter allen Spalten in der Zeile C einfügen. Hinweis: Wenn Sie an ZZ6 vorbeigehen, müssen Sie den Code ändern. Dies sollte Sie jedoch dahin bringen, wo Sie hin müssen.

1
NameIsPete

Suchst du danach?

 If ActiveCell.Value == "Total" Then

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

 End If

Du könntest so etwas tun 

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

Welches ist ähnlich was du hast. 

0
DejaVuSansMono