it-swarm.com.de

Kopieren Sie jede n-te Zeile von einem Blatt auf ein anderes

Ich habe eine Excel-Tabelle mit 1 Spalte, 700 Zeilen. Ich kümmere mich um jede siebte Zeile. Ich möchte nicht hineingehen und die 6 Zeilen zwischen jeder Zeile, die mir wichtig ist, löschen müssen. Meine Lösung bestand also darin, ein weiteres Blatt zu erstellen und einen Verweis auf jede gewünschte Zelle anzugeben.

=sheet1!a1
=sheet1!a8
=sheet1!a15

Aber ich möchte nicht jede dieser Formeln eintippen ... `100 Mal. Ich dachte, wenn ich die drei auswähle und das Kästchen herumziehe, würde es verstehen, was ich versuche, aber kein Glück.

Irgendwelche Ideen, wie man das elegant/effizient macht?

54
Adrian Wible

Fügen Sie in A1 Ihres neuen Blattes Folgendes ein:

=OFFSET(Sheet1!$A$1,(ROW()-1)*7,0)

... und abschreiben. Wenn Sie an einer anderen Stelle als in Zeile 1 beginnen, ändern Sie ROW () in ROW (A1) oder in eine andere Zelle in Zeile 1 und kopieren Sie sie erneut nach unten.

Wenn Sie die n-te Zeile aber mehrere Spalten kopieren möchten, verwenden Sie die Formel:

=OFFSET(Sheet1!A$1,(ROW()-1)*7,0)

Dies kann auch direkt kopiert werden.

120
Mike Woodhouse

Wenn ich mit dem Extrahieren jeder 7. Zeile konfrontiert wäre, würde ich eine Spalte vor der Spalte "A" "einfügen". Ich würde dann (unter der Annahme, dass es eine Kopfzeile in Zeile 1 gibt) die Zahlen 1,2,3,4,5,6,7 in die Zeilen 2,3,4,5,6,7,8 eingeben heben Sie die 1,2,3,4,5,6,7 hervor und fügen Sie diesen Block an das Ende des Blatts ein (Wert 700 Zeilen). Das Ergebnis ist 1,23,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7 ……. Führen Sie nun eine Datensortierung aufsteigend nach Spalte „A“ durch. Nach der Sortierung werden alle Einsen die ersten in der Serie sein, alle Siebenen werden das siebte Element sein.

11
Joe

Meiner Meinung nach sind die Antworten auf diese Frage zu spezifisch. Hier ist ein Versuch einer allgemeineren Antwort mit zwei verschiedenen Ansätzen und einem vollständigen Beispiel.

Der OFFSET Ansatz

OFFSET akzeptiert 3 obligatorische Argumente. Die erste ist eine gegebene Zelle, von der wir einen Offset erstellen möchten. Die nächsten beiden Werte geben die Anzahl der Zeilen und Spalten an, die versetzt werden sollen (nach unten und rechts). OFFNET gibt den Inhalt der Zelle zurück, die sich daraus ergibt. Zum Beispiel gibt OFFSET(A1, 1, 2) den Inhalt der Zelle zurück C2, weil A1 die Zelle (1,1) und wenn wir (1,2) hinzufügen, erhalten wir (2,3), was der Zelle C2 entspricht.

Damit dies jede n-te Zeile einer anderen Spalte zurückgibt, können wir die Funktion ROW verwenden. Wenn diese Funktion kein Argument erhält, wird die Zeilennummer der aktuellen Zelle zurückgegeben. Wir können also OFFSET und ROW kombinieren, um eine Funktion zu erhalten, die jede n-te Zelle zurückgibt, indem wir dem von ROW zurückgegebenen Wert einen Multiplikator hinzufügen. Zum Beispiel OFFSET(A$1,ROW()*3,0). Beachten Sie die Verwendung von $1 in der Zielzelle. Wenn dies nicht verwendet wird, wird der Versatz von verschiedenen Zellen versetzt, wodurch dem Multiplikator tatsächlich 1 hinzugefügt wird.

Der ADDRESS + INDIRECT Ansatz

ADDRESS nimmt zwei Integer-Eingaben entgegen und gibt die Adresse/den Namen der Zelle als String zurück. Beispielsweise gibt ADDRESS(1,1)"$A$1" zurück. INDIRECT nimmt die Adresse einer Zelle und gibt den Inhalt zurück. Beispielsweise gibt INDIRECT("A1") den Inhalt der Zelle A1 zurück (es werden auch Eingaben mit $ akzeptiert). Wenn wir ROW in ADDRESS mit einem Multiplikator verwenden, können wir die Adresse jeder n-ten Zelle abrufen. Zum Beispiel gibt ADDRESS(ROW(), 1) in Zeile 1 "$A$1" zurück, in Zeile 2 "$A$2" und so weiter. Wenn wir dies also in INDIRECT einfügen, können wir den Inhalt jeder n-ten Zelle abrufen. Beispielsweise gibt INDIRECT(ADDRESS(1*ROW()*3,1)) den Inhalt jeder dritten Zelle in der ersten Spalte zurück, wenn Sie nach unten ziehen.

Beispiel

Betrachten Sie den folgenden Screenshot einer Tabelle. Die Überschriften (erste Zeile) enthalten den in den folgenden Zeilen verwendeten Aufruf. enter image description here Spalte A enthält unsere Beispieldaten. In diesem Fall sind es nur die positiven ganzen Zahlen (die Zählung wird außerhalb des angezeigten Bereichs fortgesetzt). Dies sind die Werte, von denen wir jedes dritte erhalten möchten, dh wir möchten 1, 4, 7, 10 usw. erhalten.

Die Spalte B enthält einen falschen Versuch, den Ansatz OFFSET zu verwenden, wobei jedoch die Verwendung von $ vergessen wurde. Wie zu sehen ist, erhalten wir tatsächlich jede vierte Zeile, während wir mit 3 multiplizieren.

Die Spalte C enthält einen falschen Versuch, den Ansatz OFFSET zu verwenden, bei dem wir daran gedacht haben, $ zu verwenden, aber vergessen haben, zu subtrahieren. Während wir also jeden 3. Wert erhalten, haben wir einige Werte (1 und 4) übersprungen.

Die Spalte D enthält eine korrekte Funktion unter Verwendung des OFFSET-Ansatzes.

Die Spalte E enthält einen falschen Versuch, den Ansatz ADDRESS + INDRECT zu verwenden, bei dem wir jedoch vergessen haben, zu subtrahieren. Daher haben wir anfangs einige Zeilen übersprungen. Das gleiche Problem wie bei Spalte C.

Die Spalte F enthält eine korrekte Funktion, die den Ansatz ADDRESS + INDRECT verwendet.

11
Deleet

fügen Sie eine neue Spalte ein und fügen Sie eine Reihe in 1,2,3,4 usw. ein. Erstellen Sie dann eine neue Spalte und verwenden Sie den Befehl = if (int (a1/7) = (a1/7), 1,0) Holen Sie sich eine 1 in jeder 7. Zeile, filtern Sie die Spalte auf der 1

4
mike

Markieren Sie die 7. Zeile. Pinsel das Format für die ersten 7 Zeilen ein paar Mal. Kopieren Sie das Format mit einem größeren Pinsel, bis Sie fertig sind. Jede 7. Zeile sollte hervorgehoben werden. Nach Farbe filtern und dann aus den markierten Zellen kopieren und in ein neues Blatt einfügen (Werte einfügen).

3
Allison

Erstellen Sie ein Makro, und verwenden Sie den folgenden Code, um die Daten zu erfassen und in einem neuen Blatt (Sheet2) abzulegen:

Dim strValue As String
Dim strCellNum As String
Dim x As String
x = 1

For i = 1 To 700 Step 7
    strCellNum = "A" & i
    strValue = Worksheets("Sheet1").Range(strCellNum).Value
    Debug.Print strValue
    Worksheets("Sheet2").Range("A" & x).Value = strValue
    x = x + 1
Next

Lassen Sie mich wissen, ob das hilft! JFV

1
JFV

Wenn Ihre Originaldaten in Spaltenform mit mehreren Spalten vorliegen und der erste Eintrag Ihrer Originaldaten in C42 vorliegt und Sie möchten, dass Ihre neuen (heruntergerechneten) Daten ebenfalls in Spaltenform vorliegen, jedoch nur in jeder siebten Zeile Außerdem muss die Zeilennummer des ersten Eintrags wie folgt abgezogen werden:

=OFFSET(C$42,(ROW(C42)-ROW(C$42))*7,0)
0