VBA Excel列中的嵌套循环

VBA Excel列中的嵌套循环,vba,excel,loops,nested-loops,Vba,Excel,Loops,Nested Loops,我需要从A列中获取数据,并将每个值添加到第1行中的学校。所有这些都应该成为列。输入为: 我需要的输出是这样的: School SERVICE Number of Price Granbacka skola Computer 1 500 Granbacka skola Ipads 25 600 Granbacka skola Iphone 0 700

我需要从A列中获取数据,并将每个值添加到第1行中的学校。所有这些都应该成为列。输入为:

我需要的输出是这样的:

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
该准则将应用于多个工作手册和工作表,其中服务和学校的数量可能有所不同

我尝试过写作和搜索,但找不到任何能解决我问题的方法。 谢谢大家!

//M

编辑2017-05-30-更改输入和输出示例以澄清我需要完成的任务。

更新代码

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
Sub-loopcols()
尺寸i为长,j为长,k为长,x为长,y为长
i=单元格(1,Columns.Count).End(xlToLeft).Column()-2
j=单元格(Rows.Count,1).End(xlUp).Row()-1
Sheets.Add.Name=“新闻纸”
x=1
y=1
对于k=1到i*j
如果k Mod j 0,那么
纸张(“新闻纸”)。单元格(k,1)=单元格(1,2+x)
纸张(“新闻纸”)。单元格(k,2)=单元格(y+1,1)
纸张(“新闻纸”)。单元格(k,4)=单元格(y+1,2)
y=y+1
其他的
纸张(“新闻纸”)。单元格(k,1)=单元格(1,2+x)
纸张(“新闻纸”)。单元格(k,2)=单元格(y+1,1)
纸张(“新闻纸”)。单元格(k,4)=单元格(y+1,2)
x=x+1
y=1
如果结束
下一个k
x=1
y=3
对于k=1到i*j
纸张(“新闻纸”)。单元格(k,3)=单元格(x+1,y)
x=x+1
如果k Mod j=0,则
x=1
y=y+1
如果结束
下一个k
工作表(“新闻表”)。第(1)行。插入
表格(“新闻纸”)。单元格(1,1)=“学校”
纸张(“新闻纸”)。单元格(1,2)=单元格(1,1)
纸张(“新闻纸”)。单元格(1,3)=“数量:”
纸张(“新闻纸”)。单元格(1,4)=单元格(1,2)
端接头

您是如何得出第一排的5的?“数字:5”应该是1,我已经编辑过了,现在还不明白。你能为所有的学校做吗?我想看完整的输出我现在已经更新了我需要的完整输出,希望它能让我更清楚我需要什么谢谢你的回复!我可能不清楚,但这不是我真正需要的。第一学校有一个名字,ex Bergsskolan,这项服务也有名字,比如Ipad交换服务。所以每个学校的名字都要写,每个服务都要写,而不是数字。结果将加载到ERP系统中,因此所有数据必须有准确的名称。我用这些信息更新我的问题!谢谢你的时间和努力@Matthei尝试修改我的代码。如果你需要帮助,请告诉我。我已经尝试过,其中一些是我能够改变的。我设法让每所学校显示服务次数:“工作表(“新闻表”)。单元格(k+1,2)=工作表(“Sheet1”)。单元格(1,y+3),但我无法计算服务部分:“工作表(“新闻表”)。范围(单元格(k+1,3),单元格(k+1+I,3))=”工作表(“Sheet1”)。单元格(y+1,2)“每个服务出现一次,然后它是空白的,直到下一个学校循环,然后它再次出现。我需要获取代码,以获取每个服务的学校数量,然后循环到下一个学校,依此类推。@Matthei现在试试这个。