我有这个格式很差的数据,我必须每周工作。这是一个示例:
Code: To: Total: Description: ------------------------------------------------------------- FD987 00001 5 Food/Snack/M&M
FD987 00001 5 Food/Snack/Pretzels
NA654 00001 5 Non-Alc/Soda/Sprite
NA654 00002 2 Non-Alc/Soda/Sprite
NA987 00002 2 Non-Alc/Soda/Lemonde
我希望数据最终按“To”代码排序,每个类别中的小计的各种数据总和以及整个“To”条目的小计。像这样:
To: Total: Description: --------------------------------------------------- 00001 10 Food Subtotal
00001 5 Non-Alc Subtotal
00001 15 Grand total
00002 0 Food Subtotal
00002 4 Non-Alc Subtotal
00002 4 Grand total
我编写的代码为“00001”和“00002”。但我不知道该怎么做。我应该使用if和for的组合循环吗?
示例:
pseudo code:
for all i in UniqueToCodes
if (cell.value = i) then
Descriptions = {"Food", "Non-Alc"}
tempsum = 0
for all j in Descriptions
q = total for item j belonging to Descriptions belonging to UniqueToCodes
tempSum = tempSum + q
next j
end if
next i
或者向后循环会更有效率?
例如:
pseudo-code:
for i = lastOccurenceOf(ToCode) to firstOccurenceOf(ToCode) -1
Descriptions = {"Food", "Non-Alc"}
for all j in Descriptions
q = total for item j belonging to Descriptions belonging to UniqueToCodes
tempSum = tempSum + q
next j
next i
(我知道“To”代码总是以块的形式出现,而不会被其他代码插入,即 总是这样:
00001 00001 00002
永远不会这样:
00001 00001 00003 00001)
我也如何存储所有这些临时总和?即“Food”的tempSum和“To-”的“非Alc”的临时代码为“00001”?我知道字典对象只将一个属性映射到一个键。但是我需要将描述和总计的小计与“To”代码相匹配。你会说什么是解决这个问题的最佳方法?任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
就像人们在评论中所说的那样,数据透视表可能是汇总数据的最简单方法。但是,为了按照您想要的方式进行小计,您需要拆分描述列。
在Excel 2007中,您可以使用Text to Columns
,如下所示:
Data
- > Text to Columns
。Convert Text to Columns Wizard
上确保原始数据类型设置为Delimited
,然后点击Next
。Delimiters
选择Other
至/
,然后点击Finish
。
如果“文本到列”不可用,只需创建一个公式以从“描述”中提取第一种食物类型。例如,使用上面的第一张图片,将此公式放在单元格E2中。 =LEFT(D2,FIND("/",D2)-1)
现在您可以创建一个数据透视表。
Insert
- > PivotTable
。显示Create PivotTable
对话框时,点击OK
。To
和Type
拖至Row Lables
区域,将Total
拖至Values
区域。