Excel 在列中循环查找其他工作表中的匹配项,并剪切/粘贴匹配行
我是VBA excel新手,需要执行以下操作:Excel 在列中循环查找其他工作表中的匹配项,并剪切/粘贴匹配行,excel,vba,Excel,Vba,我是VBA excel新手,需要执行以下操作: PROGRAM ID NAME LAYER 1234 test 1 1234 test 2 1234 test 3 我在同一个工作簿中有两张具有相似信息的工作表。两个工作表都有一个标识一行数据的程序ID。对于每个程序ID,可能有不同的“层”。这些“层”将由彼此具有非常相似信息的行表示(相同的程序ID),唯一改变的是层35;字段 例如,我
PROGRAM ID NAME LAYER
1234 test 1
1234 test 2
1234 test 3
我在同一个工作簿中有两张具有相似信息的工作表。两个工作表都有一个标识一行数据的程序ID
。对于每个程序ID
,可能有不同的“层”。这些“层”将由彼此具有非常相似信息的行表示(相同的程序ID
),唯一改变的是层35;
字段
例如,我可以有以下内容:
PROGRAM ID NAME LAYER
1234 test 1
1234 test 2
1234 test 3
我的问题是信息被分成两个工作表,一个工作表(称为noLayers
)只包含每个程序ID
的第一层,而另一个工作表(称为“withLayers”)包含每个程序ID
的其余层(即除第一层外的所有层)
我想做的是在noLayers
工作表中循环搜索每个Program ID
,并在withLayers
工作表中找到它,然后它应该剪切或复制该行,并将其粘贴到“noLayers”工作表中相应的Program ID
下面
请记住,在withLayers
工作表中可能有多个相同程序ID的实例,因为单个程序可能有两个以上的层
在此方面的任何帮助都将不胜感激。谢谢大家! 嗯,我想不起在VBA中如何做到这一点,已经有一段时间了。但我可以给你大致的结构,也许有人可以推断
您需要创建一个单元格数组(如果我记得的话,通常保存在范围对象中)。并将其值指定为noLayers上程序ID中的单元格范围。然后需要设置另一个范围,以覆盖withLayers工作表中的PROGRAM_ID列。为了简单起见,我们将它们称为“layersRange”和“noLayersRange”
然后,您需要为每个循环设置一对循环来迭代它们。如果将其与If语句和insert语句配对,您应该能够做到这一点
伪代码:
Dim layersRange as Range
Dim noLayersRange as Range
set layersRange = <column A on layers page>
set noLayersRange = <column A on noLayers page>
foreach (noLayers in noLayersRange)
foreah (hasLayers in LayerseRange)
if(nolayers.value = haslayers.valye)
nolayers.upone.insert(hasLayers.wholeRow) 'or something like that
end if
end loop
end loop
将图层范围变暗为范围
Dim noLayersRange作为范围
设置图层范围=
设置noLayersRange=
foreach(noLayers范围内的noLayers)
foreah(图层范围内有图层)
if(nolayers.value=haslayers.valye)
nolayers.upone.insert(hasLayers.wholeRow)或类似的东西
如果结束
端环
端环
对不起,我知道这是很糟糕的伪代码。。。但是基本的jist是,你在第一页的列中循环所有的单元格,在每个单元格中,你在第二页的所有单元格中循环,如果你发现了什么,你就把它插入第一页当前单元格的正上方。(请注意:如果您在下面插入它,您将添加到您正在迭代的循环中,这会导致无限次的插入循环,因为该过程会重复地将找到的内容的副本放在自己下面,移动到该单元格中,然后无限次地执行相同的过程。)
希望这至少能让你开始 是的,我同意@pnuts。这是最简单的方法。你有什么特别的理由不能那样做吗?