AutoFill bis zur nächsten Zeile nicht leer

0

Ich habe einen vorformatierten Tabellenkalkulationsbericht mit Zellen, die wie folgt formatiert sind:

A           B         C        D
                               Week1 Week2
CUSTOMER A  PRODUCT A MEASURE A
                      MEASURE B
                      MEASURE C
CUSTOMER B  PRODUCT B MEASURE A
                      MEASURE B
                      MEASURE C

Der Bericht kann Tausende von Zeilen enthalten. Ich muss die Zellen in Spalte A und B trennen, was zu 3 Zellenblöcken führt, wobei die Zeichenfolge in der ersten Zeile des Blocks enthalten ist. A2 in diesem Fall.

Ich muss die Zellen in den Spalten A und B automatisch ausfüllen, um die folgende Situation zu erreichen:

CUSTOMER A PRODUCT A MEASURE A
CUSTOMER A PRODUCT A MEASURE B
CUSTOMER A PRODUCT A MEASURE C
CUSTOMER B PRODUCT B MEASURE A
CUSTOMER B PRODUCT B MEASURE B
CUSTOMER B PRODUCT B MEASURE C

Werte sollten 2 Zeilen oder bis zu einer Zelle mit einem Wert ungleich dem automatisch ausgefüllten Wert automatisch ausgefüllt werden. Dann sollte dieser Wert bis zu den nächsten 2 Zeilen automatisch ausgefüllt und auf den Wert in der dritten Zelle usw. umgeschaltet werden.

Dies sollte so lange geschehen, bis die letzte Zeile 1 Werte enthält (die letzte Zeile enthält Datum und Uhrzeit).

Ich möchte dies durch eine VBA-Schleife tun. Spalten A, B und C sind immer Zeichenfolgen und Werte ab Spalte D sind Zahlen.

SpaceRock
quelle
Ist es nicht ratsam, die Excel-Version in der Frage anzugeben, da die Funktionen zwischen den Versionen unterschiedlich sind?
SpaceRock

Antworten:

0

Hoffentlich ist das was du brauchst. Ich habe Kommentare über jede wichtige Zeile eingefügt, damit Sie nachverfolgen können, was gerade passiert, und gegebenenfalls Anpassungen vornehmen können.

Dies setzt voraus, dass Ihre Daten in Spalte C repräsentativ für die Zeilen sind, an denen Sie arbeiten müssen. Sie sagten, dass es bis zur letzten Zeile fortgesetzt werden soll - 1, da die letzte Zeile Datum + Uhrzeit enthält ... Nun, solange es nicht die Spalte C ist, die Datum + Uhrzeit enthält, ist dies in Ordnung:

Dim myData As Range

'Set a range by figuring out the length of your data based on column C data:
Set myData = Range("C2", Range("C2").End(xlDown))

'create two blank variables that we'll use
'to store data later:
colAdata = ""
colBdata = ""

'Loop through each row in the 'myData' range:
For Each cell In myData

    'First, unmerge cells that are merged in columns A&B:
    If cell(1, -1).MergeCells = True Then cell(1, -1).UnMerge
    If cell(1, 0).MergeCells = True Then cell(1, 0).UnMerge

    'Check if column A has data, and if so, grab its value and
    'column B's value for use in the next iteration:
    If cell(1, -1).Value <> "" Then
        colAdata = cell(1, -1).Value
        colBdata = cell(1, 0).Value
    Else 'it's blank so enter the data from the row above:
        cell(1, -1).Value = colAdata
        cell(1, 0).Value = colBdata
    End If

Next

Hoffe das hilft, lass mich wissen wie es geht.

David
quelle
Vielen Dank. Dieses Sub funktioniert ganz gut. Da der Bericht in Bezug auf Farben und Ränder stark vorformatiert ist, benötige ich folgende Hilfe: Beim automatischen Ausfüllen wird die Formatierung der Quellzelle beibehalten, in der der auszufüllende Wert erfasst wird. Ansonsten tolle Schleife.
SpaceRock
Schön, dass es funktioniert hat. Lassen Sie mich bezüglich der Formatierung sicherstellen, dass ich es verstehe. Die zusammengeführten Zellen (z. B. Zelle A2) sind farbig und randseitig formatiert, und diese Formatierung muss beibehalten werden, damit sie in A2 erst nach dem Aufheben des Zusammenführens vorhanden ist. Oder müssen wir in A2 beibehalten UND diese Formatierung auch in die nachfolgenden Zeilen A3, A4 kopieren?
David
Letzteres sollte stattfinden, die Formatierung muss für nachfolgende Zeilen erhalten bleiben.
SpaceRock