Vba 根据第一张工作表列中的日期搜索单独的特定工作表

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

所以我不知道从哪里开始,所以我会把这个扔出去,问一下方向

我有一本不少于40张工作表的工作手册。 在我的原始(姓名)表中,我有3栏,城市,日期,“待填写”

在接下来的30张表格中,我有2列city,value(这些表格中的每一张都以月份的日期命名…(1,2,3,4等)

我需要根据城市匹配和日期列day匹配工作表日期,将表1-30中的“值”放入“待填写”列

例如: 原始表格包含:

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
您的“日期”栏中,请参阅我的更新,我已更新以处理正确的日期格式。