如何在Google Sheet中关联两张表生成扩展表T3?
实现方案:将T2按T1销售员数量扩展生成T3
Google Sheet 公式实现
方法1:使用QUERY函数(模拟SQL JOIN)
假设:
- T1表:A列=公司名称,B列=销售员
- T2表:A列=公司名称,B、C列=公司元数据
在T3表的A1单元格输入以下公式,自动生成关联后的扩展表:
=QUERY({T1!A:B, T2!A:C}, "SELECT Col1, Col2, Col3, Col4 WHERE Col1 IS NOT NULL", 1)
- 逻辑:通过数组
{T1!A:B, T2!A:C}合并两张表,再用QUERY语句筛选出T1的公司、销售员,以及T2对应的元数据,1表示第一行是表头。
方法2:使用ARRAYFORMULA+VLOOKUP
如果需要自定义列顺序,可使用以下公式:
=ARRAYFORMULA({T1!A:B, VLOOKUP(T1!A:A, T2!A:C, {2,3}, FALSE)})
- 逻辑:用VLOOKUP根据T1的公司名称批量匹配T2的元数据,ARRAYFORMULA实现整列自动计算,最后合并T1的销售员列与匹配到的元数据。
VBA 实现方案(适用于Excel)
打开Excel的VBA编辑器(按Alt+F11),插入模块后粘贴以下代码:
Sub GenerateExpandedTable() Dim wsT1 As Worksheet, wsT2 As Worksheet, wsT3 As Worksheet Dim lastRowT1 As Long, matchRow As Long Dim currentCompany As String Dim targetRow As Long ' 指定工作表(根据实际表名修改) Set wsT1 = ThisWorkbook.Worksheets("T1") Set wsT2 = ThisWorkbook.Worksheets("T2") Set wsT3 = ThisWorkbook.Worksheets.Add(After:=wsT2) wsT3.Name = "T3" ' 复制表头到T3 wsT1.Range("A1:B1").Copy Destination:=wsT3.Range("A1") wsT2.Range("B1:C1").Copy Destination:=wsT3.Range("C1") targetRow = 2 ' 从第二行开始写入数据 ' 获取T1的最后一行 lastRowT1 = wsT1.Cells(Rows.Count, "A").End(xlUp).Row ' 遍历T1每一行数据 For i = 2 To lastRowT1 currentCompany = wsT1.Cells(i, "A").Value ' 在T2中精准匹配公司名称 matchRow = wsT2.Columns("A").Find(What:=currentCompany, LookIn:=xlValues, LookAt:=xlWhole).Row ' 写入T1的公司和销售员数据 wsT3.Cells(targetRow, "A").Value = wsT1.Cells(i, "A").Value wsT3.Cells(targetRow, "B").Value = wsT1.Cells(i, "B").Value ' 写入T2对应的元数据 wsT3.Cells(targetRow, "C").Value = wsT2.Cells(matchRow, "B").Value wsT3.Cells(targetRow, "D").Value = wsT2.Cells(matchRow, "C").Value targetRow = targetRow + 1 Next i End Sub
- 说明:代码会自动创建T3表,复制表头后遍历T1的每一条记录,匹配T2中对应公司的元数据,最终将每一位销售员与对应公司的元数据逐行写入T3。
内容的提问来源于stack exchange,提问作者Vitomir
相关产品推荐
相关产品推荐

