2015-10-06 13 views
0

Я пытаюсь написать макрос, который будет использовать оператор if для копирования данных из одного места в другое.VBA Copy Смежные ячейки

Esentially:

Если Range.Cells (I, J) .Value = "Hello" Затем скопируйте три ячейки справа от слова "Hello"

Я думаю, что я, возможно, придется использовать Смещение? Который я не очень опытный, любая помощь будет принята с благодарностью! Спасибо!

Edit:

Это то, что я для моего кода:

For i = 1 To danesRange.Rows.Count 
For j = 1 To danesRange.Columns.Count 
If danesRange.Cells(i, j).Value = "Ins" Then 
    danesRangevalues.Cells(i, j).Copy 
End If 
    Next j 
Next i 

Я знаю, как скопировать и вставить с помощью VBA, но я не знаю, как скопировать и вставить неизвестный диапазон, потому что Я не знаю точно, где будет диапазон этих трех ячеек, это зависит от того, где падает значение «INS». То, что я до сих пор, будет копировать только соседнюю ячейку, а не все три.

+2

Где код, который вы создали до сих пор? Записать макрос, чтобы скопировать три ячейки (на отдельный рабочий лист?), Чтобы дать вам начало! – MiguelH

+0

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

+0

Где вы пытаетесь это выразить? У вас уже есть ссылка на столбец j, поэтому вы можете просто установить danesRange.Cells (i, j + 3) = danesRange.Cells (i, j) .Value' или что-то в этом роде. Или соедините их вместе, если есть несколько ячеек. Хороший пример был бы полезен. – Liss

ответ

1

Собственно, Offset с Resize - вот что вам нужно здесь.

Так это изменить:

If danesRange.Cells(i, j).Value = "Ins" Then 
     danesRangevalues.Cells(i, j).Copy 
    End If 

к этому:

If danesRange.Cells(i, j).Value = "Ins" Then danesRange.Cells(i, j).Offset(,1).Resize(1, 3).Copy 

Таким образом, смещает danesRange.Cells(i,j) на один столбец, а затем сделать выбор длиной 3 колонны.

Я согласен с комментарием Ральфа. Способ, которым это настроено, похоже, будет копировать избыточные данные по столбцам.

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