20.01.2017, 15:38
Hallo,
zwei Dateien mit Stücklisten-Tabelle mit 11 - 13 Spalten sollen miteinander verglichen werden.
Tabelle1
In dieser Tabelle stehen in Spalte G (7) Zahlen ("Quantity" für die Anzahl an Bauteilen) drin. Mit unterem Makro von Kuwer werden die einzelnen Zeilen überprüft auf die Zahl in Spalte G (7) und dann mit Aufsplittung des Designators entsprechend oft untereinander kopiert.
Momentan gibt es diese drei Möglichkeiten für Stücklisten:
Das Makro arbeitet nur im Fall 1 ohne Fehler. Wie kann ich es verallgemeinern?
Wie kann ich prüfen, in welcher Spalte das "Quantity" steht und diese Spalte dann anstelle der Spalte 7 verwenden?
zwei Dateien mit Stücklisten-Tabelle mit 11 - 13 Spalten sollen miteinander verglichen werden.
Tabelle1
A | B | C | D | E | F | G | H | I | J | K | |
1 | Stückliste | ||||||||||
2 | Projekt | ||||||||||
3 | Version | ||||||||||
4 | Bearbeiter | ||||||||||
5 | Stand | ||||||||||
6 | Item # | Comment | Designator | Value | Voltage | Tolerance | Quantity | Leistung | Footprint | Manufacturer | Manufacturer Part Number |
7 | 1 | Capacitor | C107, C108 | 470pF | 2 | Keramik RM75_d8 | Murata | DEBB33D471KA2B | |||
8 | 2 | Capacitor | C200, C201, C204, C205 | 2,2µF | 4 | C_RM27.5H24.5B14.0L31.5 | EPCOS | B32924C3225M | |||
9 | 3 | Capacitor | C202, C203 | 1,5µF | 2 | C_RM27.5H21.0B11.0L31.5 | EPCOS | B32924C3155M | |||
10 | 4 | Capacitor | C206, C207, C208, C209 | 47nF | 300V | 20% | 4 | C_RM15.0H14.0B8.5L18.0 | EPCOS | B32022A3473M | |
11 | 5 | Capacitor | C349, C350, C351, C352 | 1nF | 4 | Keramik RM5_d8 | Murata | DEBB33D102KA2B | |||
12 | 6 | Capacitor | C353 | 4,7nF | 1 | Keramik RM10_d16 | Vishay | VY1472M63Y5UQ63V0 | |||
13 | 7 | Capacitor | C400, C405, C409, C416 | 1,5µF | 4 | C_RM27.5H28.0B18.0L31.0 | EPCOS | B32654A6155+000 | |||
14 | 8 | Capacitor | C401, C402, C407, C408, C414, C415 | 1,5nF | 6 | C_RM22.5H15.0B6.0L26.5 | Wima | FKP1U011505B00 | |||
15 | 9 | Capacitor | C500, C501, C507 | 100nF | 3 | C_RM27.5H24.0B13.0L31.5 | Wima | FKP1J031006D00 | |||
16 | 10 | Capacitor | C502, C504 | 22nF | 2 | C_RM27.5H26.0B15.0L31.5 | Wima | FKP1U022206F00 | |||
17 | 11 | Capacitor | C503, C505 | 15nF | 2 | C_RM27.5H24.0B13.0L31.5 | Wima | FKP1U021506D00 | |||
18 | 12 | Capacitor pol. | C700, C701 | 100µF | 2 | C Panasonic HD Series V Type G Size | Panasonic | EEEHD1V101AP | |||
19 | 13 | Capacitor SMD | C100, C101, C102, C103 | 10pF | 50V | 10% | 4 | C_sm_0603 |
verwendete Formeln | |||
Zelle | Formel | Bereich | N/A |
A7:A19 | =ZEILE(A7) - ZEILE($A$6) |
Excel-Inn.de |
Hajo-Excel.de |
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007 |
Add-In-Version 19.08 einschl. 64 Bit |
In dieser Tabelle stehen in Spalte G (7) Zahlen ("Quantity" für die Anzahl an Bauteilen) drin. Mit unterem Makro von Kuwer werden die einzelnen Zeilen überprüft auf die Zahl in Spalte G (7) und dann mit Aufsplittung des Designators entsprechend oft untereinander kopiert.
Sub WerteTrennen(oWsQ As Worksheet, oWsZ As Worksheet, rngZ As Range) 'MitFeldvariablen_Uwe()
Dim lngSpalte As Long, lngZeileQ As Long, lngZeileZ As Long
Dim lngBauteile As Long, lngLetzteZeile As Long
Dim varBauteile As Variant, varQ As Variant, varV As Variant, varZ As Variant
Const strV As String = " | "
With oWsQ
'letzte belegte Zeile in Spalte A (1)
lngLetzteZeile = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
'Quelltabelle in Variable einlesen
varQ = .Range("A7:K" & lngLetzteZeile).Value
End With
'Schleife für Bauteilesummierung
For lngZeileQ = 1 To Ubound(varQ)
If Not IsNumeric(varQ(lngZeileQ, 7)) Or varQ(lngZeileQ, 7) = "" Then
lngBauteile = lngBauteile + 1
Else
lngBauteile = lngBauteile + varQ(lngZeileQ, 7)
varQ(lngZeileQ, 7) = 1
End If
Next lngZeileQ
'Variablen für die Rückgabe entsprechend der Bauteileanzahl dimensionieren
Redim varV(1 To lngBauteile, 1 To 2)
Redim varZ(1 To lngBauteile, 1 To Ubound(varQ, 2))
'Schleife für das Umschaufeln der Daten
For lngZeileQ = 1 To Ubound(varQ)
varBauteile = Split(varQ(lngZeileQ, 3), ",")
If Ubound(varBauteile) = -1 Then Redim varBauteile(0 To 0) '<<<< diese Zeile kommt neu hinzu (Uwe)
For lngBauteile = 0 To Ubound(varBauteile)
lngZeileZ = lngZeileZ + 1
varZ(lngZeileZ, 1) = lngZeileZ
varZ(lngZeileZ, 2) = varQ(lngZeileQ, 2)
varZ(lngZeileZ, 3) = Trim(varBauteile(lngBauteile))
varV(lngZeileZ, 1) = lngZeileZ
varV(lngZeileZ, 2) = varZ(lngZeileZ, 3)
For lngSpalte = 4 To Ubound(varZ, 2)
varZ(lngZeileZ, lngSpalte) = varQ(lngZeileQ, lngSpalte)
varV(lngZeileZ, 2) = varV(lngZeileZ, 2) & strV & varZ(lngZeileZ, lngSpalte)
Next lngSpalte
Next lngBauteile
Next lngZeileQ
'Zurückschreiben der Zielvariable in Zieltabelle
oWsQ.Range("B2:C5").Copy oWsZ.Range("B2")
With oWsZ.Cells(7, 1).Resize(Ubound(varZ, 1), Ubound(varZ, 2))
.Value = varZ
.EntireColumn.AutoFit
End With
rngZ.Resize(Ubound(varV, 1), Ubound(varV, 2)).Value = varV
rngZ.Resize(Ubound(varV, 1) - 1, 1).Offset(1, 2).Formula = rngZ.Offset(0, 2).Formula
End Sub
Momentan gibt es diese drei Möglichkeiten für Stücklisten:
- 2 Listen mit Quantity in Spalte G
- 1 Liste mit Quantity in Spalte G und eine in H
- 2 Listen mit Quantity in Spalte H
Das Makro arbeitet nur im Fall 1 ohne Fehler. Wie kann ich es verallgemeinern?
Wie kann ich prüfen, in welcher Spalte das "Quantity" steht und diese Spalte dann anstelle der Spalte 7 verwenden?