PDA

Vollständige Version anzeigen : Datenzuordnungsproblem:


Wahlo
19.02.2008, 10:30
Hallo,

folgende Situation:
in einem Tabellenblatt stehen ca. 4000 Zeile. In Spalte A steht unsere Artikelnummer und in Spalte B jeweils die zugehörige Kundenartikelnummer.

Die Daten von mehreren Kunden wurde untereinandergepackt, so dass unsere Artikelnummer mehrfach vorkommt. Nun soll eine Referenzliste aufgebaut werden nach folgendem Design:

Spalte A=unsere Artikelnummer, Spalte B=1.zugehörige Kundenartikelnummer, Spalte C=2.zugehörige Artikelnummer etc...

Wie mache ich das am geschicktesten? Ich dachte an eine Pivot-Tabelle und wollte dabei einfach unsere Artikelnummer und die Kundenartikelnummer als Zeilenfelder nehmen und sonst nichts definieren. Leider stehen dann die zugehörigen Kundenartikelnummern nicht nebeneinander sondern untereinander.

Habt Ihr eine Lösung?

Vorab vieln Dank.

jinx
19.02.2008, 10:40
<font size="2" face="Century Gothic">Moin, Wahlo,

da fehlt doch aber noch der Hinweis auf den jeweiligen Kunden mit der entsprechenden ID - wo taucht der in der Liste auf?</font>

Wahlo
19.02.2008, 10:44
Moin,

ist gar nicht nötig. es soll eine allgemeine Artikelvergleichs- bzw. Referenzliste erstellt werden.

Also: ArtikelXYZ (von uns) entspricht ArtikelBA3 und ArtikelBVF und ArtikelBFG und so weiter!

jinx
19.02.2008, 10:56
<font size="2" face="Century Gothic">Moin, Wahlo,

bei der Menge der angegebenen Daten und wenn diese anschließend nebeneiander stehen sollen, würde ich auf ein Makro ausweichen, was in einer temporären Mappe doe Schritte zum Erstellen durchführt (wenn denn eine Makrolösung in Betracht kommt)...</font>

Wahlo
19.02.2008, 11:09
Hallo jinx,

eine Makrolösung käme durchaus in Betracht, allerdings habe ich keine Ahnung wie ein solches Makro auszusehen hätte?

jinx
19.02.2008, 11:13
<font size="2" face="Century Gothic">Moin, Wahlo,

ich schon, aber bevor ich mir die Mühe mache, wollte ich mich vergewissern. Leider muss ich um ein wenig Geduld bitten - nicht, weil ich nicht weiß, was ich tun muss, sondern weil ich erst einmal Mittag mache. Code und Beispielmappe gibt es dann später. Mahlzeit. ;)</font>

Wahlo
19.02.2008, 11:33
Das klingt gut!
Mahlzeit!

Wahlo
19.02.2008, 11:55
Hallo Jinx,

damit Du nicht denkst, dass ich untätig rumsitze und warte ;-) !!!

Bislang habe ich mir so geholfen: wie oben erwähnt eine Pivottabelle erstellt und dann mit einer sehr stark verschachtelten wenn-funktion die Spalten gefüllt.

klappt soweit, allerdings wäre eine Makrolösung wesentlich eleganter.

deshalb warte ich gerne!

jinx
19.02.2008, 13:44
<font size="2" face="Century Gothic">Moin, wahlo,

