Vba 根据第一张工作表列中的日期搜索单独的特定工作表
所以我不知道从哪里开始,所以我会把这个扔出去,问一下方向 我有一本不少于40张工作表的工作手册。 在我的原始(姓名)表中,我有3栏,城市,日期,“待填写” 在接下来的30张表格中,我有2列city,value(这些表格中的每一张都以月份的日期命名…(1,2,3,4等) 我需要根据城市匹配和日期列day匹配工作表日期,将表1-30中的“值”放入“待填写”列 例如: 原始表格包含:Vba 根据第一张工作表列中的日期搜索单独的特定工作表,vba,excel,Vba,Excel,所以我不知道从哪里开始,所以我会把这个扔出去,问一下方向 我有一本不少于40张工作表的工作手册。 在我的原始(姓名)表中,我有3栏,城市,日期,“待填写” 在接下来的30张表格中,我有2列city,value(这些表格中的每一张都以月份的日期命名…(1,2,3,4等) 我需要根据城市匹配和日期列day匹配工作表日期,将表1-30中的“值”放入“待填写”列 例如: 原始表格包含: City Date "to be filled in" C1 01012000
City Date "to be filled in"
C1 01012000 (missing)
C1 01032000 (missing)
C2 01012000 (missing)
C2 01022000 (missing)
C3 01012000 (missing)
Sheets 1-30 look like so:
Sheet 1 has:
City Value
C1 5
C2 3
C3 1
Sheet 2 has:
City Value
C1 3
C2 10
C3 9
Sheet 3 has:
City Value
C1 1
C2 2
C3 2
City Date "to be filled in"
C1 01012000 5
C1 01032000 1
C2 01012000 3
C2 01022000 10
C3 01012000 1
因此,在运行VBA代码后,我的原始工作表应如下所示:
原始图纸现在包含:
City Date "to be filled in"
C1 01012000 (missing)
C1 01032000 (missing)
C2 01012000 (missing)
C2 01022000 (missing)
C3 01012000 (missing)
Sheets 1-30 look like so:
Sheet 1 has:
City Value
C1 5
C2 3
C3 1
Sheet 2 has:
City Value
C1 3
C2 10
C3 9
Sheet 3 has:
City Value
C1 1
C2 2
C3 2
City Date "to be filled in"
C1 01012000 5
C1 01032000 1
C2 01012000 3
C2 01022000 10
C3 01012000 1
因此,我需要根据日期列中的日期搜索工作表,在原始工作表中查找城市,一旦在正确的选项卡上找到城市,我需要调回该工作表/行中的值,并填充原始工作表中缺少的数据
我想用VBA来做,有点像vlookup,但不是,所以我有点困惑
谢谢你的建议。你不需要VBA。Excel的神奇公式会起作用。
此公式将首先使用以下公式提取日期/工作表编号:
IF(LEFT(MID(B2,IF(LEN(B2)=8,3,2),2),1)="0",RIGHT(MID(B2,IF(LEN(B2)=8,3,2),2),1),MID(B2,IF(LEN(B2)=8,3,2),2))
然后将其与“图纸”连接以创建图纸名称
CONCATENATE("Sheet",IF(LEFT(MID(B2,IF(LEN(B2)=8,3,2),2),1)="0",RIGHT(MID(B2,IF(LEN(B2)=8,3,2),2),1),MID(B2,IF(LEN(B2)=8,3,2),2)), "!A:B")
然后使用vlookup来查找值
=VLOOKUP(A2,间接的(连接(“表”),如果(左)中间(B2,如果(LEN(B2)=8,3,2),2),1)=“0”,
右(中间(B2,IF(LEN(B2)=8,3,2),2),1),中间(B2,IF(LEN(B2)=8,3,2),2)),
“!A:B”),对),2,错)
如果日期为1/1/2000
格式,而不是01012000
,请使用此公式
=VLOOKUP(A2,间接)(连接(“表”),如果(左)(文本(B2,“dd”),1)=“0”,
右(文本(B2,“dd”),1,文本(B2,“dd”),“!A:B”),对),2,错)
把这个公式放在C2单元格里,然后向下拖动
你会得到这样的结果
A B C D
-----------------------------------------------------------------
1 City Date "to be filled in" Formula used
-----------------------------------------------------------------
2 C1 01012000 5 =VLOOKUP(A2, INDIRECT( CONCATENATE("Sheet",IF(LEFT(MID(B2,IF(LEN(B2)=8,3,2),2),1)="0",
RIGHT(MID(B2,IF(LEN(B2)=8,3,2),2),1),MID(B2,IF(LEN(B2)=8,3,2),2)), "!A:B"),TRUE ),2,FALSE)
3 C1 01032000 1 =VLOOKUP(A3, INDIRECT( CONCATENATE("Sheet",IF(LEFT(MID(B3,IF(LEN(B3)=8,3,2),2),1)="0",
RIGHT(MID(B3,IF(LEN(B3)=8,3,2),2),1),MID(B3,IF(LEN(B3)=8,3,2),2)), "!A:B"),TRUE ),2,FALSE)
4 C2 01012000 3 =VLOOKUP(A4, INDIRECT( CONCATENATE("Sheet",IF(LEFT(MID(B4,IF(LEN(B4)=8,3,2),2),1)="0",
RIGHT(MID(B4,IF(LEN(B4)=8,3,2),2),1),MID(B4,IF(LEN(B4)=8,3,2),2)), "!A:B"),TRUE ),2,FALSE)
5 C2 01022000 10 =VLOOKUP(A5, INDIRECT( CONCATENATE("Sheet",IF(LEFT(MID(B5,IF(LEN(B5)=8,3,2),2),1)="0",
RIGHT(MID(B5,IF(LEN(B5)=8,3,2),2),1),MID(B5,IF(LEN(B5)=8,3,2),2)), "!A:B"),TRUE ),2,FALSE)
6 C3 01012000 1 =VLOOKUP(A6, INDIRECT( CONCATENATE("Sheet",IF(LEFT(MID(B6,IF(LEN(B6)=8,3,2),2),1)="0",
RIGHT(MID(B6,IF(LEN(B6)=8,3,2),2),1),MID(B6,IF(LEN(B6)=8,3,2),2)), "!A:B"),TRUE ),2,FALSE)
抱歉,它如何知道要查看哪张表?公式的这一部分
间接(连接(“表”,如果(左)(中间(B2,如果(LEN(B2)=8,3,2),2),1)=“0”,右(中间(B2,如果(LEN(B2)=8,3,2),2),1),中间(B2,如果(LEN(B2)=8,3,2),2)),“!A:B”),TRUE)
将告诉您要查看哪张表。基本上我从B列(日期)中提取了日期号然后连接创建一个工作表引用。如果你想通过“公式->计算公式”来理解公式,你就会明白我的意思。使用日期单元格上的day函数来获取我们不需要搜索的工作表名称是否同样容易?是的,但我使用了这种方法,因为我认为你在这个表单中有日期在01012000
您的“日期”栏中,请参阅我的更新,我已更新以处理正确的日期格式。