2014-02-03 5 views
0

Я новичок в 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, в то время как другой лист (называемый «withLayers») содержит оставшиеся слои (т.е. все, кроме первого) каждого из Program ID.

То, что я хотел бы сделать, это поиск, который перебирает каждый Program ID в noLayers листе, и находит его в withLayers листе, то он должен вырезать или скопировать строку и вставьте его ниже соответствующего Program ID в «noLayers» Рабочий лист.

Имейте в виду, что в листе withLayers может быть несколько экземпляров одного и того же Program ID, поскольку одна программа может иметь более 2-х слоев.

Любая помощь с этим была бы высоко оценена. Спасибо!

+3

Я не понимаю, почему вы просто не добавляете один лист в другой и не сортируете. – pnuts

+0

Да, я согласен с @pnuts. это самый простой способ. есть ли какая-то причина, в частности, почему вы не можете этого сделать? – L42

ответ

0

Хмм, я не могу точно вспомнить, как это сделать в VBA, это было какое-то время. Но я могу дать вам общую структуру, и, возможно, кто-то может экстраполировать.

Вам нужно создать массив ячеек (как правило, удерживаемый в объекте Range, если я помню). И назначьте его значение как диапазон ячеек в PROGRAM_ID на noLayers. Затем вам нужно установить другой Range для покрытия столбца PROGRAM_ID на листе withLayers. Для простоты назовем их «layersRange» и «noLayersRange».

Затем вам нужно настроить пару для каждой петли, чтобы проходить через них. Если вы сопоставляете это с оператором if и инструкцией insert, вы должны это сделать.

PSUEDOCODE:

К сожалению, я знаю, что это ужасно псевдокод ... Но основной тэк является то, что вы пробегаем по всем ячейкам в колонке на первой странице, и на каждый ячейку вы перебираете все ячейки на втором листе и, если вы что-то найдете, вы вставляете ее прямо над текущей ячейкой на первом листе. (Обратите внимание: если вы введете его ниже, вы добавите в цикл, который вы итерируете, что вызовет бесконечный цикл вставок, поскольку процесс неоднократно ставит копию того, что он находит под собой, перемещается в эту ячейку, затем делает такой же процесс, до бесконечности.)

Надеюсь, что это, по крайней мере, поможет вам начать.

Смежные вопросы