Werte in Zeile harmonisieren

Preistabelle mit 9 Mengenspalten. In jeder Zeile sind 4 Mengenspalten mit Preisen gefüllt.
Aber es sind. z.B. einmal die Spalten 4-7 und dann wieder die Spalten 1-4 usw.
Aufgabe ist es, dass in jeder Zeile die Preise 1-3 mit dem Preis 4 überschrieben werden müssen. Achtung: Manchmal gibt es nur einen Preis, steht immer in IVK_1. Hier die Ausgangssituation und das gewünscht Ergebnis:


Es sind mehr als 3000 Zeilen in der Tabelle. Hab ich bisher mit Filter und allen möglichen Tricks erledigt. Ist aber fehlerträchtig.
Hab Ihr Genies eine Lösung dafür?
Vielen Dank schon mal!
Karl

Grüezi Karl

Habt Ihr Genies eine Lösung dafür?

Nix Genie, nur genügend Zeit am 1. Mai-Feiertag! :wink:

Ich habe gemäss Deinen Angaben ein Makro gebastelt.

Das Makro wertet nur Zeilen aus, die vier Preise enthalten. Bei einem einzigen Preis ist das ja klar. Falls zwei, drei, fünf oder mehr Preise in einer Zelle vorkommen, wird nichts gemacht.

Das Ganze beginnt ab Zeile 3, so wie Du es in Deiner Beispieltabelle zeigst. Falls die Preise bereits in Zeile 2 beginnen, müsstest Du das Makro ganz am Anfang anpassen:

For zl = 3 To rlast   müsste dann heissen:    For zl = 2 To rlast   

Ich hoffe, das klappt bei Dir wie bei mir! Alles Gute
Niclaus

Uebrigens: Vielen Dank für Dein Kompliment zu meinem Beitrag zu „Doppelte Werte eliminieren“.

Sub ZellenHarmonisieren()
rlast = Range("A1").SpecialCells(xlCellTypeLastCell).Row
' zuletzt benutzte Zeile der ganzen Tabelle

For zl = 3 To rlast
' Zeile 1 und 2 sind Spaltenbeschriftungen
    For sp = 1 To 6
        nn = WorksheetFunction.Count(Range(Cells(zl, 1), Cells(zl, 9)))
            If nn <> 4 Then Exit For
        If Not IsEmpty(Cells(zl, sp)) Then
            Range(Cells(zl, sp), Cells(zl, sp + 2)) = Cells(zl, sp + 3)
            Exit For
        End If
    Next sp
Next zl

End Sub

Hallo Niclaus,
die Artikeldatenbank hat meist über 2000 Zeilen. Sie enthält noch eine Menge Spalten mit vielen anderen Artikelinformationen. Meist muss ich da noch viel mehr bearbeiten. Zum Beispiel Infos aus versch. Spalten in eine Zusammenführen. Das macht aber keine Probleme.
Meist erledige ich solche Manipulationen in einem sep. Tab der Excel. Ich kopiere dann die Ausgangsinformationen in den neuen Tab, allerdings ohne Kopfzeilen. Die Werte beginnen also immer in A1.
Somit würden in der Zeile 1 schon die ersten Preise stehen. Ob die in der ersten Zeile von Spalte 1 - 4 oder von 3-6 gehen, ist jedes Jahr anders, kommt auf den ersten Artikel an. Die Zeilenreihenfolge darf ich nicht verändern, weil sonst kann das Ergebnis nicht in die Haupttabelle zurückkopiert werden.
Wenn ich Dich richtig verstanden habe, muss ich dann eben jedes Jahr diese erste Zeile anpassen. Die Info, dass Zeile 1 und 2 Spaltenüberschriften sind, kann ich wohl dann rauslöschen?
Schönen Tag der Arbeit noch. Ich feiere auch und arbeite!
Karl

Hallo Karl

Wenn Du keine Spaltenüberschriften hast und die Preise immer in Zeile 1 beginnen, kannst Du schreiben - und für immer so lassen:

Das musst Du dann nicht jedes Jahr ändern. - Ob die Preise in der ersten Zeile von Spalte 1 - 4 oder von 3-6 gehen, spielt keine Rolle.

Wichtig ist: In den Spalten A:I sollten nur Preise aufgeführt sein. Und die „Vierer-Preise“ müssen in einer Zeile immer in 4 Zellen unmittelbar nebeneinander stehen, so wie Du es in Deinem Beispiel aufgeführt hast. Es geht also zum Beispiel nicht:
C1 = 55 / D1 = 66 / F1 = 7 / G1 = 88
E1 darf nicht leer sein! Das gäbe ein Chaos.

Grüsse Niclaus

Hallo Niclaus,
bei mir klappt es nicht. Es werden alle Zellen bis A gefüllt.
Also wenn in Spalten 3-6 Werte stehen, dann wird der Wert aus Spalte 6 bis zur Spalte 1 (A) gefüllt. Der Wert aus Spalte 6 sollte aber die Werte in 3-5 überschreiben.
Ich habe das in zwei Versionen probiert. Einmal so, dass es 2 Kopfzeilen gibt, Daten also in Zeile 3 beginnen, und einmal mit der Änderung (Daten beginnen in Zeile 1)
Was kann ich da falsch machen?
Stelle über ALT+F11, Einfügen, Modul das Skript ein und rufe es dann in Excel über Ansicht/Makro auf.
Schönen Tag noch wünscht Karl

Seltsam!

Meine Mustertabelle schaut so aus:

vorher

Stelle über ALT+F11, Einfügen, Modul das Skript ein

So mache ich es auch. Ich kopiere das obige Makro und füge es mit CTRL-V ein. - Ich starte es und dann schaut meine Tabelle so aus:

nachher

Auf jeder Zeile sind nun die Preise durch den jeweils vierten auf dieser Zeile ersetzt worden. - So habe ich Dich verstanden: Das sollte das Ergebnis sein.

Ich weiss nicht, warum Du ein anderes Resultat erhältst.
Niclaus

1 Like

Eine Frage noch:
Enthalten in Deiner Tabelle die leeren Zellen irgendwelche Formeln?
Das könnte zu Problemen führen.
Niclaus

1 Like

Wieder tausend Dank!
Mit Deinen Fehlerhinweisen hat es nun doch funktioniert.
Ich wünsche alles Liebe und Gute!
Karl