循环遍历列以查找其他工作表中的匹配项以及剪切/粘贴匹配行

时间:2014-02-03 20:24:39

标签: excel excel-vba vba

我是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个以上的图层。

对此的任何帮助都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,我不记得究竟如何在VBA中做到这一点,已经有一段时间了。但我可以给你一般的结构,也许有人可以推断。

你需要创建一个单元格数组(如果我记得的话,通常保存在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

抱歉,我知道这是一个糟糕的伪代码......但基本的问题是你在第一页的列中循环遍历所有单元格,并且在每个单元格上循环遍历所有单元格第二张纸,如果找到任何内容,则将其插入第一张纸上当前单元格的正上方。 (请注意:如果你在下面插入它,你将添加到你正在迭代的循环中,这会导致无限循环的插入,因为该过程重复地放置它在自身下方找到的内容的副本,移动到该单元格,然后执行同样的过程,无限期。)

希望这至少可以让你开始。