2017-05-29 227 views
-1

我需要从列A中获取数据并将每个值添加到行1中的学校。它应该全部成为列。输入是:列VBA中的嵌套循环Excel

Input data

,我需要的输出是这样的:

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 

的代码将被应用到多个工作簿和床单,在服务和学校的数量可以一个不同的。

我试过写作和搜索,但无法找到任何解决我的问题。 谢谢!

//中号

编辑二零一七年五月三十零日 - 改变了输入和输出的例子来阐明什么,我需要完成。

+0

你怎么拿出5的第一行? “数量:5” –

+0

应该是1,我现在编辑了帖子 – Matthei

+0

我还没有理解。你能为所有学校做到吗?我想看看完整的输出 –

回答

0

更新的代码,

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

谢谢您的回应!我可能一直不清楚,但这不完全是我需要的。学校1有一个名字,例如Bergsskolan,服务也是如此,例如Ipad Swap Service。所以每个学校的名字都需要写出来,每个服务都需要写出来,而不是被称为数字。结果将被加载到ERP系统中,因此所有数据都必须有确切的名称。我用这个信息更新我的问题!感谢您的时间和精力! – Matthei

+0

@Matthei尝试修改我的代码。让我知道如果你需要帮助 –

+0

我已经尝试过,其中一些是我能够改变。 我设法让每所学校出现服务次数: '表格(“newSheet”)。Cells(k + 1,2)= Sheets(“Sheet1”)。Cells(1,y + 3) 但我不能找出服务部分: '表( “newSheet”)范围(将细胞(K + 1,3),将细胞(K + 1 + 1,3))=' 表( “工作表Sheet” ).Cells(y + 1,2)' 每项服务都会出现一次,然后在下一次学校循环之前它是空白的,然后再次出现。我需要获取代码才能获得每项服务的学校数量然后循环到下一个等等。 – Matthei