Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zelleintäge D1 bis DT 1 n-mal ab A4

Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 10:38:31
Manfred
Hallo Zusammen,
ich konnte mit Eurer Hilfe mit VBA schon kleinere Probleme lösen, jetzt komme ich nicht weiter.
Ich habe schon im Archiv gesucht, versucht abzuleiten und kriege es einfach nicht hin.
Tabellenblatt "STEP 3 PreparationforUpload"
Ich habe in den Zellen D1 bis DT1 Werte stehen.
Diese sollen n-mal z.B. 94 mal (variabler Wert in Zelle C1) ab Zelle A4 untereinander kopiert werden.
Wenn der Wert aus Zelle D1 94 mal kopiert wurde (Eintrag Zelle A4 bis A97)
soll automatisch der Wert aus Zelle E1 94 mal kopiert werden (Eintrag Zelle A98 bis A191) und so weiter bis zur letzten Zelle DT1.
Wenn möglich soll automatisch erkannt werden wenn nach Zelle DT1 noch Einträge existieren....
Mein bescheidener VBA Code (funktioniert aber ;-) ) sieht so aus, jedoch wird dieser ellenlang werden und muss ggf. manuell angepasst werden

Sub ProduktEinfügen()
'Definition Variable
Dim rngSource As Excel.Range
Dim rngTarget As Excel.Range
Dim n As Long
Dim last As Integer
'kopiert Zelleintrag D1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("D1")
Set rngTarget = Range("A4").Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("E1")
'kopiert Zelleintrag ab E1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("E1")
Set rngTarget = Cells(last, 1).Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("F1")
'kopiert Zelleintrag ab F1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("F1")
Set rngTarget = Cells(last, 1).Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("G1")
'kopiert Zelleintrag ab G1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("G1")
Set rngTarget = Cells(last, 1).Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("H1")
'kopiert Zelleintrag ab H1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("H1")
Set rngTarget = Cells(last, 1).Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("I1")
'kopiert Zelleintrag ab I1 94 mal untereinander
n = Range("C1").Value
Set rngSource = Range("I1")
Set rngTarget = Cells(last, 1).Resize(rngSource.Rows.count * n)
Call rngSource.Copy(Destination:=rngTarget)
'springt zur nächsten freien Zelle in Spalte A
last = Cells(Rows.count, 1).End(xlUp).Row + 1
Cells(last, 1).Value = Range("J1")
End Sub
Wenn Ihr mir hier helfen würdet, wäre ich Euch sehr dankbar..
Viele Grüße
Manfred

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 11:17:51
GerdL
Moin Manfred!

Sub ProduktEinfügen()
'Definition derVariablen
Dim rngSource As Excel.Range
Dim rngTarget As Excel.Range
Dim n As Long
Dim first As Long
Dim X As Long
n = CLng(Range("C1").Value)
If n  Columns("DT1").Column Then
MsgBox "Rechts von DT1 steht noch etwas"
End If
Set rngSource = Nothing: Set rngTarget = Nothing 'Objektvariablen zurücksetzen
End Sub
Gruß Gerd
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 11:45:05
Manfred
Hallo GerdL,
Danke für Deine Lösung.
Ich habe von Rudi Maintaire eine Lösung bekommen, die genau mein Problem löst.
Nochmals vielen Dank
Beste Grüße
Manfred
Anzeige
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 11:25:16
Rudi
Hallo,
teste mal

Sub aaaa()
Dim r As Range
Dim iCount As Integer, lROW As Long, i As Integer
Dim vntOut()
iCount = Range("C1")
ReDim vntOut(1 To iCount, 1 To 1)
lROW = 4
For Each r In Range(Cells(1, 4), Cells(1, Columns.Count).End(xlToLeft))
For i = 1 To iCount
vntOut(i, 1) = r.Value
Next
Cells(lROW, 1).Resize(iCount) = vntOut
lROW = lROW + iCount
Next
End Sub
Gruß
Rudi
kürzer
01.06.2022 11:28:51
Rudi

Sub aaaa()
Dim r As Range
Dim iCount As Integer, lROW As Long
iCount = Range("C1")
lROW = 4
For Each r In Range(Cells(1, 4), Cells(1, Columns.Count).End(xlToLeft))
Cells(lROW, 1).Resize(iCount) = r.Value
lROW = lROW + iCount
Next
End Sub
Gruß
Rudi
Anzeige
AW: kürzer
01.06.2022 11:43:16
Manfred
Hallo Rudi,
Danke recht herzlich für diese Lösung.
Genau das habe ich gesucht.
Beste Grüße
Manfred
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 11:33:22
Oberschlumpf
Hi Manfred,
ich war zu langsam, du hast vielleicht schon eine Lösung :-)
Wenn du noch Lust hast, könntest du bitte diese Fragen beantworten?
Zitat: "Ich habe in den Zellen D1 bis DT1 Werte stehen."
Frage: Stimmt das wirklich? Bis Spalte DT? Oder ist das n Tippfehler, und du meinst eigtl nur bis Spalte T?
Anzahl abzuarbeitender Spalten von D bis DT = 120 Spalten
Anzahl abzuarbeitender Spalten von D bis T = 16 Spalten
Zitat: "Diese sollen n-mal z.B. 94 mal (variabler Wert in Zelle C1) ab Zelle A4 untereinander kopiert werden."
Frage: Echt? 94x immer wieder der selbe Wert untereinander?
Bei 120 Spalten = 94 * 120 = 11280 Zeilen untereinander !
Bei 16 Spalten = 94 * 16 = 1504 Zeilen untereinander
Ciao
Thorsten
Anzeige
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 11:42:22
Manfred
Hallo Thorsten,
danke für die Info.
Habe bereits die Lösung erhalten.
Danke Dir
Manfred
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 13:00:45
Daniel
Hi
das ganze kann man auch über eine Formel abbilden, die man ab A4 in die darunter liegenden Zellen einträgt.
man muss nur berechnen, wie weit.
die Formel wäre:

=INDEX($1:$1;1;4+QUOTIENT(ZEILE()-4;$C$1))
als Makro, dass die Formel einträgt (die Werte in Zeile1 müssen lückenlos stehen, anonsten muss man eine andere Berechnungsmethode verwenden)

With Range("A4").Resize(WorksheetFunction.CountA(Range("D1:XFD1")) * Range("C1"), 1)
.FormulaR1C1 = "=INDEX(R1,1,4+QUOTIENT(ROW()-4,R1C3))"
.Formula = .Value
End With
Gruß Daniel
Anzeige
AW: Zelleintäge D1 bis DT 1 n-mal ab A4
01.06.2022 13:05:04
Manfred
Hi Daniel,
Danke für die Antwort und Info.
Das ist sehr interessant.
Ich bin begeistert, wie schnell und effizient hier geholfen wird.
Beste Grüße
Manfred

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige