2016-09-20 13 views
2

So in der Regel weiß ich, was ich versuche zu tun und google es und finde es heraus. Aber ich weiß nicht einmal, wie es heißt, dass ich es versuche. Ich habe zwei Blätter in Excel (oder Tabellen in Access, je nachdem, was am einfachsten für Sie ist). Tabelle A hat 315 Nummern und Tabelle 2 hat 146 Personen. Ich muss die zwei Tabellen zusammenführen, damit ich zwei Spalten habe. Eine Spalte mit jedem Konto und die andere mit jeder Person. Also werde ich im Grunde mit etwa 46.000 Zeilen enden. Also:Excel doppelte Daten mehrere Tabellen

Tabelle 1:

Anzahl

Tabelle 2:

Person

A

B

C

D

Strebtes Ergebnis:

Tabelle 3:

Personennummer

A | 1

A | 2

A | 3

A | 4

B | 1

B | 2

B | 3

B | 4

C | 1

C | 2

C | 3

C | 4

Und so weiter. Wenn ich PHP mit mysqli machen würde, würde ich nur eine for-Schleife ausgeben, aber ich habe nur access/excel für mich hier und ich weiß nicht genug VBA, um mein eigenes Makro zu machen (wenn ich wüsste, was ich zu tun versuche) , hier würde ich es googlen). Ich schätze jede Bereitschaft, zu helfen, obwohl ich nicht einmal Code zur Verfügung stelle, den ich ausprobiert habe, weil ich nicht weiß, wo ich anfangen soll.

+0

Haben Sie Excel 2016 oder Excel 2013 mit Power Query? Wenn nicht, ist VBA wahrscheinlich Ihre beste Wette. –

+0

Weder. 2010. Ich gehe davon aus, dass VBA meine beste Option sein wird, eine Art Makro, ich weiß einfach nicht, wonach ich suche. Baha. – Aaron

+0

nur eine Anmerkung, dass Sie Google für: "Cross Join" und (Excel oder Access) – eshwar

Antwort

1

Dies ist ziemlich einfach mit einer Schleife.

Hier ist ein grundlegendes Beispiel dafür, wie es aussehen würde, wenn man diese in Bereichen liest.

Sub Looping() 
Dim n As Integer 
Dim rng1 As Range, rng2 As Range 

Set rng1 = Range("A1:A4") 
Set rng2 = Range("B1:B4") 

n = 0 
For Each i In rng1 
    For Each j In rng2 
     n = n + 1 
     Cells(n, "D").Value = i.Value & j.Value 
    Next j 
Next i 

End Sub 

Wo Ihr 1,2,3,4 in A1:A4 ist, Ihre A,B,C,D ist in B1:B4, und der Ausgang geht an D1:D16.

Wie @Mat'sMug sagte, ist es wahrscheinlich besser, Tabellen zu verwenden, als Ihre genauen Bereiche definieren zu müssen.

+0

Ich gebe Ihnen die Stimme, weil Sie mir den Code gegeben haben. Musste es ein wenig anpassen (brauchte den i-Wert und j-Wert in separaten Spalten, aber das war eine einfache Anpassung). Ich schätze Ihre Hilfe, um dem jungen Programmierer zu helfen. :) – Aaron

1

Formatieren Sie diese Listen als Tabellen, damit der VBA-Code ListObject Objekte verwenden kann; Sie können ihre Range nehmen, um sie buchstäblich in Variant() Arrays auszugeben, und dann richten Sie einfach Ihre verschachtelten Schleifen ein; Sie wollen Application.ScreenUpdating ausschalten, weil Sie Ihre "AccountList" während der Iteration Ihrer "PersonList" durchlaufen werden, und der Körper der inneren Schleife wird auf das Ziel schreiben Worksheet; und dann können Sie das Ergebnis in eine ListObject drehen, bevor Sie Application.ScreenUpdating wieder einschalten. Oder lassen Sie Excel sich selbst neu zeichnen, aber zeigen Sie einen Abschlussstatus in Application.Statusbar an, damit der Benutzer weiß, dass das Makro funktioniert ... aber das Anzeigen des Status und das Aktualisieren des Bildschirms wird länger dauern, als wenn Sie dies nicht tun.

+0

Also sagen Sie haben VBA beide Tabellen in Arrays ziehen und dann kontinuierlich das Array loop/dump? (Noch einmal, wenn das PHP war, kann ich mir komplett vorstellen, was du sagst). Sind Sie bereit, mir einen Code-Snippet-Start zu geben? (Ich wusste, ich hätte die VB-Klasse nicht überspringen sollen ...) – Aaron

+0

Wohlgemerkt, die Daten sind fest (ich kenne alle Daten), ich suche nur den schnellsten Weg für mich, zu kombinieren und zu duplizieren anstatt mich zu kopieren und kleben 146 Artikel 315 mal. – Aaron

+0

@Aaron straight-up SQL ist der einfachste, einfachste und schnellste Weg, dies zu tun - ich hatte nur nicht realisiert, dass Sie die Daten in MS-Access hatten. [YowE3K hat deine beste Lösung] (http://stackoverflow.com/a/39584776/1188513) :) –

2

Zugriff über, würde die Abfrage

SELECT Table2.person, Table1.number INTO Table3 
FROM Table1, Table2; 
+0

Ha! Nicht realisiert [tag: access] war in der Gleichung - das ist definitiv die ideale Lösung: ein einfaches Kreuz direkt an der Quelle zu verbinden =) –

+0

Ich schäme mich, dass ich nicht daran gedacht habe. Do. – Aaron

+0

@Aaron - Ich bin noch mehr erstaunt, dass ich ** daran denke! – YowE3K

0

sein, das einfach.

Was Sie tun möchten, ist Iteration Element für Element der ersten Spalte und für jede Iteration wird es die zweite Spalte iterieren.

So etwas wie dies in Excel VBA:

I = 1 
III = 1 
Do While Not Range("A" & I) = "" 
     II = 1 
     Do While Not Range("B" & II) = "" 

      /Your Code Goes Here 
      /For example: 
      Range("C" & III) = Range("A" & I) 
      Range("D" & III) = Range("B" & II) 
      III = III + 1 

      II = II + 1 
     Loop 
    I = I + 1 
Loop 

Prost! Du wirst dahin kommen.

Verwandte Themen