Макрос Excel - игнорировать заголовки столбцов? - PullRequest
0 голосов
/ 20 июля 2011

Макрос Excel у меня выглядит следующим образом:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim i&, j&, k&, LR_A&, LR_B&, LR_C&, count&

LR_A = Range("A" & Rows.count).End(xlUp).Row
LR_B = Range("B" & Rows.count).End(xlUp).Row
LR_C = Range("C" & Rows.count).End(xlUp).Row
count = 1

For i = 1 To LR_A
  For j = 1 To LR_B
     For k = 1 To LR_C
        Range("D" & count).Value = Range("A" & i).Value
        Range("E" & count).Value = Range("B" & j).Value
        Range("F" & count).Value = Range("C" & k).Value
        count = count + 1
     Next k
  Next j
Next i
Application.ScreenUpdating = True
End Sub

Как видите, данные в столбцах A, B и C преобразуются в D, E и F.

Какой код мне нужно добавить, чтобы он игнорировал заголовки столбцов в A, B и C?Я искал вокруг, но не смог найти ответ.

Кроме того, как бы я изменил его, чтобы вместо того, чтобы переносить данные в D, E и F, он преобразовывал их в A, B и C на другом листе?

Это мой первый макрос, так что это довольно простые вопросы.

Заранее спасибо

1 Ответ

0 голосов
/ 21 июля 2011

Ответ на ваш вопрос

Чтобы избежать копирования заголовков, вы должны начинать свои циклы с индекса 2.
Чтобы скопировать значения в другой Worksheet, вам нужно вызвать его в вашем Range.

For i = 2 To LR_A
  For j = 2 To LR_B
     For k = 2 To LR_C
        Sheets("My other ws").Range("D" & count).Value = Range("A" & i).Value
        Sheets("My other ws").Range("E" & count).Value = Range("B" & j).Value
        Sheets("My other ws").Range("F" & count).Value = Range("C" & k).Value
        count = count + 1
     Next k
  Next j
Next i

Может быть, лучший способ справиться с этим делом

Цикл по диапазону с использованием индекса может быть очень медленным.
Я советую вам взглянуть на эту ссылку: http://www.ozgrid.com/VBA/VBALoops.htm, где автор объяснил более быстрые способы обхода диапазонов.

Некоторые советы

Посмотрите на Excel SpecialCells, как описано здесь .
Например, в вашем случае вы можете попытаться использовать ActiveSheet.UsedRange вместо поиска последней использованной строки.

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