Microsoft Excel

Herbers Excel/VBA-Archiv

Tabellenzeilen automatisch einfüg. + Wertezuordnun

Betrifft: Tabellenzeilen automatisch einfüg. + Wertezuordnun von: Joerschi
Geschrieben am: 17.10.2014 23:03:04

Hallo liebes Forum,

ich suche eine Lösung für folgendes Problem (bisschen krumme Skizze + Beispieldatei unten):

Ausgangssituation:
In einer Tabelle 1 sind (in Musterdatei 510) Zeilen mit verschiedenen Kombinationen vorgegeben (für Positionen 1 bis 9).
Außerdem gibt es nebenstehend eine Tabelle mit (in Musterdatei 81) verschiedenen "alternativen" Kombinationen für die Positionen 10-13.

Was soll passieren?
Es soll zu jeder der Kombinationen aus Tabelle 1 jede der Alternativen aus Tabelle 2 hintenan auf den Positionen 10-13 ergänzt werden (also in Beispieltabelle 510 Reihen aus Tab.1 x 81 Alternativen aus Tab. 2 ergibt 41310 "neue" Gesamtkombinationen, also insgesamt Zeilen.
Dazu sollen (per Formel?)
a) unter jede der Kombis aus Ausgangstabelle 1 je 80 Zeilen eingefügt werden und
b) die Einzelkombination in die 80 Zeilen "runterkopiert" und
c) hinter jeder der runterkopierten Kombinationen eine der Alternativen (von 1-81) ergänzt werden
(Achtung: hinter jeder ersten Kombi könnte direkt die Alternative 1 hintenan kopiert werden, daher sollen auch nur 80 statt 81 Zeilen eingefügt werden).

Händisch erscheint mir das zu aufwändig :-(
Hätte jemand eine Idee für einen Ansatz?

Viele Grüße
Joerschi

Skizze:

Beispieldatei: https://www.herber.de/bbs/user/93221.xlsx

  

Betrifft: jede Zeile x mal einfügen von: Christian
Geschrieben am: 18.10.2014 12:36:01

hallo Joerschi,
so zB:

Option Explicit

Sub TestIt()
    Dim i As Long, j As Long
    Dim k As Long, n As Long
    Dim lngLR As Long
    Dim vntRngAlt
    Dim vntLine
    Dim vntRes(41309, 12)

    With Sheets("Herber_Frage")
        lngLR = .Cells(.Rows.Count, 2).End(xlUp).Row
        vntRngAlt = .Cells(3, 17).Resize(81, 4).Value
        For i = 3 To lngLR
            vntLine = .Cells(i, 2).Resize(, 9)
            For n = 1 To 81
                For j = 0 To 8
                    vntRes(k, j) = vntLine(1, j + 1)
                Next
                For j = 9 To 12
                    vntRes(k, j) = vntRngAlt(n, j - 8)
                Next
                k = k + 1
            Next
        Next
        .Cells(3, 2).Resize(41310, 13) = vntRes
    End With
End Sub
Gruß Christian


  

Betrifft: AW: jede Zeile x mal einfügen von: Joerschi
Geschrieben am: 19.10.2014 09:09:46

Hi Christian,

grad getestet - funktioniert super.
Herzlichen Dank.
Werd versuchen mich mal in die Proggi einzuarbeiten. Da kann ich auch gleich ein wenig mit Deinen Zeilen rumspielen, z. B. werde ich damit anfangen, den kopierten Reihen die ursprüngliche Nummer (1 bis 510) zuzuweisen oder sowas.

Nochmals Danke und LG
Joerschi


  

Betrifft: AW: Tabellenzeilen automatisch einfüg. + Wertezuordnun von: Daniel
Geschrieben am: 18.10.2014 14:10:17

Hi
um Zellbereiche zu vervielfältigen, kann man auch Copy-Paste verwenden, wenn man den Einfügebereich um den entsprechenden Faktor vergrössert.

Sub test1()
Dim AnzZeilen1 As Long
Dim AnzZeilen2 As Long

AnzZeilen1 = Cells(3, 1).End(xlDown).Row - 2
AnzZeilen2 = Cells(3, 16).End(xlDown).Row - 2
Cells(3, 1).Resize(AnzZeilen1, 10).Copy
With Cells(3, 1).Resize(AnzZeilen1 * AnzZeilen2, 10)
    .PasteSpecial xlPasteAll
    .Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
End With
Cells(3, 17).Resize(AnzZeilen2, 4).Copy
Cells(3, 11).Resize(AnzZeilen2 * AnzZeilen1, 4).PasteSpecial xlPasteAll
Application.CutCopyMode = False
End Sub
mir mir einen Sortieren zwischen drin passt dann auch die Wertezuordung.

Gruß Daniel


  

Betrifft: AW: Tabellenzeilen automatisch einfüg. + Wertezuordnun von: Joerschi
Geschrieben am: 19.10.2014 09:11:28

Moin Daniel,

Dank Dir für den ergänzenden Hinweis bzw. die Alternative.
Wie schon bei Christian geschrieben: werd mich da mal reinarbeiten als VBA-Neuling.

Schönen Restsonntag und LG
Joerschi


 

Beiträge aus den Excel-Beispielen zum Thema "Tabellenzeilen automatisch einfüg. + Wertezuordnun"