Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于数据聚合的VBA或excel公式_Excel_Vba - Fatal编程技术网

用于数据聚合的VBA或excel公式

用于数据聚合的VBA或excel公式,excel,vba,Excel,Vba,我在excel中有一个表格,其中列出了公司和在这些公司工作的各种人员,每个公司可能有5-7人与一家公司有关联。 该表的结构为公司名称、人员1、人员2。。。在牢房里 我需要一个VBA或excel公式的方法,其中基于此表,我希望有与每个人相关的公司名称 例如,person1——他在他名字下面的单元格中工作的所有公司的名单 我有VBA的基本知识,任何方法或解决方案都将受到高度赞赏 我还不允许嵌入图像。那么链接呢 源表:: 所需输出:: 如果您可以像图片中的两列那样更改数据,您仍然可以使用透视表来获取

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

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

我有VBA的基本知识,任何方法或解决方案都将受到高度赞赏

我还不允许嵌入图像。那么链接呢 源表::

所需输出::


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

否则,如果您至少知道所有人的名字,我建议在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

对于这个脚本,您需要已经有了第二个工作表,其中第一行由人名组成

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

否则,如果您至少知道所有人的名字,我建议在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

对于此脚本,您需要已经有了第二张工作表,其中第一行由人名组成

我不确定您是否考虑过使用透视表?是的,我考虑过,但透视表似乎无法提供所需的输出。像我一样,大约有12个人被分配到40-50家公司(多个人被分配到一家公司,而这个人在他的覆盖范围内有多家公司,基本上任何4-6个人都可以被分配到一家公司)。我需要的是,如果我在一个单元格中有一个人的名字,他工作的所有公司都将显示在他的名字下面。我不确定你的情况,但你是否考虑过使用透视表?是的,我考虑过,但透视表似乎无法提供所需的输出。像我一样,大约有12个人被分配到40-50家公司(多个人被分配到一家公司,而这个人在他的覆盖范围内有多家公司,基本上任何4-6个人都可以被分配到一家公司)。我需要的是,如果我在一个单元格中有一个人的名字,他正在工作的所有公司都会显示在他的名字下面谢谢你的帮助。我已经提供了我试图完成的图像链接。因为,我有多个可旋转的列,但不幸的是,这不起作用。我将给你一个代码尝试。代码工作起来很有魅力,尽管在我的例子中,我有两组表,一个在另一个之间有一个列间距,将尝试调整代码并完成输出。非常感谢much@Alex仅供参考,此代码将
Dim
i
j
作为
Variant
,而不是
Long
,谢谢您的帮助。我已经提供了我试图完成的图像链接。因为,我有多个可旋转的列,但不幸的是,这不起作用。我将给你一个代码尝试。代码工作起来很有魅力,尽管在我的例子中,我有两组表,一个在另一个之间有一个列间距,将尝试调整代码并完成输出。非常感谢much@Alex仅供参考,此代码将
Dim
i
j
作为
变体
,而不是