genug gewartet :grins:

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
&nbsp;
<span class="TOKEN">Sub</span> Vergleichliste()
&nbsp;
<span class="TOKEN">Dim</span> lngCounter <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> lngLastRow <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> lngNewRow <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> lngColumn <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
<span class="TOKEN">Dim</span> wsData <span class="TOKEN">As</span> Worksheet
<span class="TOKEN">Dim</span> wsCopy <span class="TOKEN">As</span> Worksheet
<span class="TOKEN">Dim</span> wsTarget <span class="TOKEN">As</span> Worksheet
<span class="TOKEN">Dim</span> lngAppCalc <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
&nbsp;
<span class="TOKEN">On Error GoTo</span> Vergleichliste_Error
&nbsp;
<span class="REM">'Ausschalten Bidlschirmaktualisierung, automatische Berechnung, Ereignisse</span>
<span class="TOKEN">With</span> Application
.ScreenUpdating = <span class="TOKEN">False</span>
lngAppCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = <span class="TOKEN">False</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="REM">'Festlegen Datenbasis</span>
<span class="TOKEN">Set</span> wsData = Worksheets(&quot;Daten&quot;)
<span class="REM">'Kopie der Tabelle erstellen</span>
Worksheets(&quot;Daten&quot;).Copy After:=Worksheets(Worksheets.Count)
<span class="REM">'Objekt setzen</span>
<span class="TOKEN">Set</span> wsCopy = ActiveSheet
&nbsp;
<span class="REM">'Letzte Zeile auf Tabelle feststellen</span>
lngLastRow = wsCopy.Cells(Rows.Count, 1).End(xlUp).Row
<span class="REM">'Bereich nach eigenen Art.Nr. sortieren</span>
wsCopy.UsedRange.Sort Key1:=wsCopy.Range(&quot;A1&quot;), Orientation:=xlAscending
&nbsp;
<span class="REM">'Zieltabelle einf&uuml;gen, Objekt setzen</span>
<span class="TOKEN">Set</span> wsTarget = Worksheets.Add(After:=Worksheets(Worksheets.Count))
&nbsp;
<span class="REM">'Dann man los</span>
lngNewRow = 1
<span class="TOKEN">For</span> lngCounter = 2 <span class="TOKEN">To</span> lngLastRow
<span class="REM"> 'Bei Unterschied Art.-Nr. Daten in Spalte A und B schreiben</span>
<span class="TOKEN">If</span> wsCopy.Cells(lngCounter - 1, 1) &lt;&gt; wsCopy.Cells(lngCounter, 1) <span class="TOKEN">Then</span>
lngNewRow = lngNewRow + 1
lngColumn = 2
wsTarget.Cells(lngNewRow, 1).Value = wsCopy.Cells(lngCounter, 1)
wsTarget.Cells(lngNewRow, 2).Value = wsCopy.Cells(lngCounter, 2)
<span class="TOKEN">Else</span>
<span class="REM"> 'Daten in die n&auml;chste Spalte schrieben, O&uuml;rfen, ob max. Spaltenanzahl &uuml;berschritten sein k&ouml;nnte</span>
lngColumn = lngColumn + 1
<span class="TOKEN">If</span> lngColumn = Columns.Count + 1 <span class="TOKEN">Then</span>
lngNewRow = lngNewRow + 1
lngColumn = 3
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
wsTarget.Cells(lngNewRow, lngColumn).Value = wsCopy.Cells(lngCounter, 2)
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">Next</span> lngCounter
&nbsp;
<span class="REM">'Tabelle bennenen</span>
wsTarget.Name = &quot;Vergleich &quot; &amp; Format(Now, &quot;yyyy-mm-dd hh_mm&quot;)
wsTarget.Cells(1, 1).Value = wsCopy.Cells(1, 1)
<span class="TOKEN">For</span> lngCounter = 2 <span class="TOKEN">To</span> wsCopy.UsedRange.Columns.Count
wsTarget.Cells(1, lngCounter).Value = Format(lngCounter - 1, &quot;000 Variante&quot;)
<span class="TOKEN">Next</span> lngCounter
&nbsp;
<span class="REM">'Sprungadresse Abschlu&szlig;</span>
Exit_Here:
<span class="TOKEN">On Error GoTo 0</span>
<span class="REM">'Anschalten</span>
<span class="TOKEN">With</span> Application
.ScreenUpdating = <span class="TOKEN">True</span>
.Calculation = lngAppCalc
.EnableEvents = <span class="TOKEN">True</span>
<span class="REM"> 'Hilfstabelle l&ouml;schen</span>
.DisplayAlerts = <span class="TOKEN">False</span>
wsCopy.Delete
.DisplayAlerts = <span class="TOKEN">True</span>
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
&nbsp;
<span class="REM">'Aufr&auml;umen</span>
<span class="TOKEN">Set</span> wsTarget = <span class="TOKEN">Nothing</span>
<span class="TOKEN">Set</span> wsCopy = <span class="TOKEN">Nothing</span>
<span class="TOKEN">Set</span> wsData = <span class="TOKEN">Nothing</span>
<span class="TOKEN">Exit Sub</span>
&nbsp;
<span class="REM">'fehlerbehandlung</span>
Vergleichliste_Error:
MsgBox &quot;Fehler &quot; &amp; Err.Number &amp; vbCrLf &amp; &quot;Beschreibung: &quot; &amp; Err.Description &amp; vbCrLf &amp; _
&quot;Ort: Prozedur Vergleichliste&quot; &amp; vbCrLf &amp; &quot;Modul mdlVergleichsliste&quot;, vbCritical, &quot;Fehlermeldung&quot;
<span class="TOKEN">Resume</span> Exit_Here
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)</font>

Wahlo
19.02.2008, 14:57
Mensch, Mensch, Mensch,

genial!!!! Herzlichen Dank, echt spitzenmäßig... und verglichen mit meiner Lösung wie ein Formel-1-Wagen im Gegensatz zu meinem Fahrrad mit Stützrädern!

Super!