2017-05-29 4 views
-1

Ich muss die Daten aus Spalte A nehmen und jeden Wert zu den Schulen in Zeile 1 hinzufügen. Es sollte alles nur Spalten werden. Der Eingang ist:Verschachtelte Schleifen in Spalten VBA Excel

Input data

und der Ausgang I brauchen so etwas wie folgt aus:

School    SERVICE  Number of Price 
Granbacka skola  Computer 1   500 
Granbacka skola  Ipads  25   600 
Granbacka skola  Iphone  0   700 
Granbacka skola  Ipad Swap 0   800 
Granbacka skola  Iphone Swap 0   900 
Granbacka skola  Service  0   1000 
Bagartorps förskola Computer 1   500 
Bagartorps förskola Ipads  0   600 
Bagartorps förskola Iphone  5   700 
Bagartorps förskola Ipad Swap 4   800 
Bagartorps förskola Iphone Swap 0   900 
Bagartorps förskola Service  1   1000 
Ekensbergs skola  Computer 2   500 
Ekensbergs skola  Ipads  0   600 
Ekensbergs skola  Iphone  33   700 
Ekensbergs skola  Ipad Swap 0   800 
Ekensbergs skola  Iphone Swap 0   900 
Ekensbergs skola  Service  0   1000 
Frösunda skola  Computer 3   500 
Frösunda skola  Ipads  0   600 
Frösunda skola  Iphone  0   700 
Frösunda skola  Ipad Swap 0   800 
Frösunda skola  Iphone Swap 2   900 
Frösunda skola  Service  0   1000 

Der Code wird auf mehrere Arbeitsmappen und Blätter aufgetragen werden, wobei die Anzahl der Dienste und Schulen sein können ein Unterschied.

Ich habe versucht, zu schreiben und zu suchen, aber kann nicht alles, was mein Problem löst. Vielen Dank!

// M

bearbeiten 2017.05.30 - Änderung der Eingabe und Ausgabe Beispiel zu klären, was ich erreichen müssen.

+0

Wie Sie mit den 5 in der ersten Reihe kommen haben? "Anzahl von: 5" –

+0

Es sollte 1 sein, ich habe den Beitrag jetzt bearbeitet – Matthei

+0

Bin immer noch nicht zu verstehen. Kannst du das für alle Schulen machen? Ich möchte die komplette Ausgabe sehen –

Antwort

0

Aktualisiert-Code,

Sub loopcols() 
Dim i As Long, j As Long, k As Long, x As Long, y As Long 
i = Cells(1, Columns.Count).End(xlToLeft).Column() - 2 
j = Cells(Rows.Count, 1).End(xlUp).Row() - 1 
Sheets.Add.Name = "newSheet" 
x = 1 
y = 1 
For k = 1 To i * j 
    If k Mod j <> 0 Then 
     Sheets("newSheet").Cells(k, 1) = Cells(1, 2 + x) 
     Sheets("newSheet").Cells(k, 2) = Cells(y + 1, 1) 
     Sheets("newSheet").Cells(k, 4) = Cells(y + 1, 2) 
     y = y + 1 
    Else 
     Sheets("newSheet").Cells(k, 1) = Cells(1, 2 + x) 
     Sheets("newSheet").Cells(k, 2) = Cells(y + 1, 1) 
     Sheets("newSheet").Cells(k, 4) = Cells(y + 1, 2) 
     x = x + 1 
     y = 1 
    End If 
Next k 
x = 1 
y = 3 
For k = 1 To i * j 
    Sheets("newSheet").Cells(k, 3) = Cells(x + 1, y) 
    x = x + 1 
    If k Mod j = 0 Then 
     x = 1 
     y = y + 1 
    End If 
Next k 
Sheets("newSheet").Rows(1).Insert 
Sheets("newSheet").Cells(1, 1) = "School" 
Sheets("newSheet").Cells(1, 2) = Cells(1, 1) 
Sheets("newSheet").Cells(1, 3) = "Number Of:" 
Sheets("newSheet").Cells(1, 4) = Cells(1, 2) 
End Sub 
+0

Vielen Dank für Ihre Antwort! Ich wäre vielleicht unklar gewesen, aber es ist nicht genau das, was ich brauche. Schule 1 hat einen Namen, ex Bergsskolan und auch der Service, wie Ipad Swap Service. Also muss jeder Schulname geschrieben werden und jeder Dienst muss geschrieben werden, nicht als eine Nummer bezeichnet. Das Ergebnis wird in ein ERP-System geladen, daher müssen alle Daten genaue Namen haben. Ich aktualisiere meine Frage mit diesen Informationen! Danke für Ihre Zeit und Mühe! – Matthei

+0

@Matthei Versuchen Sie, meinen Code zu ändern. Lassen Sie mich wissen, wenn Sie Hilfe brauchen –

+0

Ich habe versucht und einige davon war ich in der Lage zu ändern. Ich schaffte es, jede Schule erscheinen die Anzahl der Dienste mal: 'Sheets ("newSheet"). Zellen (k + 1, 2) = Blätter ("Sheet1"). Zellen (1, y + 3) Aber ich kann den Service-Teil nicht herausfinden: 'Sheets ("newSheet"). Bereich (Zellen (k + 1, 3), Zellen (k + 1 + i, 3)) =' Sheets ("Sheet1") .Cells (y + 1, 2) ' Jeder Dienst erscheint 1 Mal und dann ist es leer bis zur nächsten Schleife der Schulen und dann kommt es wieder. Ich muss den Code erhalten, um jeden Dienst die Anzahl der Schulen dort ist und dann zum nächsten und so weiter. – Matthei

Verwandte Themen