VBA excel复制粘贴

问题描述 投票:-3回答:1

enter image description here

嗨,我是Excel VBA的新手。首先,我想在满足条件时复制数据(复制数据参考144)其次,比较单元格,如果是IT操作(表1)到IT操作(表2),则将价格(金钱)复制到列F.如果变量为no,则留空。

excel vba excel-vba
1个回答
0
投票

这可以用公式来完成。这是一种考虑填充F列的方法,通过匹配E(144 Total)中最后一行给出的数字,列E中匹配项的价格;在这种情况下,我将假设是E10

然后你拖下来的F1总公式是:

=IFERROR(IFERROR(VLOOKUP(E1,INDIRECT(CELL("address",OFFSET($H$1,MATCH(1*LEFT($E$10,FIND(" ",TRIM($E$10),1)-1),$G:$G,0)-1,,1,1))&":"&CELL("address",OFFSET($I$1,MATCH($E$10,$G:$G,0)-1,,1,1))),2,FALSE),VLOOKUP(E1,G:I,3,FALSE)),"")

步骤:

提取感兴趣的数量,例如144,并使用以下方法删除任何尾随/前导空格:

LEFT($E$10,FIND(" ",TRIM($E$10),1)-1)

找到此值所在的行,因为这将是此数字的查找范围的第一行。 *1将文本转换为数字。

MATCH(1*LEFT($E$10,FIND(" ",TRIM($E$10),1)-1),$G:$G,0) 

这给出了第9行。

我们可以使用更简单的东西来找到范围的最后一行,其中包含144 Total

MATCH($E$10,$G:$G,0)

这给出了第15行。所以我们知道144的数据位于第9行和第15行之间。

我们可以把它变成一个范围,用于VLOOKUPINDIRECTOFFSET

=CELL("address",OFFSET($G$1,MATCH(1*LEFT($E$10,FIND(" ",TRIM($E$10),1)-1),$G:$G,0)-1,,1,1))&":"&CELL("address",OFFSET($H$1,MATCH($E$10,$G:$G,0)-1,,1,1))

这给了我们$G$9:$H$15。注意调整-1,将OFFSET放回右行,并且OFFSET启动单元格位于不同的列中以提供VLOOKUP所需的列。

所以我们现在可以查找E列值,例如Enhancement,在我们新定义的范围内,可通过INDIRECT访问:

=VLOOKUP(E1,INDIRECT(CELL("address",OFFSET($H$1,MATCH(1*LEFT($E$10,FIND(" ",TRIM($E$10),1)-1),$G:$G,0)-1,,1,1))&":"&CELL("address",OFFSET($I$1,MATCH($E$10,$G:$G,0)-1,,1,1))),2,FALSE)

这就是说VLOOKUP(E1,$G$9:$H$15,2,FALSE)即从price中指定的项目范围内获取E1列。

如果没有找到,即返回#N/A,我们可以使用它来首先检查这是否是因为包含144 Total的合并单元格;其中值实际上在G列中而不是H,并使用IFERROR来表示,如果在$G$9:$H$15中找不到,则使用列G:I尝试匹配并返回第3列。

使用priorLookup作为占位符的伪公式,对于上述步骤中描述的公式,如下所示:

 IFERROR(priorLookup, VLOOKUP(E1,G:I,3,FALSE))

如果这仍然返回#N/A,我们知道该值不存在,我们应该返回""。我们可以用另一个IFERROR处理这个:

 IFERROR(IFERROR(priorLookup, VLOOKUP(E1,G:I,3,FALSE)),"")

所以给我们开头说明的整个公式。

这里用于表格:

Formula in sheet

© www.soinside.com 2019 - 2024. All rights reserved.