有大约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
可能我的例子举的不好,行标题不是年份,是产品代码,有上千个;纵标题是二维码代码,也有上千个...我改了例子,图片换掉了,麻烦您再看下,谢谢~~
追答在成品表中,建立一个产品码和源数据的对应表,假设在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)