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