Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Список ячеек через запятую из переменных.(Несмежные) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Список ячеек через запятую из переменных.(Несмежные)
Amon Дата: Четверг, 27.09.2018, 15:59 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день уважаемые форумчане.

Вот код из модуля файла примера.

[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] все работает, а с массивом не получается помогите пожалуйста.
[/vba]
К сообщению приложен файл: 0120344.xlsm (18.6 Kb)
 
Ответить
СообщениеДобрый день уважаемые форумчане.

Вот код из модуля файла примера.

[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] все работает, а с массивом не получается помогите пожалуйста.
[/vba]

Автор - Amon
Дата добавления - 27.09.2018 в 15:59
StoTisteg Дата: Четверг, 27.09.2018, 16:57 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Это отрадно. А в чём состоит вопрос?


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеЭто отрадно. А в чём состоит вопрос?

Автор - StoTisteg
Дата добавления - 27.09.2018 в 16:57
Amon Дата: Четверг, 27.09.2018, 17:02 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Нужно указываться адреса строк в столбце динамически. При явном указании все работает например ws.[A3,A1,A9] - Так работает, и все ок. Но номер строки меняется постоянно. Я нахожу шапку и от нее уже назначаю адреса строк.
 
Ответить
СообщениеНужно указываться адреса строк в столбце динамически. При явном указании все работает например ws.[A3,A1,A9] - Так работает, и все ок. Но номер строки меняется постоянно. Я нахожу шапку и от нее уже назначаю адреса строк.

Автор - Amon
Дата добавления - 27.09.2018 в 17:02
StoTisteg Дата: Четверг, 27.09.2018, 17:17 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
А в чём проблема сделать динамический массив типа[vba]
Код
Dim cls() As Range
[/vba]и работать с ним?


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеА в чём проблема сделать динамический массив типа[vba]
Код
Dim cls() As Range
[/vba]и работать с ним?

Автор - StoTisteg
Дата добавления - 27.09.2018 в 17:17
Amon Дата: Четверг, 27.09.2018, 17:31 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Проблема в моих знаниях, точнее в их отсутствии.(
А как вывести список ячеек? ws.("cls(1),cls(2),cls(3)") ?


Сообщение отредактировал Amon - Четверг, 27.09.2018, 17:31
 
Ответить
СообщениеПроблема в моих знаниях, точнее в их отсутствии.(
А как вывести список ячеек? ws.("cls(1),cls(2),cls(3)") ?

Автор - Amon
Дата добавления - 27.09.2018 в 17:31
Gustav Дата: Четверг, 27.09.2018, 20:29 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
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
    
    addr = rng.Address(False, False)
    Debug.Print addr '= A1,C1,E1
    
    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]
Мне кажется, Ваши случаи - те, в которых можно использовать аргумент в виде текстовой строки.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение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
    
    addr = rng.Address(False, False)
    Debug.Print addr '= A1,C1,E1
    
    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
Дата добавления - 27.09.2018 в 20:29
Amon Дата: Пятница, 28.09.2018, 10:54 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
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]


Сообщение отредактировал Amon - Пятница, 28.09.2018, 11:02
 
Ответить
Сообщение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]

Автор - Amon
Дата добавления - 28.09.2018 в 10:54
boa Дата: Пятница, 28.09.2018, 11:40 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 559
Репутация: 167 ±
Замечаний: 0% ±

365
Amon,
так вы их так и собирайте, как хотите
[vba]
Код
Dim addr$: addr = mm(3).Address(False, False) & "," & _
                  mm(1).Address(False, False) & "," & _
                  mm(17).Address(False, False) & "," & _
                  mm(4).Address(False, False)
[/vba]
только зачем? не понятны дальнейшие действия с полученной строкой.


 
Ответить
СообщениеAmon,
так вы их так и собирайте, как хотите
[vba]
Код
Dim addr$: addr = mm(3).Address(False, False) & "," & _
                  mm(1).Address(False, False) & "," & _
                  mm(17).Address(False, False) & "," & _
                  mm(4).Address(False, False)
[/vba]
только зачем? не понятны дальнейшие действия с полученной строкой.

Автор - boa
Дата добавления - 28.09.2018 в 11:40
Amon Дата: Пятница, 28.09.2018, 12:11 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
boa, С одни разобрались.
Как теперь назначить диапазон ? [vba]
Код
Set exam = ws.Range(addr)  
[/vba] Заработало вроде спасибо большое.
Дальнейшие действия со строкой - Список этих ячеек необходим для прохождения теста по ним. нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.


Сообщение отредактировал Amon - Пятница, 28.09.2018, 12:12
 
Ответить
Сообщениеboa, С одни разобрались.
Как теперь назначить диапазон ? [vba]
Код
Set exam = ws.Range(addr)  
[/vba] Заработало вроде спасибо большое.
Дальнейшие действия со строкой - Список этих ячеек необходим для прохождения теста по ним. нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.

Автор - Amon
Дата добавления - 28.09.2018 в 12:11
Gustav Дата: Пятница, 28.09.2018, 14:08 | Сообщение № 10
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.

[vba]
Код
Dim cell As Range

For Each cell In exam.Cells
    Debug.Print cell.Address(0, 0)
Next cell
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
нужно чтобы сначала 1 ячейка была в цели потом следующая после запятой и тд.

[vba]
Код
Dim cell As Range

For Each cell In exam.Cells
    Debug.Print cell.Address(0, 0)
Next cell
[/vba]

Автор - Gustav
Дата добавления - 28.09.2018 в 14:08
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!