Страницы: 1
RSS
Обработка двумерного массива (базы данных)
 
Есть массив N*M  
N - это месяцы (столбцы)  
M - это материал (к-во)  
 
Как созать макрос по выборке значений на пересечении определенных заданных значений N(n)и M(m) ?
 
Применение SUMIFS не помогает то есть не получается...
 
Вот файл
 
непонятно, что вы хотите получить. Что должен делать макрос?  
 
Он должен запросить у вас месяц, потом материл и поставить курсор на пересечение месяца и материала?
 
Private Sub Massiv()  
Dim myArr(1 To 3, 1 To 12)  
Dim M As Long  
Dim N As Long  
'заполнить массив данными с рабочего листа, например B2:M4  
       For M = 1 To 3   'материал  
           For N = 1 To 12   'месяцы  
               myArr(M, N) = Worksheets("Лист1").Cells(M + 1, N + 1)  
           Next N  
      Next M  
           M = 2  
           N = 12  
           MsgBox myArr(M, N)  
     
End Sub
 
{quote}{login=}{date=28.12.2011 06:05}{thema=}{post}непонятно, что вы хотите получить. Что должен делать макрос?  
 
Он должен запросить у вас месяц, потом материл и поставить курсор на пересечение месяца и материала?{/post}{/quote}  
 
В макросе должна быть функция    
Function (a1, b100, c80:q700)  
 
где в a1 значение - название строки  
где в b100 значение - название столбца  
 
и c80:q700 область значений данных (вместе с названиями строк и столбцов)
 
Результат этой функции значение на пересечении строка и столбца
 
{quote}{login=Kuzmich}{date=28.12.2011 07:05}{thema=Re}{post}Private Sub Massiv()  
Dim myArr(1 To 3, 1 To 12)  
Dim M As Long  
Dim N As Long  
'заполнить массив данными с рабочего листа, например B2:M4  
       For M = 1 To 3   'материал  
           For N = 1 To 12   'месяцы  
               myArr(M, N) = Worksheets("Лист1").Cells(M + 1, N + 1)  
           Next N  
      Next M  
           M = 2  
           N = 12  
           MsgBox myArr(M, N)  
     
End Sub{/post}{/quote}  
 
Все класно а єто можно сделать функцией пользователя, чтоб каждый раз вводить новые данные ?
 
Я не могу посмотреть ваш файл,  
у меня Office2003  
Можно использовать InputBox для ввода M и N?  
а может вам достаточно использовать  
ИНДЕКС(массив;номер строки; номер столбца)
 
Kuzmich, чтобы Excel 2003 мог открыть файлы формата Excel 2007/2010 нужно скачать и установить FileFormatConverters.exe (37мб)  
 
http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466  
 
P.S. mkn, в Правилах форума написано, что не все люди перешли на Office 2007/2010, поэтому желательно выкладывать файлы в формате Excel 2003 (*.xls). Это делается через меню "Сохранением как...", тип файла Excel 2003, (*.xls)
 
{quote}Это делается через меню "Сохранением как...", тип файла Excel 2003, (*.xls){/post}{/quote}  
Это я знаю как делается так :)
 
{quote}{login=Kuzmich}{date=28.12.2011 08:51}{thema=Re}{post}Я не могу посмотреть ваш файл,  
у меня Office2003  
Можно использовать InputBox для ввода M и N?  
а может вам достаточно использовать  
ИНДЕКС(массив;номер строки; номер столбца){/post}{/quote}  
 
Надо чтоб прога САМА наъодила столбец/строку по НАЗВАНИЮ
 
Используйте в своем файле в ячейках E3 и E4  
список и включите автоматическое вычисление.
 
{quote}{login=Kuzmich}{date=28.12.2011 09:17}{thema=Re}{post}Используйте в своем файле в ячейках E3 и E4  
список и включите автоматическое вычисление.{/post}{/quote}  
 
Этот файл маленький пример, на нем и VLOOKUP работает :)))  
На больших массивах не получается....  
Потому и хотел бі функцию ві макросе сварганить, тока VBA не знаю...
 
В примере от Kuzmichа добавте в функции ВПР/VLOOKUP интервальный просмотр равным "0" или ЛОЖЬ:    
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2);0)  
 
