Dim exam As Range 'Сюда назначаю список ячеек не по порядку идущих Dim ws As Worksheet Set ws = Workbooks("Пример.xlsm").Worksheets("Sheet1") Dim c%: c = 9 ' Тут указываю первую строку вместо 9 тут стоит rng.row которая прилетала с другой функции ( Не суть) Dim mm(1 To 17) As Range 'Сюда заливаю адреса строк по порядку Set mm(1) = ws.Range("A" & c) 'Мне нужна колонка А и строка которая найдена была другой функцией в данном примере 9 For i = 2 To 17 ' Тут по порядку циклом назначение в массив Set mm(i) = ws.Range("A" & c + i - 1) Next i Set exam = Application.Union(mm(1), mm(4), mm(3)) 'Как эту строку записать что-то типа ws.[mm(1),mm(4),mm(3)] ? Лист и номера назначенных строк в колонке А их всегда больше двух ' Просто проблема в том что я глуп и сколько не читаю понять не могу. Union иногда пропускает первый диапазон( Почему не знаю) ' Если просто указывать ws.[A9,A12,A11] все работает, а с массивом не получается помогите пожалуйста.
[/vba]
Добрый день уважаемые форумчане.
Вот код из модуля файла примера.
[vba]
Код
Dim exam As Range 'Сюда назначаю список ячеек не по порядку идущих Dim ws As Worksheet Set ws = Workbooks("Пример.xlsm").Worksheets("Sheet1") Dim c%: c = 9 ' Тут указываю первую строку вместо 9 тут стоит rng.row которая прилетала с другой функции ( Не суть) Dim mm(1 To 17) As Range 'Сюда заливаю адреса строк по порядку Set mm(1) = ws.Range("A" & c) 'Мне нужна колонка А и строка которая найдена была другой функцией в данном примере 9 For i = 2 To 17 ' Тут по порядку циклом назначение в массив Set mm(i) = ws.Range("A" & c + i - 1) Next i Set exam = Application.Union(mm(1), mm(4), mm(3)) 'Как эту строку записать что-то типа ws.[mm(1),mm(4),mm(3)] ? Лист и номера назначенных строк в колонке А их всегда больше двух ' Просто проблема в том что я глуп и сколько не читаю понять не могу. Union иногда пропускает первый диапазон( Почему не знаю) ' Если просто указывать ws.[A9,A12,A11] все работает, а с массивом не получается помогите пожалуйста.
Нужно указываться адреса строк в столбце динамически. При явном указании все работает например ws.[A3,A1,A9] - Так работает, и все ок. Но номер строки меняется постоянно. Я нахожу шапку и от нее уже назначаю адреса строк.
Нужно указываться адреса строк в столбце динамически. При явном указании все работает например ws.[A3,A1,A9] - Так работает, и все ок. Но номер строки меняется постоянно. Я нахожу шапку и от нее уже назначаю адреса строк.Amon
Debug.Print WorksheetFunction.Sum(Worksheets(1).Range(addr)) '= 9 - как раз случай ws.Range("A1,C1,E1") = ws.[A1,C1,E1] Debug.Print WorksheetFunction.Sum(Worksheets(1).[A1,C1,E1]) '= 9
Debug.Print Application.Evaluate("=SUM(A1,C1,E1)") '= 9 Debug.Print [=SUM(A1,C1,E1)] '= 9 End Sub
[/vba] Мне кажется, Ваши случаи - те, в которых можно использовать аргумент в виде текстовой строки.
Amon, выбирайте что по душе: [vba]
Код
Sub aaa() Dim rng As Range Dim addr As String
Range("A1") = 1 Range("C1") = 3 Range("E1") = 5
Set rng = Union(Range("A1"), Range("C1"), Range("E1")) Debug.Print WorksheetFunction.Sum(rng) '= 9
Debug.Print WorksheetFunction.Sum(Worksheets(1).Range(addr)) '= 9 - как раз случай ws.Range("A1,C1,E1") = ws.[A1,C1,E1] Debug.Print WorksheetFunction.Sum(Worksheets(1).[A1,C1,E1]) '= 9
Debug.Print Application.Evaluate("=SUM(A1,C1,E1)") '= 9 Debug.Print [=SUM(A1,C1,E1)] '= 9 End Sub
[/vba] Мне кажется, Ваши случаи - те, в которых можно использовать аргумент в виде текстовой строки.Gustav
Gustav, Все равно я хоть убей не понимаю как назначить диапазон Что я делаю не так подскажите пожалуйста? [vba]
Код
Sub nasd() Dim exam As Range Dim ws As Worksheet Set ws = Workbooks("Пример.xlsm").Worksheets("Sheet1") Dim c%: c = 9 Dim mm(1 To 17) As Range Set mm(1) = ws.Range("A" & c)
For i = 2 To 17 Set mm(i) = ws.Range("A" & c + i - 1) Next i Stop Set rng = Union(mm(3), mm(1), mm(17), mm(4)) Dim addr$:addr = rng.Address(False, False) 'Set exam = ws & "." & "[" & addr & "]" 'Так объект не поддерживает данный метод 'Set exam = addr 'Type missmach End Sub
[/vba]
[vba]
Код
Set rng = Union(mm(3), mm(1), mm(17), mm(4)) ' И вот опять.. тут 4 диапазона A11,A9,A25,A12 Dim addr$:addr = rng.Address(False, False) ' Но эта строка дает мне A9,A25,A11:A12 , а мне нужно использовать их именно в таком порядке как я написал
[/vba]
Gustav, Все равно я хоть убей не понимаю как назначить диапазон Что я делаю не так подскажите пожалуйста? [vba]
Код
Sub nasd() Dim exam As Range Dim ws As Worksheet Set ws = Workbooks("Пример.xlsm").Worksheets("Sheet1") Dim c%: c = 9 Dim mm(1 To 17) As Range Set mm(1) = ws.Range("A" & c)
For i = 2 To 17 Set mm(i) = ws.Range("A" & c + i - 1) Next i Stop Set rng = Union(mm(3), mm(1), mm(17), mm(4)) Dim addr$:addr = rng.Address(False, False) 'Set exam = ws & "." & "[" & addr & "]" 'Так объект не поддерживает данный метод 'Set exam = addr 'Type missmach End Sub
[/vba]
[vba]
Код
Set rng = Union(mm(3), mm(1), mm(17), mm(4)) ' И вот опять.. тут 4 диапазона A11,A9,A25,A12 Dim addr$:addr = rng.Address(False, False) ' Но эта строка дает мне A9,A25,A11:A12 , а мне нужно использовать их именно в таком порядке как я написал
boa, С одни разобрались. Как теперь назначить диапазон ? [vba]
Код
Set exam = ws.Range(addr)
[/vba] Заработало вроде спасибо большое. Дальнейшие действия со строкой - Список этих ячеек необходим для прохождения теста по ним. нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.
boa, С одни разобрались. Как теперь назначить диапазон ? [vba]
Код
Set exam = ws.Range(addr)
[/vba] Заработало вроде спасибо большое. Дальнейшие действия со строкой - Список этих ячеек необходим для прохождения теста по ним. нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.Amon
Сообщение отредактировал Amon - Пятница, 28.09.2018, 12:12