powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выгрузить элементы списка из ячейки
18 сообщений из 18, страница 1 из 1
Выгрузить элементы списка из ячейки
    #39469737
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Задача. Нужно из ячейки, который ссылается на список, выгрузить элементы списка.

Написал макрос. Список выгружает. Но не уверен, что код оптимальный. Первое, выгружает, если включен стиль формул R1C1. Второе, как то сложно получилось. Третье, не учитывается, если список в качестве исходных данных берет из несколько диапазонов. Я думаю, что должно быть более правильное и оптимальное решение.

Файл прилагаю.

Подскажите как надо написать более правильно?
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39469852
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

На сколько мне известно, список в Вашем случае не может браться из нескольких диапазонов. Код можно упростить, например, так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub GetRefList()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim strRef As String
Dim arr()
Dim i As Integer

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
strRef = sh.Cells(2, 3).Validation.Formula1
Set rn = sh.Range(strRef)
arr = rn

For i = 1 To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next

End Sub
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39469957
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyferzmikk,

На сколько мне известно, список в Вашем случае не может браться из нескольких диапазонов. Код можно упростить, например, так:

Код: vbnet
1.
Set rn = sh.Range(strRef)


Да, вот эта строчка и оптимизирует
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39469959
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А при разных стилей формул получается так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Sub GetRefList()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim strRef As String
Dim arr()
Dim i As Integer

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)

Dim ОтметкаA1 As Boolean
If Application.ReferenceStyle = xlA1 Then ОтметкаA1 = True
If ОтметкаA1 <> True Then Application.ReferenceStyle = xlA1
strRef = sh.Cells(2, 3).Validation.Formula1
If ОтметкаA1 <> True Then Application.ReferenceStyle = xlR1C1

Set rn = sh.Range(strRef)

arr = rn

For i = 1 To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next

End Sub

...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39469964
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учитывая что имеем простой список, то список получаем в виде многомерного массива. Возможно ли получить из
Range сразу одномерный массив.
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470047
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно ли получить из Range сразу одномерный массив?
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470091
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Вот так пожалуй лучше.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub GetRefList()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim strRef As String
Dim arr()
Dim i As Integer

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
strRef = sh.Cells(2, 3).Validation.Formula1
If Application.ReferenceStyle = xlR1C1 Then strRef = Application.ConvertFormula(strRef, xlR1C1, xlA1)
Set rn = sh.Range(strRef)
arr = rn

For i = 1 To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next

End Sub



Сразу одномерный нельзя.
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470164
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyferzmikk,

Вот так пожалуй лучше.


Спасибо!
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470734
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как быть если указан не диапазон, а имя диапазона?
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470937
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkА как быть если указан не диапазон, а имя диапазона?

Код, что я указал должен работать и с именем диапазона.
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470963
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyКод, что я указал должен работать и с именем диапазона.
Не работает.

Приложил свой код, который вытаскивает эти элементы. Но похоже опять не оптимально.
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39470997
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

Рекомендую Option Explicit
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Sub GetRefList()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim strRef As String
Dim arr()
Dim i As Integer

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
strRef = sh.Cells(4, 3).Validation.Formula1
strRef = Replace(strRef, "=", "")
Set rn = wb.Names(strRef).RefersToRange
arr = rn

For i = 1 To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next

End Sub

...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39471002
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

Супер!
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39471007
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

А если писать код более универсально, то есть и для диапазона, и для имени диапазона?
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39471208
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkiMrTidy,

А если писать код более универсально, то есть и для диапазона, и для имени диапазона?

Первый вариант был универсальным, нужно было убрать лишнее.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Sub GetRefList()

Dim wb As Workbook
Dim sh As Worksheet
Dim rn As Range
Dim strRef As String
Dim arr()
Dim i As Integer

Set wb = ThisWorkbook
Set sh = wb.Sheets(1)
strRef = sh.Cells(4, 3).Validation.Formula1
If Application.ReferenceStyle = xlR1C1 Then strRef = Application.ConvertFormula(strRef, xlR1C1, xlA1)
Set rn = Range(strRef)
arr = rn

For i = 1 To UBound(arr, 1)
    Debug.Print arr(i, 1)
Next

End Sub

...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39479428
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

Спасибо, работает!
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39565548
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если в ячейке список как фильтр (как и в обычной таблице, так и в умной таблице), то как выгрузить?
...
Рейтинг: 0 / 0
Выгрузить элементы списка из ячейки
    #39565593
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выгрузить элементы списка из ячейки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]