Ändern Sie ein Makro, das nur funktioniert, wenn der Bereich mit einer A1- oder T1-Zelle usw. beginnt

689
KAREN KENDALL

Ich habe ein Makro, das funktioniert, aber ich möchte den Zellbereich ändern

Set SearchRange = Range("E1:E12") to  Set SearchRange = Range("A21:A32") 

Ich habe die Änderung im Code vorgenommen, funktioniert jedoch nicht, wenn ich ihn ausführe, und bin mir nicht sicher, was das Problem ist. Ich habe eine Erklärung unter dem Code.

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, referenziert es die darunter liegende Zelle und verwendet diese Zahl, um die Zellen A21: A32 nach einer Übereinstimmung zu durchsuchen und die Kopie und die Einfügung in die benachbarte Zelle rechts davon zu platzieren.

  • Beispiel: Zelle B30 hat eine 20-15, bei der unten stehenden Zelle hat B18 eine 1. 1 ist die Suchnummer im Bereich A21: A32. Sobald Sie in A21: A32 gefunden wurden, platzieren Sie die 20-15 in die benachbarte Zelle rechts (B21) und erhöhen Sie die letzte Zahl um 1, so dass sie 20-16 wird.

  • Funktioniert mit allen Zellen gleich: B17, F17 und J17.

  • Nach dem Schreiben werden alle Inhalte in Zelle B17 / C17 / D17 gelöscht. In meiner Excel-Tabelle gibt es zwei Beispiele, bei denen dasselbe geschehen muss.

Excel-Tabelle

0

1 Antwort auf die Frage

0
Christofer Weber

Das Problem mit Ihrem Code liegt darin SearchRange(FoundPos). Dies funktioniert nur in dieser Anwendung, wenn der SearchRangeBereich in Zeile 1 beginnt.

Wenn Sie den Bereich in ändern A21:A32, gilt Ihre FindPos-Variable 21für den ersten Fall.
Dies führt dazu SearchRange(FoundPos), dass die 21. Reihe Ihres Bereichs zurückgegeben wird, nämlich A41.

Viele Möglichkeiten, dies zu beheben, aber nur minimale Änderungen im Code zu machen, könnten Sie versuchen, zu ersetzen SearchRange(FoundPos)mit ActiveSheet.Cells(FoundPos, SearchRange.Column).

Danke für den Hinweis. Ich werde es ausprobieren. KAREN KENDALL vor 5 Jahren 0
Hallo, ich habe den Code in While ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol) .Value <> "" und mit ActiveSheet.Cells.Offset (ColumnOffset: = NextCol) geändert Fehler 9 - Index außerhalb des Bereichs. Ich komme mit VBA dorthin, könnte aber auf jeden Fall Hilfe brauchen, wenn Sie Zeit haben. KAREN KENDALL vor 5 Jahren 0
Ich hoffe, Sie meinen `Mit ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol)` müssen Sie die Zelle angeben. Christofer Weber vor 5 Jahren 0
Ein blonder Moment, der das "Mit" korrigiert hat, aber jetzt lautet die Nachricht "Wend without While" KAREN KENDALL vor 5 Jahren 0
Sollte ziemlich klar sein, wo das schiefgegangen ist. Kann nicht wirklich helfen, ohne zu sehen, was Sie getan haben. Christofer Weber vor 5 Jahren 0
Ich weiß nicht, wo ich die Zelle angeben soll. KAREN KENDALL vor 5 Jahren 0
Ich sollte sagen, auf welche Zelle Sie sich beziehen? KAREN KENDALL vor 5 Jahren 0
Ich meine damit nur, dass Sie ActiveSheet.Cells.Offset (ColumnOffset: = NextCol) `nicht sagen können, da wir sagen müssen, welche Zellen, in diesem Fall` Cells (FoundPos, SearchRange.Column) ` Christofer Weber vor 5 Jahren 0
Also fügte ich den Code hinzu: Mit ActiveSheet.Cells (FoundPos, SearchRange.Column) .Offset (ColumnOffset: = NextCol) .Cells (FoundPos, SearchRange.Column) Ich versuche zu verstehen, weshalb es heißt "Wend ohne While" " KAREN KENDALL vor 5 Jahren 0
Sie müssen Ihre Frage mit Ihrem aktuellen Code aktualisieren, damit ich nach dem Problem suchen kann. Aber entweder haben Sie zu viele Wendungen oder wenige zu viele. Wenn Sie jedoch den Code aus der Frage nehmen und einfach `SearchRange (FoundPos)` an zwei Stellen mit `ActiveSheet.Cells (FoundPos, SearchRange.Column)` ändern, sollte dies problemlos funktionieren. Funktioniert trotzdem für mich. Christofer Weber vor 5 Jahren 0