Clever-Excel-Forum

Normale Version: Gleicher VBA-Code in verschiedenen Spalten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen zusammen,

ich habe ein vermutlich simples Problem, aber ich komme nicht weiter. Und zwar habe ich unten stehenden Code geschrieben, der mir Bezirke zu gewissen Postleitzahlen raussucht. Dies muss ich allerdings für 25 Stops machen (Spalten). Dabei liegen die Spalten immer im gleichen Abstand nebeneinander, sprich in diesem Text: 14 --> 21 (+7), 15 --> 22 (+7) und Spalte N sollte im nächsten Durchgang U sein (+7). Und dieser ganze Prozess dann insgesamt 25 mal. (für den einen Wert also 14,21,28,35,42,49 etc.). Könnte mir da jemand weiterhelfen? :)

Beste Grüsse

nionox

Code:
Sub Bezirkszuweisung1()

Dim Berechnung As Worksheet, Ortschaftenverzeichnis As Worksheet
Dim Berechnunglastrow As Long, Ortschaftenverzeichnislastrow As Long, x As Long
Dim OrtschaftenverzeichnisRng As Range, suchtext As String, findrng As Range
Dim celladdress As String

Set Berechnung = ThisWorkbook.Worksheets("Berechnung")
Set Ortschaftenverzeichnis = ThisWorkbook.Worksheets("Ortschaftenverz.-Rép. Localités")

Berechnunglastrow = Berechnung.Range("B" & Rows.Count).End(xlUp).Row
Ortschaftenverzeichnislastrow = Ortschaftenverzeichnis.Range("H" & Rows.Count).End(xlUp).Row

Set OrtschaftenverzeichnisRng = Ortschaftenverzeichnis.Range("H2:H" & Ortschaftenverzeichnislastrow)


For x = 2 To Berechnunglastrow
    If Cells(x, 14) <> "" Then
        suchtext = Worksheets("Berechnung").Range("N" & x).Value
        Set findrng = OrtschaftenverzeichnisRng.Find(What:=suchtext, LookIn:=xlValues)
            If findrng Is Nothing Then
                Worksheets("Berechnung").Cells(x, 15) = "N/A"
            Else
                Worksheets("Berechnung").Cells(x, 15) = Worksheets("Ortschaftenverz.-Rép. Localités").Cells(findrng.Row, 12)
            End If
    End If

    If Cells(x, 14) = "" Then
        Worksheets("Berechnung").Cells(x, 15) = "N/A"
    End If

Next x

End Sub

hallo,

baue eine zweite Schleife drumherum mit der Schrittweite 7

For y = 7 to 77 step 7
For x = ...
Cells(...,7+y)...

Kannst natürlich auch mit 0 anfangen und dann Cells(...,14+y) nehmen
Lade mal eine Beispieldatei hoch.
Verzichte auf diakritische Zeichen.
Verwende ein Dictionary.
Okay, ich hab das jetzt mit y gemacht und in die andere Zelle anstatt "z" y+1 reingeschrieben. Soweit so gut, er packt mir das in die richtigen Spalten, allerdings greift er immer auf Spalte "N" zurück in der suchtext-Zeile. Kann ich das etwa mit Cells... umschreiben? Da könnte ich dann nämlich in Bezug zum Wert y die Spalte ausgeben. Wenn er zum nächsten Y springt, soll nicht auf Spalte N, sondern Spalte W (+10) und danach dann im +8 Rhythmus zurückgegriffen werden

Code:
For y = 16 To 191 Step 7

        For x = 2 To Berechnunglastrow
            If Cells(x, y) <> "" Then
                suchtext = Worksheets("Berechnung").Range("N" & x).Value
                Set findrng = OrtschaftenverzeichnisRng.Find(What:=suchtext, LookIn:=xlValues)
                    If findrng Is Nothing Then
                        Worksheets("Berechnung").Cells(x, y + 1) = "N/A"
                    Else
                        Worksheets("Berechnung").Cells(x, y + 1) = Worksheets("Ortschaftenverz.-Rép. Localités").Cells(findrng.Row, 12)
                    End If
            End If
       
            If Cells(x, y) = "" Then
                Worksheets("Berechnung").Cells(x, y + 1) = "N/A"
            End If
       
        Next x

Next y
Hallöchen,

Zitat:allerdings greift er immer auf Spalte "N" zurück in der suchtext-Zeile. Kann ich das etwa mit Cells... umschreiben?

Ein Grund, mit Cells statt mit Range zu arbeiten, ist die einfachere Nutzung von Variablen.
Range("N" & x) wäre mit fester Spalte Cells(x, 14)
Hi :)

Hat jetzt perfekt geklappt, dankeschön!
Geklappt hat es vielleicht. Pefekt ist es nicht.