Копировать-вставить с l oop, разные диапазоны друг под другом - PullRequest
0 голосов
/ 14 февраля 2020

Я тихий новичок в VBA. Я хотел бы иметь код, который копирует до 200 различных диапазонов (B4: B48, C4: C48, D4: D48 ... GT4: GT48) в ячейку (B50) и помещает различные диапазоны друг под другом.

Итак, первые диапазоны (B4: B48) следует поместить в ячейку B50, второй диапазон (C4: C48) - в ячейку B95 et c.

Полагаю, этот код понадобится все oop, однако: не все 200 диапазонов заполнены, если есть пустой диапазон, то этот диапазон не нужно копировать. Каждый диапазон может содержать разное количество предметов, хотя максимальное разное количество предметов всегда составляет 42.

Спасибо, если вы можете помочь мне в дальнейшем!

Я добавил пример, цвета просто сделать его более наглядным, но в vba-коде он не нужен.

enter image description here

1 Ответ

0 голосов
/ 17 февраля 2020

Сначала вам нужно будет скопировать каждый свой диапазон по одному.

Если ваши диапазоны B4:B48, C4:C48,D4:D48...GT4:GT48 следуют правилу, как всегда один столбец справа, тогда вы можете использовать al oop, проходя по всем столбцам , B - это столбец № 2, а GT - это столбец № 202. Таким образом, вы можете l oop, как

Dim iCol As Long
For iCol = 2 To 202
    'your code here
Next iCol

. Диапазоны, например B4:B48, можно динамически записать как

ws.Range(ws.Cells(4, iCol), ws.Cells(48, iCol))

, что означает, что если iCol = 2, то Cells(4, iCol) равно B4, а Cells(48, iCol) равно B48, поэтому оно представляет диапазон между этими двумя ячейками. На следующей итерации Next iCol увеличится на iCol на единицу, поэтому та же строка представляет столбец C сейчас.

Обратите внимание, что в приведенном выше коде ws представляет ваш рабочий лист, вы должны указать это в начиная с того, что вы можете использовать этот ярлык ws:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("YourSheetName")

Вам также нужно будет найти последнюю использованную ячейку в столбце B, чтобы определить место, где вам нужно вставить свой диапазон. Хороший способ сделать это:

Dim LastUsedRow As Long
LastUsedRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

Так что теперь ваша следующая свободная строка в столбце B - LastUsedRow + 1, и это то место, куда вы должны вставить.

Попробуйте его самостоятельно, сделайте небольшое исследование, если вы застряли. Я дал вам многое из того, что вам нужно. Остальные должны быть действительно базовыми c вещами, которые вы можете легко выяснить, прочитав некоторые базовые c руководства или google.

Две последние вещи, которые не дадут вам столкнуться с общими проблемами:

  1. Я рекомендую всегда активировать Option Explicit: в редакторе VBA go до Инструменты Параметры Требуется объявление переменной и должным образом объявите все свои переменные.

  2. Возможно, вам будет полезно прочитать Как избежать использования Select в Excel VBA . Следует избегать использования .Select или .Activate любой ценой. Это замедляет все много и ваш код легко столкнется с проблемами рано или поздно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...