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:
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.
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
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
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.
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.