3

我正在尝试创建一个宏,它将根据项目类型将一列中的数据分类为多列。我试图分类的数据是合同列表,其中包含合同中项目的元数据。

原始数据如下所示:

合同编号 合同名称 项目类型 项目描述
111111 巧克力用品 POTS 5"
111111 巧克力用品 POTS 10"
111111 巧克力用品 POTS 15"
111111 巧克力供应盘 5"
111111 巧克力用品 PANS 10"
111111 巧克力供应盘 15"
111111 Chocolate Supplies KNIVES 削皮刀
111111 Chocolate Supplies SILVERWARE 沙拉叉
111111 Chocolate Supplies SILVERWARE 餐叉
111111 Chocolate Supplies SILVERWARE 甜点叉
111111 巧克力用品 SILVERWARE 甜品勺
111111 巧克力用品 SILVERWARE 汤勺
22222 汤和沙拉订购 POTS 10"
22222 汤和沙拉订购 POTS 15"
22222 汤和沙拉订购 PANS 15"
22222 Soups and Salads Order KNIVES 黄油刀
22222 Soups and Salads Order KNIVES 面包刀
22222 Soups and Salads Order KNIVES 削皮刀
22222 汤和沙拉 订购 SILVERWARE 汤匙

最终数据需要看起来像这样(编辑以包含图像): 报告的最终格式

合同 合同名称 POTS PANS KNIVES SILVERWARE
111111 Chocolate Supplies 5" 5" 削皮刀 沙拉叉
                                    10" 10" 餐叉                         
                                    15" 15" 甜点叉
                                                                    甜点勺
                                                                    汤匙
22222 汤和沙拉 订购 10" 15" 黄油刀 汤勺
                                    15" 面包刀
                                                    削皮刀    

# 到目前为止我尝试过的 # 我
目前使用的粗略解决方案是:
- 运行查询
- 将数据粘贴到 excel 中
- 创建数据透视
表 - 使用一系列计数、偏移和间接公式根据需要重新组织数据
- 由于上述过程在合同的每个部分之间留下了空行,我将数据复制粘贴到一个新的工作表中,放置一个自动过滤器并删除空白行
......瞧,这就是最终报告。

# 可能的 VBA 解决方案 #
我发现这个教程似乎完全符合我的要求,除了我需要宏在合同号时开始新部分的问题。变化。我不知道如何获取下面的 VBA 代码来检查合同号。

我很乐意为您提供任何帮助。提前致谢!

# 来自Oscar的 get-digital-help [dot] com 教程中的代码。#
不是我的代码,我完全相信 Oscar 的教程让我朝着正确的方向前进。

Sub Categorizedatatocolumns()
Dim rng As Range
Dim dest As Range
Dim vrb As Boolean
Dim i As Integer
Set rng = Sheets("Sheet1").Range("A4")
vrb = False
Do While rng <> ""
Set dest = Sheets("Sheet1").Range("A20")
Do While dest <> ""
If rng.Value = dest.Value Then
vrb = True
End If
Set dest = dest.Offset(0, 1)
Loop
If vrb = False Then
dest.Value = rng.Value
dest.Font.bold = True
End If
vrb = False
Set rng = rng.Offset(1, 0)
Loop
Set rng = Sheets("Sheet1").Range("A4")
Do While rng <> ""
Set dest = Sheets("Sheet1").Range("A20")
Do While dest <> ""
If rng.Value = dest.Value Then
i = 0
Do While dest <> ""
Set dest = dest.Offset(1, 0)
i = i + 1
Loop
Set rng = rng.Offset(0, 1)
dest.Value = rng.Value
Set rng = rng.Offset(0, -1)
Set dest = dest.Offset(-i, 0)
End If
Set dest = dest.Offset(0, 1)
Loop
Set rng = rng.Offset(1, 0)
Loop
End Sub
4

1 回答 1

0

您可以考虑使用将提供类似输出的数据透视表。

在此处输入图像描述

关闭小计并以表格形式显示所有字段的数据。

在此处输入图像描述

在此处输入图像描述

于 2013-10-24T02:17:26.250 回答