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

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

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.

Excel-Tabelle

Antwort1

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

Wenn Sie den Bereich auf ändern A21:A32, wird Ihre FindPos-Variable 21fü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).

verwandte Informationen