【问题标题】:VBA or excel formula for data aggregation用于数据聚合的 VBA 或 excel 公式
【发布时间】:2019-03-04 07:33:21
【问题描述】:

我在 excel 中有一个表格,其中列出了公司和在公司工作的各种人员,每个公司可能有 5-7 个人与公司相关联。 该表的结构为公司名称、人员 1、人员 2... 在单元格中

我需要 VBA 或 excel 公式中的方法,其中基于此表,我希望获得与每个人相关联的公司名称 例如。 person1 - 他在他名字下面的单元格中工作的所有公司的列表。

我有 VBA 的基本知识,任何方法或解决方案都非常感谢。

我还不能嵌入图像。所以链接 源表:1https://i.stack.imgur.com/gMyy8.png

所需输出:1:https://i.stack.imgur.com/x8QxU.png

【问题讨论】:

  • 我不确定您的情况,但您是否考虑过使用数据透视表?
  • 是的,我做到了,但可枢转对象似乎无法提供所需的输出。就像我有大约 12 人分配到大约 40-50 家公司(多人分配到一个公司,并且这个人在他的覆盖范围内有多个公司,基本上任何 4-6 人都可以分配到一个公司)。我需要的是,如果我在一个单元格中有一个人的名字,他正在工作的所有公司都显示在他的名字下面

标签: excel vba


【解决方案1】:

如果您可以像图片中那样用两列更改数据,您仍然可以使用数据透视表来获取每人的公司列表。例如,通过过滤图片中的内容(抱歉荷兰版的布局​​)。

否则,如果你至少知道所有人的名字,我会建议在 VBA 中使用以下循环

Dim ws as worksheet
Dim wst as worksheet
Dim i,j,k as long
Set ws = Thisworkbook.sheets("SheetNameData")
Set wst = Thisworkbook.sheets("SheetNameLists")
For i = 2 to ws.cells(rows.count,1).end(xlup).row 'Assuming you have headers, start at row 2
   For j = 2 to ws.cells(i,columns.count).end(xltoLeft).column 'Loop through all names in a companyrow
     k = application.worksheetfunction.match(ws.cells(i,j).value,wst.range("1:1"),0) 'find the right column in the output worksheet
     wst.cells(rows.count,k).end(xlup).Offset(1,0).value = ws.cells(i,1).value 'Place the companyname in the column of the right person
   Next j
Next i

对于这个脚本,您需要已经有第二张表,其中第一行包含人名

【讨论】:

  • 感谢您的帮助。我已经提供了我想要完成的图像的链接。因为,我有多个可枢转的列不幸不能达到目的。我给你代码试试。
  • 代码就像一个魅力,虽然在我的情况下,我有两组表,一组在另一组旁边,它们之间有一个列间隙,将尝试调整代码并完成输出。非常感谢
  • @Alex FYO,此代码将 Dim ij 作为 Variant,而不是 Long
猜你喜欢
  • 2021-07-05
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 2015-07-23
相关资源
最近更新 更多