/ / Excel VBA - Wie wähle ich einen Bereich aus, der den Werten in vorherigen Zellen entspricht? - Excel, Suche, Excel-Vba, Auswahl, Vba

Excel VBA - Wie wähle ich einen Bereich aus, der den Werten in vorherigen Zellen entspricht? - Excel, Suche, Excel-VBA, Auswahl, VBA

Ich habe sehr viele Daten, einschließlich Start- und Stoppzeiten für Flugzeuge im NAS. Ich möchte ein Makro erstellen, um diese Daten in Excel visuell darzustellen, z.

(Hinweis: Dieses Bild verwendet gefälschte Daten)

Wie Sie sehen können, habe ich die ersten 7 Reihen durchgemachtAllerdings gibt es mehrere Dateien mit jeweils mehr als 2500 Zeilen, was den Prozess langwierig macht. Ich habe versucht, ein Makro zu erstellen, aber ich bin verwirrt, wie man den geeigneten Bereich zum Hervorheben sucht und diesen auswählt.

Hier ist, was ich bisher habe:

Sub autofill()

Dim rng As Range
Dim row As Range
Dim cell As Range

"set the range of the whole search area
Set rng = Range("A2:HJ121")

For Each row In rng.Rows
Dim callsign As Variant
Set callsign = cell("contents", "A" & row)
Dim valstart As Variant
Set valstart = cell("contents", "E" & row)
Dim valstop As Variant
Set valstop = cell("contents", "F" & row)

"now select the range beginning from the column whose header matches the
"time in valstart and ends at the time which matches the time in valstop

Selection.Merge
Selection.Style = "Highlight"
Selection.Value = callsign
Next row

End Sub

Was ist der einfachste Weg, die Zeilen auszuwählen, die ich brauche?

Ich bin kein Programmierer von Beruf; ich entschuldige mich im Voraus, wenn mein Code eine schlampige Technik demonstriert oder gegen heilige Programmierprinzipien verstößt

Vielen Dank!

Antworten:

1 für die Antwort № 1

Hier ist mein Einsatz bei der VBA.

Option Explicit

Public Sub fillSchedule()
Dim startCol As Long
Dim endCol As Long
Dim i As Long
Dim j As Long

Dim ws As Excel.Worksheet
Dim entryTime As Single
Dim exitTime As Single
Dim formatRange As Excel.Range

Set ws = ActiveSheet

startCol = ws.Range("H:H").Column
endCol = ws.Range("HJ:HJ").Column

Call clearFormats

For i = 2 To ws.Cells(1, 1).End(xlDown).Row
entryTime = ws.Cells(i, 5).Value
exitTime = ws.Cells(i, 6).Value
Set formatRange = Nothing

For j = startCol To endCol
If (ws.Cells(1, j).Value > exitTime) Then
Exit For
End If

If ((entryTime < ws.Cells(1, j).Value) And (ws.Cells(1, j).Value < exitTime)) Then
If (formatRange Is Nothing) Then
Set formatRange = ws.Cells(i, j)
Else
Set formatRange = formatRange.Resize(, formatRange.Columns.Count + 1)
End If
End If
Next j

If (Not formatRange Is Nothing) Then
Call formatTheRange(formatRange, ws.Cells(i, "A").Value)
End If
Next i
End Sub

Private Sub clearFormats()
With ActiveSheet.Range("H2:HJ121")
.clearFormats
.ClearContents
End With

End Sub
Private Sub formatTheRange(ByRef r As Excel.Range, ByRef callsign As String)

r.HorizontalAlignment = xlCenter
r.Merge

r.Value = callsign

" Apply color
With r.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.799981688894314
.PatternTintAndShade = 0
End With

" Apply borders
With r.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With r.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With r.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With r.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub

0 für die Antwort № 2

Wie wäre es mit einer bedingten Formatierungslösung?

Markieren Sie alle Zellen von H2 bis (letzte rechte untere Zelle).

Benutze diese Formel:

=IF(AND((H$1>$E2),(H$1<$F2)),TRUE)

Dann bewerben Sie sich eine Füllung. Und wenn Sie bereit sind, die Grenze und den Namen innerhalb des ausgefüllten Bereichs aufzugeben, funktioniert das für Sie :)

Möglicherweise möchten Sie die Bereiche von G2 einfrieren, so dass Sie bis zur Spalte HJ blättern können und trotzdem die Spalte Rufzeichen sehen können.

Hoffe das hilft