
Ich habe ein Makro, das funktioniert, aber ich möchte den Zellbereich ändern von
Set SearchRange = Range("E1:E12") to
Set SearchRange = Range("A21:A32")
Ich habe die Änderung im Code vorgenommen, aber er funktioniert nicht, wenn ich ihn ausführe, und ich bin mir nicht sicher, wo das Problem liegt. Unter dem Code habe ich eine Erklärung.
Sub Part()
Dim SearchRange As Range, _
DashPair As Variant, _
PairParts As Variant, _
SearchVal As Variant, _
FoundPos As Variant, _
NextCol As Long
Set SearchRange = Range("A21:A32")
For Each DashPair In Range("B17, F17, J17")
Err.Clear
NextCol = 1
If DashPair.Value <> "" Then
PairParts = Split(DashPair, "-")
If PairParts(1) = "15" Then
SearchVal = DashPair.Offset(RowOffset:=1).Value
On Error Resume Next
Set FoundPos = SearchRange.Find(SearchVal, LookAt:=xlWhole)
If Not FoundPos Is Nothing Then
FoundPos = FoundPos.Row
' find first empty column right of E
While SearchRange(FoundPos).Offset(ColumnOffset:=NextCol).Value <> ""
NextCol = NextCol + 1
Wend
PairParts(1) = PairParts(1) + 1
PairParts = Join(PairParts, "-")
With SearchRange(FoundPos).Offset(ColumnOffset:=NextCol)
.NumberFormat = "@"
.Value = "" & PairParts & ""
End With
DashPair.Resize(ColumnSize:=3).ClearContents
End If
End If '15 found
End If
Next DashPair
End Sub
Beispiel mit erwartetem Ergebnis.
Bitte sehen Sie sich mein Excel-Beispiel an. Das Makro sucht derzeit nur in den Zellen B17, F17 und J17 nach einer 15 (als letzte Zahl 20-15 usw.). Wenn es ein positives Ergebnis hat, verweist es auf die Zelle darunter und verwendet diese Zahl, um in den Zellen A21:A32 nach einer Übereinstimmung zu suchen und das Kopieren und Einfügen in die angrenzende Zelle rechts davon zu platzieren.
Beispiel: Zelle B30 enthält eine 20-15. In der Zelle darunter enthält B18 eine 1. 1 ist die Suchnummer im Bereich A21:A32. Wenn Sie im Bereich A21:A32 etwas gefunden haben, platzieren Sie die 20-15 in der benachbarten Zelle rechts (B21) und erhöhen Sie die letzte Zahl um 1, sodass sie 20-16 ergibt.
Das Gleiche passiert mit allen Zellen: B17, F17 und J17.
Nach dem Schreiben werden alle Inhalte in den Zellen B17/C17/D17 gelöscht. In meiner Excel-Tabelle gibt es zwei Beispiele, bei denen dasselbe passieren muss.
Antwort1
Das Problem mit Ihrem Code liegt darin SearchRange(FoundPos)
. Dies funktioniert in dieser Anwendung nur, wenn der SearchRange
Bereich bei Zeile 1 beginnt.
Wenn Sie den Bereich auf ändern A21:A32
, wird Ihre FindPos-Variable 21
für den ersten Fall sein.
Dies führt dazu, dass SearchRange(FoundPos)
die 21. Zeile Ihres Bereichs zurückgegeben wird, nämlich A41
.
Es gibt viele Möglichkeiten, dies zu beheben. Um jedoch nur minimale Änderungen am Code vorzunehmen, können Sie versuchen, SearchRange(FoundPos)
durch zu ersetzen ActiveSheet.Cells(FoundPos, SearchRange.Column)
.