我是VBA excel的新手,需要执行以下操作:
我在同一工作簿中有两张相同的信息。两个工作表都有Program ID
标识一行数据。对于每个Program ID
,可能存在不同的"层"。这些"层"将由彼此具有非常相似信息的行(相同Program ID
)表示,唯一改变的是Layer #
字段。
例如,我可以拥有以下内容:
PROGRAM ID NAME LAYER
1234 test 1
1234 test 2
1234 test 3
我的问题是,信息被分成两个工作表,一个工作表(称为noLayers
)只包含的每个Program ID
,而另一工作表(称为#34中的第一层; withLayers& #34;)包含每个Program ID
的剩余层(即除第一层之外的所有层)。
我想要做的是搜索循环遍历Program ID
工作表中的每个noLayers
并在withLayers
工作表中找到它,然后它应该剪切或复制行和将其粘贴到" noLayers"中相应的Program ID
下方工作表。
请注意,Program ID
工作表中可能存在多个相同withLayers
的实例,因为单个程序可能包含2个以上的图层。
对此的任何帮助都将非常感激。谢谢!
答案 0 :(得分:0)
你需要创建一个单元格数组(如果我记得的话,通常保存在Range对象中)。并将其值分配为noLayers上PROGRAM_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
抱歉,我知道这是一个糟糕的伪代码......但基本的问题是你在第一页的列中循环遍历所有单元格,并且在每个单元格上循环遍历所有单元格第二张纸,如果找到任何内容,则将其插入第一张纸上当前单元格的正上方。 (请注意:如果你在下面插入它,你将添加到你正在迭代的循环中,这会导致无限循环的插入,因为该过程重复地放置它在自身下方找到的内容的副本,移动到该单元格,然后执行同样的过程,无限期。)
希望这至少可以让你开始。