excel如何自动匹配行和列相对应的标题,自动引用单元格数值?

有大约30个源数据表(sheet1\sheet2等等),自动引用源数据表,得到成品格式要求的数值;因为源数据表太多,用vlookup太麻烦;用index和match的话,要先确定源数据表行和列的单元格位置,没法自动引用,不知有什么好的函数;
行和列都有上千个代码的...举例:即B14如何快速等于数值4(当成品表中的行标题是产品码1,列标题是张三时,B14等于4,否则等于0)

如果是我遇到这样的情况,我会把这些无数的明细表合并为下图这样的一个表:

这样就只从这样的一个表里面检索数据,公式非常简单,可以使用SUMIFS函数,甚至可以直接透视得到结果。


合并的过程可以下面的VBA代码:

sub 合并所有表()

    dim rlt(1 to 60000, 1 to 3), arr, i, j,k, st as worksheet

    rlt(1,1)="姓名"

    rlt(1,2)="年度"

    rlt(1,3)="数值"

    k=1

    for each st in worksheets

        arr=st.usedrange

        for  i=2 to ubound(arr)

            for j=2 to ubound(arr,2)

                if (arr(i,j)<>"" then

                    k=k+1

                    rlt(k,1)=arr(i,1)

                    rlt(k,2)=arr(1,j)

                    rlt(k,3)=arr(i,j)

                end if

            next j

        next i

    next st

    workbooks.add

    activesheet.cells(1,1).resize(k,3)=rlt

end sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-02-04
在成品表的B2单元格输入以下公式,然后向右向下填充公式
=IFERROR(VLOOKUP($A2,INDIRECT("Sheet"&LOOKUP(B$1,{2000,2003,2007……},ROW($1:$30))&"!A:F"),MATCH(B$1,INDIRECT("Sheet"&LOOKUP(B$1,{2000,2003,2007……},ROW($1:$30))&"!1:1"),0),0),0)
公式通过LOOKUP函数,根据B1年代返回对应的工作表名,通过INDIRECT函数引用对应工作表的数据区域,通过VLOOKUP函数返回相应的数据,匹配不到数据的通过IFERROR函数容错返回0。
公式中的{2000,2003,2007……}根据各个表的起始年代升序排列,ROW(1:30)返回对应表名Sheet后面的数值。追问

可能我的例子举的不好,行标题不是年份,是产品代码,有上千个;纵标题是二维码代码,也有上千个...我改了例子,图片换掉了,麻烦您再看下,谢谢~~

追答

在成品表中,建立一个产品码和源数据的对应表,假设在A50:B90单元格,

那么在成品表的B2单元格输入以下公式,然后向右向下填充公式

=IFERROR(VLOOKUP($A2,INDIRECT(VLOOKUP(B$1,$A$50:$B$90,2,0)&"!A:F"),MATCH(B$1,INDIRECT("VLOOKUP(B$1,$A$50:$B$90,2,0)&"!1:1"),0),0),0)

第2个回答  2021-02-04
不知道你还要不要同姓名的累加?用代码。