Ich hatte versucht das Problem "händich" zu lösen und das ganze als Makro aufzuzeichnen. Das Problem war aber das mir excel zum Schluss gesagt hat, dass mein Makro zu lang sei... *vor Wut zerpflück*
Kann mir jemand helfen ?
Option Explicit
Sub Verzahnen()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet
Dim lngA As Long, lngB As Long, intA As Integer, intB As Integer
Dim arrA, arrB, arrC, zz As Long, ss As Integer
Set wsA = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellmappen und -blätter
Set wsB = Workbooks("MapB.xls").Worksheets(1) ' festlegen
Set wsC = Workbooks("MapC.xls").Worksheets(1) ' Hier Zielmappe und -blatt festlegen
lngA = wsA.Cells(Rows.Count, 1).End(xlUp).Row
lngB = wsB.Cells(Rows.Count, 1).End(xlUp).Row
If lngA <> lngB Then
MsgBox "Anzahl Zeilen Mappe A: " & lngA & vbLf _
& "Anzahl Zeilen Mappe B: " & lngB, vbCritical, "Abbruch"
Exit Sub
End If
intA = wsA.Cells(1, Columns.Count).End(xlToLeft).Column
intB = wsB.Cells(1, Columns.Count).End(xlToLeft).Column
If intA <> intB Then
MsgBox "Anzahl Spalten Mappe A: " & intA & vbLf _
& "Anzahl Spalten Mappe B: " & intB, vbCritical, "Abbruch"
Exit Sub
End If
ReDim arrC(1 To 2 * lngA - 1, 1 To intA)
arrA = Range(wsA.Cells(1, 1), wsA.Cells(lngA, intA)).Value
arrB = Range(wsB.Cells(1, 1), wsB.Cells(lngA, intA))
For ss = 1 To intA
arrC(1, ss) = arrA(1, ss)
For zz = 2 To lngA
arrC(2 * zz - 2, ss) = arrA(zz, ss)
arrC(2 * zz - 1, ss) = arrB(zz, ss)
Next zz
Next ss
Range(wsC.Cells(1, 1), wsC.Cells(2 * lngA - 1, intA)) = arrC
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-LintfortOption Explicit
Sub Verzahnen2()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet
Dim lngA As Long, lngB As Long, lngZ As Long, intA As Integer, intB As Integer
Dim arrA, arrB, arrC, zz As Long, ss As Integer
Set wsA = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellmappen und -blätter
Set wsB = Workbooks("MapB.xls").Worksheets(1) ' festlegen
Set wsC = Workbooks("MapC.xls").Worksheets(1) ' Hier Zielmappe und -blatt festlegen
intA = wsA.Cells(1, Columns.Count).End(xlToLeft).Column
intB = wsB.Cells(1, Columns.Count).End(xlToLeft).Column
If intA <> intB Then
MsgBox "Anzahl Spalten Mappe A: " & intA & vbLf _
& "Anzahl Spalten Mappe B: " & intB, vbCritical, "Abbruch"
Exit Sub
End If
lngA = wsA.Cells(Rows.Count, 1).End(xlUp).Row
lngB = wsB.Cells(Rows.Count, 1).End(xlUp).Row
ReDim arrC(1 To lngA + lngB - 1, 1 To intA)
arrA = Range(wsA.Cells(1, 1), wsA.Cells(lngA, intA)).Value
arrB = Range(wsB.Cells(1, 1), wsB.Cells(lngB, intA))
For ss = 1 To intA
lngZ = 1
arrC(1, ss) = arrA(1, ss)
For zz = 2 To lngA + lngB - 1
If zz <= lngA Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrA(zz, ss)
If zz <= lngB Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrB(zz, ss)
Next zz
Next ss
Range(wsC.Cells(1, 1), wsC.Cells(lngA + lngB - 1, intA)) = arrC
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-LintfortOption Explicit
Sub Verzahnen2()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, Eing As strin
Dim lngA As Long, lngB As Long, lngZ As Long, intA As Integer, intB As Integer
Dim arrA, arrB, arrC, zz As Long, ss As Integer
Set wsA = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellmappen und -blätter
Set wsB = Workbooks("MapB.xls").Worksheets(1) ' festlegen
Set wsC = Workbooks("MapC.xls").Worksheets(1) ' Hier Zielmappe und -blatt festlegen
intA = wsA.Cells(1, Columns.Count).End(xlToLeft).Column
intB = wsB.Cells(1, Columns.Count).End(xlToLeft).Column
If intA <> intB Then
MsgBox "Anzahl Spalten Mappe A: " & intA & vbLf _
& "Anzahl Spalten Mappe B: " & intB, vbCritical, "Abbruch"
Exit Sub
End If
lngA = wsA.Cells(Rows.Count, 1).End(xlUp).Row
lngB = wsB.Cells(Rows.Count, 1).End(xlUp).Row
ReDim arrC(1 To lngA + lngB - 1, 1 To intA)
arrA = Range(wsA.Cells(1, 1), wsA.Cells(lngA, intA)).Value
arrB = Range(wsB.Cells(1, 1), wsB.Cells(lngB, intA))
For ss = 1 To intA
lngZ = 1
arrC(1, ss) = arrA(1, ss)
For zz = 2 To lngA + lngB - 1
If zz <= lngA Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrA(zz, ss)
If zz <= lngB Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrB(zz, ss)
Next zz
Next ss
Range(wsC.Cells(1, 1), wsC.Cells(lngA + lngB - 1, intA)) = arrC
Eing = InputBox("Zahl")
Range(wsC.Cells(1, 12), wsC.Cells(lngA + lngB - 1, 12)) = CInt(Eing)
Range("L1") = "SmplInjVol"
End Sub
Option Explicit
Sub Verzahnen3()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, Eing As Variant
Dim lngA As Long, lngB As Long, lngZ As Long, intA As Integer, intB As Integer
Dim arrA, arrB, arrC, zz As Long, ss As Integer
Set wsA = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellmappen und -blätter
Set wsB = Workbooks("MapB.xls").Worksheets(1) ' festlegen
Set wsC = Workbooks("MapC.xls").Worksheets(1) ' Hier Zielmappe und -blatt festlegen
intA = wsA.Cells(1, Columns.Count).End(xlToLeft).Column
intB = wsB.Cells(1, Columns.Count).End(xlToLeft).Column
If intA <> intB Then
MsgBox "Anzahl Spalten Mappe A: " & intA & vbLf _
& "Anzahl Spalten Mappe B: " & intB, vbCritical, "Abbruch"
Exit Sub
End If
lngA = wsA.Cells(Rows.Count, 1).End(xlUp).Row
lngB = wsB.Cells(Rows.Count, 1).End(xlUp).Row
ReDim arrC(1 To lngA + lngB - 1, 1 To intA)
arrA = Range(wsA.Cells(1, 1), wsA.Cells(lngA, intA)).Value
arrB = Range(wsB.Cells(1, 1), wsB.Cells(lngB, intA))
For ss = 1 To intA
lngZ = 1
arrC(1, ss) = arrA(1, ss)
For zz = 2 To lngA + lngB - 1
If zz <= lngA Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrA(zz, ss)
If zz <= lngB Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrB(zz, ss)
Next zz
Next ss
Range(wsC.Cells(1, 1), wsC.Cells(lngA + lngB - 1, intA)) = arrC
' -------------------------------------------------------------- Spezialeintrag Spalte H
Eing = False
While Eing = False
Eing = Application.InputBox("Bitte eine Zahl <> 0 eingeben", "Messwerte...", 1, , , , , 1)
Wend
Columns(8).Insert
Cells(1, 8) = "SmplInjVol"
Range(wsC.Cells(2, 8), wsC.Cells(lngA + lngB - 1, 8)) = CDbl(Eing)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-LintfortOption Explicit
Sub Verzahnen3()
Dim wsA As Worksheet, wsB As Worksheet, wsC As Worksheet, Eing As Variant
Dim lngA As Long, lngB As Long, lngZ As Long, intA As Integer, intB As Integer
Dim arrA, arrB, arrC, zz As Long, ss As Integer
Set wsA = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellmappen und -blätter
Set wsB = Workbooks("MapB.xls").Worksheets(1) ' festlegen
Set wsC = Workbooks("MapC.xls").Worksheets(1) ' Hier Zielmappe und -blatt festlegen
intA = wsA.Cells(1, Columns.Count).End(xlToLeft).Column
intB = wsB.Cells(1, Columns.Count).End(xlToLeft).Column
If intA <> intB Then
MsgBox "Anzahl Spalten Mappe A: " & intA & vbLf _
& "Anzahl Spalten Mappe B: " & intB, vbCritical, "Abbruch"
Exit Sub
End If
lngA = wsA.Cells(Rows.Count, 1).End(xlUp).Row
lngB = wsB.Cells(Rows.Count, 1).End(xlUp).Row
ReDim arrC(1 To lngA + lngB - 1, 1 To intA)
arrA = Range(wsA.Cells(1, 1), wsA.Cells(lngA, intA)).Value
arrB = Range(wsB.Cells(1, 1), wsB.Cells(lngB, intA))
For ss = 1 To intA
lngZ = 1
arrC(1, ss) = arrA(1, ss)
For zz = 2 To lngA + lngB - 1
If zz <= lngA Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrA(zz, ss)
If zz <= lngB Then lngZ = lngZ + 1: arrC(lngZ, ss) = arrB(zz, ss)
Next zz
Next ss
Range(wsC.Cells(1, 1), wsC.Cells(lngA + lngB - 1, intA)) = arrC
' -------------------------------------------------------------- Spezialeintrag Spalte H
Eing = False
While Eing = False
Eing = Application.InputBox("Bitte eine Zahl <> 0 eingeben", "Messwerte...", 1, , , , , 1)
Wend
wsC.Columns(8).Insert
wsC.Cells(1, 8) = "SmplInjVol"
Range(wsC.Cells(2, 8), wsC.Cells(lngA + lngB - 1, 8)) = CDbl(Eing)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Sub Verschachteln()
Dim wsZiel As Worksheet
Dim wsQuelle() As Worksheet
Dim AnzBatches As Long
Dim i As Long
AnzBatches = 2
ReDim wsQuelle(AnzBatches)
Set wsZiel = Workbooks("wbC.xls").Sheets(1)
Set wsQuelle(1) = Workbooks("wbA.xls").Sheets(1)
Set wsQuelle(2) = Workbooks("wbB.xls").Sheets(1)
For i = 1 To AnzBatches
With wsQuelle(i)
.Columns(1).Insert
.Cells(2, 1).Value = i
.Cells(3, 1).Value = i + AnzQuellen
End With
With wsQuelle(i).Cells(1, 1).CurrentRegion
wsQuelle(i).Range("A2:A3").AutoFill Destination:=.Resize(.Rows.Count - 1, 1).Offset(1, 0)
.Offset((i = 1) + 1, 0).Copy Destination:=wsZiel.Cells(65000, 1).End(xlUp).Offset(1, 0)
.Columns(1).EntireColumn.Delete
End With
Next
With wsZiel
.Rows(1).Delete
.Cells(1, 1).CurrentRegion.Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlYes _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
.Columns(1).Delete
'--- Spalte einfügen-----
.Columns(8).Insert
.Cells(1, 8).Value = "SmplInjVol"
Range(.Cells(2, 8), .Cells(.UsedRange.Rows.Count, 8)).Value = InputBox("Bitte Wert eingeben")
End With
End Sub
Sub VerzahnenViele()
Dim wsQ() As Worksheet, wsZ As Worksheet, Eing As Variant
Dim lngQ() As Long, intQ() As Integer, lngM As Long, intM As Integer
Dim lngZ As Long, arrT, arrQ, arrZ, ii As Integer, zz As Long, ss As Integer
Const anzQ = 5 ' Hier Anzahl Quellblätter festlegen
ReDim wsQ(1 To anzQ)
Set wsQ(1) = Workbooks("MapA.xls").Worksheets(1) ' Hier Quellblätter bestimmen
Set wsQ(2) = Workbooks("MapB.xls").Worksheets(1) '
Set wsQ(3) = Workbooks("MapC.xls").Worksheets(1) '
Set wsQ(4) = Workbooks("MapD.xls").Worksheets(1) '
Set wsQ(5) = Workbooks("MapE.xls").Worksheets(1) '
' Set wsQ(6) = Workbooks(" .xls").Worksheets(1) '
Set wsZ = Workbooks("MapZ.xls").Worksheets(1) ' Hier Zielblatt bestimmen
' -------------------------------------------------------------- Quellgrößen ermitteln
ReDim lngQ(1 To anzQ), intQ(1 To anzQ)
For ii = 1 To anzQ
intQ(ii) = wsQ(ii).Cells(1, Columns.Count).End(xlToLeft).Column
intM = IIf(intQ(ii) < intM, intM, intQ(ii))
lngQ(ii) = wsQ(ii).Cells(Rows.Count, 1).End(xlUp).Row
lngM = IIf(lngQ(ii) < lngM, lngM, lngQ(ii))
lngZ = lngZ + lngQ(ii) - 1
Next ii
' --------------------------------------------------------------- Quelldaten einsammeln
ReDim arrQ(1 To lngM, 1 To intM, 1 To anzQ)
For ii = 1 To anzQ
arrT = Range(wsQ(ii).Cells(1, 1), wsQ(ii).Cells(lngQ(ii), intQ(ii))).Value
For ss = 1 To intQ(ii)
If ii = 1 Then arrQ(1, ss, 1) = arrT(1, ss)
For zz = 2 To lngQ(ii): arrQ(zz, ss, ii) = arrT(zz, ss): Next zz
Next ss
Next ii
Erase arrT ' aufräumen
' --------------------------------------------------------------- Zielblatt füllen
ReDim arrZ(1 To lngZ + 1, 1 To intM)
For ss = 1 To intM
lngZ = 1: arrZ(1, ss) = arrQ(1, ss, 1)
For zz = 2 To lngM
For ii = 1 To anzQ
If zz <= lngQ(ii) And ss <= intQ(ii) Then _
lngZ = lngZ + 1: arrZ(lngZ, ss) = arrQ(zz, ss, ii)
Next ii
Next zz
Next ss
wsZ.Cells.Clear
Range(wsZ.Cells(1, 1), wsZ.Cells(lngZ, intM)) = arrZ
Erase lngQ, intQ, arrQ, arrZ ' aufräumen
' --------------------------------------------------------------- Spezialeintrag Spalte H
' Eing = 789 ' nur für Test
Eing = False
While Eing = False
Eing = Application.InputBox("Bitte eine Zahl <> 0 eingeben", "Messwerte...", 1, , , , , 1)
Wend
wsZ.Columns(8).Insert
wsZ.Cells(1, 8) = "SmplInjVol"
Range(wsZ.Cells(2, 8), wsZ.Cells(lngZ, 8)) = CDbl(Eing)
End Sub
Grüße von Erich aus Kamp-Lintfort
Sub Verzahnt_Kopieren()
Dim i As Long
Dim Zeile As Long
For i = 1 To 192
Zeile = Zeile + 1
Sheets("TabelleA").Rows(i).Copy Destination:=Sheets("TabelleC").Rows(Zeile)
Zeile = Zeile + 1
Sheets("TabelleB").Rows(i).Copy Destination:=Sheets("TabelleC").Rows(Zeile)
Next
Sheets("TabelleC").Rows(1).Delete
End Sub