Должно работать и с большми таблицами без проблем, и VBA не понадобится
 
{quote}{login=MCH}{date=28.12.2011 09:32}{thema=}{post}В примере от Kuzmichа добавте в функции ВПР/VLOOKUP интервальный просмотр равным "0" или ЛОЖЬ:    
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2);0)  
 
Должно работать и с большми таблицами без проблем, и VBA не понадобится{/post}{/quote}  
 
Давайте как для меня для профана...  
1. e4 и e3 указівают на любые значения, в том числе и символьные ?  
2. в ПОИСКПОЗ область должна быть ВСЕХ данных или без столбцов и строчек ?
 
{quote}{login=MCH}{date=28.12.2011 09:32}{thema=}{post}В примере от Kuzmichа добавте в функции ВПР/VLOOKUP интервальный просмотр равным "0" или ЛОЖЬ:    
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2);0)  
 
Должно работать и с большми таблицами без проблем, и VBA не понадобится{/post}{/quote}  
В ПОИСКПОЗ также нужно указывать интервальный просмотр равным "0":  
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2;0);0)
 
{quote}{login=mkn}{date=28.12.2011 09:38}{thema=Re: }{post}Давайте как для меня для профана...  
1. e4 и e3 указівают на любые значения, в том числе и символьные ?  
2. в ПОИСКПОЗ область должна быть ВСЕХ данных или без столбцов и строчек ?{/post}{/quote}  
1. в e3 и e4 должны быть значения, такие же как и заголовках таблиц, допустимы как числовые, так и текстовые данные, только текст нужно искать в текстах, а числа в числах.  
2. в ПОИСКПОЗ должна указываться область заголовков.
 
{quote}{login=MCH}{date=28.12.2011 09:46}{thema=Re: }{post}{quote}{login=MCH}{date=28.12.2011 09:32}{thema=}{post}В примере от Kuzmichа добавте в функции ВПР/VLOOKUP интервальный просмотр равным "0" или ЛОЖЬ:    
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2);0)  
 
Должно работать и с большми таблицами без проблем, и VBA не понадобится{/post}{/quote}  
В ПОИСКПОЗ также нужно указывать интервальный просмотр равным "0":  
=ВПР(E4;A$3:D$5;ПОИСКПОЗ(E3;A$2:D$2;0);0){/post}{/quote}  
 
Сделал все по Вашему совету. Не получается... (см файл)
 
Может все таки будет эффективнее выборка из двумерного массива (базы данных) в макросе ?
 
макросом.
 
mkn ....Сделал все по Вашему совету. Не получается... (см файл)  
 
Подправил формулы в вашем файле. Посмотрите
 
Выше мой пост
 
{quote}{login=Лгяьшср}{date=29.12.2011 10:43}{thema=Re:}{post}mkn ....Сделал все по Вашему совету. Не получается... (см файл)  
 
Подправил формулы в вашем файле. Посмотрите{/post}{/quote}  
 
1. А где задается описание Month и Table ?  
=====  
Всем кто стремиться помочь !  
 
Уважаемые господа !  
А если все таки вернуться к теме топика, можно ли создать в макросе отдельную функцию, где у Function (Область,Парам 1, Парам2)  
 
Область - вся область именно числового двумерного массива  
Парам 1 - название Строки в любом формате  
Парам 2 - название Столбца в любом формате  
 
Эта формула выдает значение Области на пересечении Парам 1 и Парам 2. То есть по примеру INDEX но там надо ставить конкретный номер строки/столбца.  
А тут я хочу чтобы прога сама искала по названию (если такое значение хоть раз встречается в строке/столбце при условии что названия строк слева, а названия столбцов сверху Области.  
 
Почему именно функция ? Потому что она появляется в списке созданных пользователем и удобна в работе  
 
Спасибо всем за помощь и понимание !
 
А где задается описание Month и Table ?  
 
Это имена,   Вставка - Имя - Присвоить
 
Мне кажется, что формулами в данном случае  
удобнее, выбрал нужные Product и Month и    
тут же получил значение из таблицы (Table)
Страницы: 1
Читают тему
Наверх