Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在列中循环查找其他工作表中的匹配项,并剪切/粘贴匹配行_Excel_Vba - Fatal编程技术网

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;字段 例如,我

我是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
我的问题是信息被分成两个工作表,一个工作表(称为
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。这是最简单的方法。你有什么特别的理由不能那样做吗?