Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выгрузить элементы списка из ячейки / 18 сообщений из 18, страница 1 из 1
09.06.2017, 18:10
    #39469737
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
Здравствуйте!

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

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

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

Подскажите как надо написать более правильно?
...
Рейтинг: 0 / 0
09.06.2017, 23:46
    #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
10.06.2017, 13:34
    #39469957
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
iMrTidyferzmikk,

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

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


Да, вот эта строчка и оптимизирует
...
Рейтинг: 0 / 0
10.06.2017, 13:39
    #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
10.06.2017, 13:46
    #39469964
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
Учитывая что имеем простой список, то список получаем в виде многомерного массива. Возможно ли получить из
Range сразу одномерный массив.
...
Рейтинг: 0 / 0
10.06.2017, 17:43
    #39470047
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
Возможно ли получить из Range сразу одномерный массив?
...
Рейтинг: 0 / 0
10.06.2017, 20:39
    #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
11.06.2017, 09:49
    #39470164
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
iMrTidyferzmikk,

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


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

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

Приложил свой код, который вытаскивает эти элементы. Но похоже опять не оптимально.
...
Рейтинг: 0 / 0
13.06.2017, 14:49
    #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
13.06.2017, 14:55
    #39471002
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
iMrTidy,

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

А если писать код более универсально, то есть и для диапазона, и для имени диапазона?
...
Рейтинг: 0 / 0
14.06.2017, 00:10
    #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
29.06.2017, 07:57
    #39479428
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выгрузить элементы списка из ячейки
iMrTidy,

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


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