【问题标题】:Nested loops in columns VBA ExcelVBA Excel列中的嵌套循环
【发布时间】:2017-05-29 15:11:57
【问题描述】:

我需要从 A 列获取数据并将每个值添加到第 1 行中的学校。它应该都只是列。输入是:

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

该代码将应用于多个工作簿和工作表,其中服务和学校的数量可能不同。

我试过写作和搜索,但找不到任何能解决我问题的东西。 谢谢!

//M

编辑 2017-05-30 - 更改了输入和输出示例以阐明我需要完成的工作。

【问题讨论】:

  • 你是怎么想出第一行的 5 的? “数量:5”
  • 应该是1,我已经编辑了帖子
  • 我还是不明白。你可以为所有学校做吗?我想看完整的输出
  • 我现在已经更新了我需要的完整输出,希望它能让我更清楚我需要什么

标签: vba excel loops nested-loops


【解决方案1】:

更新代码,

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

【讨论】:

  • 感谢您的回复!我可能不清楚,但这并不是我所需要的。 School 1 有一个名字,ex Bergsskolan,服务也有,例如 Ipad Swap Service。所以每一个学校的名字都需要写,每一个服务都需要写,而不是被称为数字。结果将被加载到 ERP 系统中,因此所有数据都必须具有准确的名称。我用这些信息更新我的问题!感谢您的时间和精力!
  • @Matthei 尝试修改我的代码。如果您需要帮助,请告诉我
  • 我已经尝试过,其中一些是我能够改变的。我设法让每所学校出现服务次数:'Sheets("newSheet").Cells(k + 1, 2) = Sheets("Sheet1").Cells(1, y + 3) 但我可以' t找出服务部分:'Sheets("newSheet").Range(Cells(k + 1, 3), Cells(k + 1 + i, 3)) = 'Sheets("Sheet1").Cells(y + 1, 2)' 每个服务出现 1 次,然后它是空白的,直到下一个学校循环,然后它又来了。我需要获取代码来获取每个服务的学校数量,然后循环到下一个和以此类推。
  • @Matthei 立即尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2017-11-21
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
相关资源
最近更新 更多