vb.net Excel Makro funktioniert nicht wie gewünscht?
Sub MarkColumns()
Dim ws As Worksheet
Dim lastRow As Long, lastColumn As Long
Dim col As Long
Dim row As Long
Dim cell As Range
' Arbeitsblatt festlegen
Set ws = ThisWorkbook.Worksheets("Tabelle1") ' Ersetzen Sie "Tabelle1" durch den Namen Ihres Arbeitsblatts
' Letzte Zeile und letzte Spalte ermitteln
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row
lastColumn = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' Alle Spalten durchlaufen
For col = 1 To lastColumn
' Prüfen, ob ein Wert in irgendeiner Zeile der Spalte größer oder gleich 25 ist
For row = 1 To lastRow
Set cell = ws.Cells(row, col)
If cell.Value >= 25 Then
' Wenn ja, die gesamte Spalte markieren und zur nächsten Spalte wechseln
ws.Columns(col).Interior.Color = RGB(255, 0, 0)
Exit For ' Beenden Sie die Schleife, wenn ein Wert >= 25 gefunden wurde
End If
Next row
Next col
End Sub
Das Makro markiert jedeglich eine Spalte Rot, wenn ein Wert = 25 oder grösser 25 wenn diese Bedingung auf Zeile 1 zutrifft, es sollte jedoch die Spalte rot markieren egal in welcher Zeile der Wert gleich 25 oder grösser 25 ist.
Weis jemand wie ich das Makro anpassen muss damit es die gewünschte Funktionalität gewährleistet?
Würdest Du bitte nochmal präzisieren, was das Macro tun soll?
Es soll die gesamte Spalte Rot markieren, wenn eine Zelle der Spalte einen Wert enthält =25 oder grösser.
Dabei soll es alle Spalten & alle Zellen Prüfen.
2 Antworten
Ungetestet und auf die Schnelle...
Sub SpaltenMarkieren()
'Variablen deklarieren
Dim Spalte As Integer
Dim Zelle As Range
Dim Wert As Double
'Zellen in allen Spalten durchlaufen
For Spalte = 1 To ActiveSheet.UsedRange.Columns.Count
'Zelle in aktueller Spalte suchen
Set Zelle = ActiveSheet.UsedRange.Columns(Spalte).Find(What:="", LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext)
'Wenn Zelle gefunden wurde
If Not Zelle Is Nothing Then
'Wert der Zelle auslesen
Wert = Zelle.Value
'Wenn Wert größer oder gleich 25 ist, dann Spalte markieren
If Wert >= 25 Then
'Hintergrundfarbe der Spalte auf rot setzen
ActiveSheet.Columns(Spalte).Interior.Color = RGB(255, 0, 0)
End If
End If
Next Spalte
End Sub
Letztendlich habe ich geschafft mit deinem neuen Ansatz, den Code dort anzupassen und das Makro funktionsfähig zu kriegen:
Sub SpaltenMarkieren()
'Variablen deklarieren
Dim Spalte As Integer
Dim Zelle As Range
Dim Wert As Double
'Zellen in allen Spalten durchlaufen
For Spalte = 1 To ActiveSheet.UsedRange.Columns.Count
'Schleife durch die Zellen der Spalte
For Each Zelle In ActiveSheet.UsedRange.Columns(Spalte).Cells
'Wert der Zelle auslesen
Wert = Zelle.Value
'Wenn Wert größer oder gleich 25 ist, dann Spalte markieren
If Wert >= 25 Then
'Hintergrundfarbe der Spalte auf rot setzen
ActiveSheet.Columns(Spalte).Interior.Color = RGB(255, 0, 0)
Exit For 'Wenn eine Zelle gefunden wurde, die die Bedingung erfüllt, die Schleife beenden
End If
Next Zelle
Next Spalte
End Sub
Dieser Code macht nun genau was er soll.
Vielen Dank für die Hilfe.
Vielen Dank! ich glaube jedoch hier ist das Problem, das die Bedingung der 2ten If Schleife niemals erfüllt wird, weshalb genau kann ich "noch" nicht sagen.
Lösung für den VBA Fall sind ja schon vorhanden.
Sofern die Spalte wegen einer "25" rot werden soll, dann geht dies aber viel einfacher mit bedingter Formatierung.