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

Вход

Регистрация

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

 

= Мир MS Excel/Получить массив значений столбца при известном массиве строк - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Получить массив значений столбца при известном массиве строк
inetguru Дата: Воскресенье, 08.02.2015, 19:45 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Есть 2 таблицы:
1-я - должности в строках, к-во ставок в периодах - столбцы (лист расч.Должности)
2-я - должности в строках, к-во единиц спецодежды для должности - столбцы (лист спр.Спецодежда)
Необходимо с помощью формулы получить массив значений к-ва спецодежды для должностей в первой таблице.
Массив в таком виде нужен, чтобы использовать дополнительные условия по периоду начала действия должности, накладываемые на данные с листа расч.Должности
Начал формулу писать так:
Код
=СУММПРОИЗВ(ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0)*ИНДЕКС(расч.Должности!$D$4:$E$12;;2))

Первая часть формулы не верная
Код
ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0)
, т.к. нужны не номера строк, а значения из этих строк в соседнем столбце. В функцию ИНДЕКС передать набор строк нельзя.
Т.е. следующая запись не работает:
Код
ИНДЕКС(спр.Спецодежда!$B$8:$B$15;ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0);)

Как еще можно получить такой массив значений?
К сообщению приложен файл: 3117849.xlsx (20.6 Kb)


Сообщение отредактировал inetguru - Воскресенье, 08.02.2015, 20:05
 
Ответить
СообщениеЕсть 2 таблицы:
1-я - должности в строках, к-во ставок в периодах - столбцы (лист расч.Должности)
2-я - должности в строках, к-во единиц спецодежды для должности - столбцы (лист спр.Спецодежда)
Необходимо с помощью формулы получить массив значений к-ва спецодежды для должностей в первой таблице.
Массив в таком виде нужен, чтобы использовать дополнительные условия по периоду начала действия должности, накладываемые на данные с листа расч.Должности
Начал формулу писать так:
Код
=СУММПРОИЗВ(ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0)*ИНДЕКС(расч.Должности!$D$4:$E$12;;2))

Первая часть формулы не верная
Код
ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0)
, т.к. нужны не номера строк, а значения из этих строк в соседнем столбце. В функцию ИНДЕКС передать набор строк нельзя.
Т.е. следующая запись не работает:
Код
ИНДЕКС(спр.Спецодежда!$B$8:$B$15;ПОИСКПОЗ(расч.Должности!$D$4:$D$12;спр.Спецодежда!$A$8:$A$15;0);)

Как еще можно получить такой массив значений?

Автор - inetguru
Дата добавления - 08.02.2015 в 19:45
inetguru Дата: Суббота, 14.02.2015, 00:45 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Если кому интересно, задачу решил с помощью VBA:
[vba]
Код
Function ArrayValueByStringNumber(ByVal arrStringNumbers, ByRef arrValues) As Variant
'arrStringNumbers - массив номеров строк
'arrValues - массив значений, откуда будет проводиться выборка по номерам строк
If UBound(arrStringNumbers) = 0 Then Exit Function    ' нет в массиве номеров строк
' подготавливаем массив для результатов:
ReDim resArr(1 To UBound(arrStringNumbers), 0)
      ' заполняем новый массив
For i = LBound(arrStringNumbers) To UBound(arrStringNumbers)
      resArr(i, 0) = arrValues(arrStringNumbers(i, 1))
Next i
ArrayValueByStringNumber = resArr
End Function
[/vba]
[moder]Для кода VBA другая кнопочка - #
К сообщению приложен файл: 5608765.xlsm (30.7 Kb)
 
Ответить
СообщениеЕсли кому интересно, задачу решил с помощью VBA:
[vba]
Код
Function ArrayValueByStringNumber(ByVal arrStringNumbers, ByRef arrValues) As Variant
'arrStringNumbers - массив номеров строк
'arrValues - массив значений, откуда будет проводиться выборка по номерам строк
If UBound(arrStringNumbers) = 0 Then Exit Function    ' нет в массиве номеров строк
' подготавливаем массив для результатов:
ReDim resArr(1 To UBound(arrStringNumbers), 0)
      ' заполняем новый массив
For i = LBound(arrStringNumbers) To UBound(arrStringNumbers)
      resArr(i, 0) = arrValues(arrStringNumbers(i, 1))
Next i
ArrayValueByStringNumber = resArr
End Function
[/vba]
[moder]Для кода VBA другая кнопочка - #

Автор - inetguru
Дата добавления - 14.02.2015 в 00:45
  • Страница 1 из 1
  • 1
Поиск:

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