Страницы: 1
RSS
Виртуальный диапазон из отдельных ячеек
 
Добрый день.
Вопрос в теме, и нужен вариант для задания условий (3й параметр) в эксельной формуле БДСУММ на обычных формулах (не VBA).
Знаю про такой  способ склейки:
=ВЫБОР( {1;2;3}  ;  A1:A2;  C1:C2; E1:E2 )
Но он склеивает только вертикальные диапазоны, а нужно склеить произвольные ячейки, т.е. что-то типа (покажу как массив значений, но на ссылках, который, знаю, невозможен):
{ A1 ; E5 ; T8 :
 G7 ; F3; J4 }
На выходе нужен диапазон размерностью 2 строки на N колонок.
Возможно ли такое сотворить?
Изменено: ЭксЭль - 01.02.2026 12:12:19
 
БДСУММ с массивами не работает, только со ссылками на ячейки. Более того - диапазон должен быть неделимым, т.е. единым.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Так про это и вопрос...
А насчёт неделимости... ВПР тоже не должен работать, но работает же с трюком Правого ВПР через ВЫБОР...
Изменено: ЭксЭль - 01.02.2026 13:11:33
 
Цитата
ЭксЭль написал:
ВПР тоже не должен работать
с чего бы? ВПР прекрасно умеет работать с массивами - в неё это заложено. Там можно задать виртуальный массив вместо диапазона ячеек. А БДСУММ не умеет работать с массивами - только с диапазонами ячеек. Там и условия отбора тоже на основании диапазона ячеек задаются.
Рекомендую ознакомиться: Функции баз данных
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Рекомендую ознакомиться:  Функции баз данных
Знаком, спасибо.
Кстати, в комментариях к статье Павла про левый ВПР ( http://www.planetaexcel.ru/techniques/2/2012/ ) навели на мысль использовать не только точку с запятой, но ещё и  двоеточие, т.е. вот так:
ВЫБОР({1;2;3 : 4;5;6};  A1;E5;T8;G7;F3;J4)
или даже сразу вот так, что, собственно, и нужно:
ВЫБОР({1;2;3 : 4;5;6};  "Поле1";Поле2";"Поле3";G7;F3;J4) .
Но это всё не работает,- действительно, нужен именно диапазон, блин..
Наверное, тема закрыта.
Изменено: ЭксЭль - 01.02.2026 19:55:39
 
Что-то я никак не успокоюсь...
Встретил на просторах инета вот такое:
С применением свойства Range самого объекта Range нужно быть очень осторожным. Дело в том, что Excel создает на основе объекта Range виртуальный лист со своей собственной нумерацией. Поэтому такой код:

Set oRange1 = Worksheets("Лист1").Range("C1")

Set oRange2 = oRange1.Range("B1")

oRange2.Value = 20

пропишет значение 20 не в ячейку B1, как можно было понять из кода, а в ячейку D1 (то есть B1 по отношению к виртуальному листу, начинающемуся с C1).

Отсюда вопросик знатокам: можно ли сделать совсем виртуальный Range, не привязанный к листу, либо привязанный к опять же виртуальному листу? Т.е. что-то типа With New Range, и уже это чудо подсунуть в БДСУММ?

 
Цитата
ЭксЭль написал:
Excel создает на основе объекта Range виртуальный лист со своей собственной нумерацией
бред. Это вовсе не так. Если прям по простому: Excel создает в памяти ОС ссылку на заданный диапазон. Т.е. это даже не кусок листа из заданных ячеек - это ссылка на этот кусок.
При таком присвоении:
Код
Set oRange1 = Worksheets("Лист1").Range("C1")

мы просто делаем ссылку на ячейку С1 для быстрого доступа. Никаких виртуальных массивов не создается. Это легко проверить: удаляете столбец С и Ваша oRange1 будет недоступна, т.к. исходная ячейка, на которую ведет ссылка памяти из oRange1 - удалена.

То, что Вы называете "виртуальным массивом" в VBA очень даже осязаемый массив - эти переменные так и называются. Одна беда БДСУММ - не работает с массивами в любом виде. Я выше написал - только ссылки на ячейки. Потому что так уж заложено в её реализацию. Есть формулы, которые могут в качестве аргументов принимать исключительно ссылки на диапазоны ячеек, никаких массивов. И никак это не обойти, т.к. это приведет к ошибке типов внутри выполнения функции(в том коде, который её реализует уже на недоступном для пользователя уровне).
Изменено: Дмитрий(The_Prist) Щербаков - 09.02.2026 20:58:32
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я не про массив (с ним всё понятно),- я про виртуальный диапазон (написал же Range).
Есть же в серьёзных ЯП понятие темповых объектов,- я в эту сторону смотрел...
 
Цитата
ЭксЭль написал:
я про виртуальный диапазон
да где Вы такие понятия-то берете? Виртуальный лист, виртуальный диапазон...Можете ссылку на источник кинуть, чтобы хоть знать героев в лицо, которые такое распространяют :)
Цитата
ЭксЭль написал:
Есть же в серьёзных ЯП понятие темповых объектов,
можно поподробнее? Что они из себя представляют по Вашему? Temp - временный. И по сути все объекты временные - живут до тех пор, пока программа или процедура в них нуждается.

И не знаю, сколько раз ещё надо повторить, чтобы Вы уже окончательно поняли: в случае с БДСУММ Вы ничего не сделаете из желаемого, потому что она просто не может принимать никакой иной аргумент, кроме непрерывного диапазона ячеек. Понятия виртуального диапазона ячеек в Excel в принципе нет и никак Вы его не создадите. Я же Выше написал Вам уже - на уровне реализации кодом самой этой функции просто не заложена возможность работать ни с чем, кроме реального диапазона ячеек.

Если уж заговорили про серьезные ЯП - так создайте тогда свою БДСУММ, которая будет принимать массивы. Других вариантов нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх