Gre*_*onD 9 csv microsoft-excel microsoft-excel-2010
我在 Excel 中有一个包含数百个条目的产品数据库,每个条目都有 1 到 3 个“等级”的定价:标准、豪华和高级。每个层都有自己的 SKU(A、B 或 C 添加到基本 SKU 的末尾)和价格。我的数据是这样的:
Name, Description, Price A, Price B, Price C, SKU A, SKU B, SKU C
name1, desc1, 14.95, 19.95, , sku1A, sku1B,
name2, desc2, 4.95, 9.95, 12.95, sku2A, sku2B, sku2C
name3, desc3, 49.95, , , sku3A, ,
Run Code Online (Sandbox Code Playgroud)
我将如何让数据看起来像这样:
Name, Description, SKU, Price
name1, desc1, sku1A, 14.95
name1, desc1, sku1B, 19.95
name2, desc2, sku2A, 4.95
name2, desc2, sku2B, 9.95
name2, desc2, sku2C, 12.95
name3, desc3, sku3A, 49.95
Run Code Online (Sandbox Code Playgroud)
如果有帮助,我会将这些产品导入到 Magento 安装中。
先谢谢了。
这些任务通常使用 VBA 更快。事实上,我花了大约 10 分钟来设置它。
我假设您的数据在 A 列到 H 列中。
转到Excel » Developer » Visual Basic
» 在左侧窗格中打开sheet1
(或)数据所在的工作表 » 在右侧窗口中插入代码 » 运行代码
1 |Sub NewLayout()
2 | For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
3 | For j = 0 To 2
4 | If Cells(i, 3 + j) <> vbNullString Then
5 | intCount = intCount + 1
6 | Cells(i, 1).Copy Destination:=Cells(intCount, 10)
7 | Cells(i, 2).Copy Destination:=Cells(intCount, 11)
8 | Cells(i, 3 + j).Copy Destination:=Cells(intCount, 12)
9 | Cells(i, 6 + j).Copy Destination:=Cells(intCount, 13)
10| End If
11| Next j
12| Next i
13|End Sub
Run Code Online (Sandbox Code Playgroud)
我的目的是使代码尽可能短以更好地解释它。基本上我们使用两个循环。外循环 ( i
) 用于行,内循环 ( j
) 用于价格列。
我们大量使用cells(rowNumber,columnNumber)
读/写单元格。
第2行| 从第 2 行到最后一行开始循环。我们遍历每一个使用过的行
第3行| 从 0 到 2 开始第二个循环(实际上是 3 个循环,每个 Price 列一个)
第4行| 我们使用这个内部循环来检查当前行和列价格 A 中的值,然后是价格 B 和最后一个循环中的价格 C。如果我们在价格列中找到一个值,我们继续复制单元格。如果没有插入价格,我们什么都不做并继续下一个价格列
第5行| 计算一个计数器来知道我们已经复制了多少行,
所以我们知道在哪一行之后我们可以复制当前行
第6行| 复制名称列
第7行| 复制描述列
8号线| 根据我们当前所处的内部循环复制价格 A 或 B 或 C 列
第9行| 根据我们当前所在的内部循环复制 SKU A 或 B 或 C 列
归档时间: |
|
查看次数: |
80300 次 |
最近记录: |