#excel #spreadsheet #copy-paste #excel-2003 #vba
#excel #электронная таблица #копировать-вставить #excel-2003 #vba
Вопрос:
Что я пытаюсь сделать, это просмотреть каждый заголовок на одном листе (заголовки расположены в формате «1: 1»), найти заголовок под названием «Код дилера», затем скопировать весь этот столбец на другой лист.
Моя текущая проблема заключается в том, что в столбце Код дилера есть пробелы, поэтому выбор останавливается. Я бы работал снизу листа вверх, чтобы избежать этого, но поскольку ячейка заголовка хранится в адресе, я не могу извлечь букву столбца.
Есть способ, которым я могу включить пробелы в свой выбор или извлечь букву столбца и двигаться вверх?
Если я подхожу к проблеме очень неудобно, пожалуйста, дайте мне знать! Я хочу узнать как можно больше.
Ниже приведен мой код. Помощь была бы высоко оценена.
'Copies over Dealer Codes
With Sheets("Raw Data").Range("1:1")
Set c = .Find("Dealer Code", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Sheets("Raw Data").Range(firstAddress).Select
Sheets("Raw Data").Range(Selection, Selection.End(xlDown)).Select
Selection.Copy (Sheets("Copied Data").Range("A1"))
End With
Ответ №1:
Попробуйте что-то вроде этого:
Sub Test()
With ActiveSheet.Range("1:1")
Set c = .Find("Dealer Code")
Dim column As String
column = Mid(c.Address, 2, 1)
Range(column amp; ":" amp; column).Select
End With
End Sub
При этом выбирается весь столбец, но его легко изменить, чтобы выбрать элементы со 2-й строки до конца. Поскольку у вас есть пробелы, что-то вроде Range(column amp; "2:" amp; column amp; Range(column amp; "65536").End(xlUp).Row).Select
работает, но, признаю, немного запутанно.
Другие решения могут быть более оптимальными.
Комментарии:
1. Еще один вопрос. Если я введу код дважды, как показано ниже, я получу «Переменная объекта или с неустановленной переменной блока», есть идеи, почему?
2. @AdamY Вам не нужно использовать оператор With дважды, поскольку он уже установлен в первый раз. Вы даже можете использовать
set c = ActiveSheet.Range("1:1").Find("Dealer Code")
и избавиться отWith/End With
строк (в примере, который я рассматривал, выполнялось гораздо больше операций с объектом Range, поэтому в этом случае это было более выгодно).3. @AdamY На самом деле, если у вас есть N объектов для поиска, вместо повторения кода N вам следует заставить подпрограмму принимать две строки, одну для заголовка для поиска, а другую для диапазона назначения… просто мысль.
4. У меня получилось. Моя проблема заключалась в том, что я оставил его как «код» в ActiveSheet. Диапазон («1:1») «code» вместо «code» С таблицей, фактически используемой в проекте. Диапазон («1:1») ‘code’ Спасибо за всю помощь!