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

Вход

Регистрация

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

 

= Мир MS Excel/Как найти максимальное значение из массива по подобию ВПР? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как найти максимальное значение из массива по подобию ВПР? (Макросы/Sub)
Как найти максимальное значение из массива по подобию ВПР?
alex_07 Дата: Понедельник, 09.04.2018, 15:39 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый день уважаемые форумчане!
Прошу помочь в решении не простой задачи.
Есть файл в котором большое количество данных. Эти данные мы получаем с бурильной установки.
Машина в столбец В записывает глубину, в столбец J количество поданного раствора в литрах (назовем просто расход).
В соответствии с глубиной она так же ведет подсчет данных расхода в промежутке 1 метра. Т.е. с каждого метра подсчет ведется заново или добавляется если данный метр уже был задействован.
Собственно вопрос: как найти максимальное значение в столбце J, когда в столбце В значение в пределах от 0 - 1, далее 1 - 2, 2 - 3 и тд...
К сообщению приложен файл: 12.xls(44.0 Kb)
 
Ответить
СообщениеДобрый день уважаемые форумчане!
Прошу помочь в решении не простой задачи.
Есть файл в котором большое количество данных. Эти данные мы получаем с бурильной установки.
Машина в столбец В записывает глубину, в столбец J количество поданного раствора в литрах (назовем просто расход).
В соответствии с глубиной она так же ведет подсчет данных расхода в промежутке 1 метра. Т.е. с каждого метра подсчет ведется заново или добавляется если данный метр уже был задействован.
Собственно вопрос: как найти максимальное значение в столбце J, когда в столбце В значение в пределах от 0 - 1, далее 1 - 2, 2 - 3 и тд...

Автор - alex_07
Дата добавления - 09.04.2018 в 15:39
sboy Дата: Понедельник, 09.04.2018, 15:45 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1696
Репутация: 482 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Самый простой вариант сводной таблицей с группировкой
К сообщению приложен файл: 12-3-.xls(57.5 Kb)
 
Ответить
СообщениеДобрый день.
Самый простой вариант сводной таблицей с группировкой

Автор - sboy
Дата добавления - 09.04.2018 в 15:45
alex_07 Дата: Четверг, 12.04.2018, 06:58 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Самый простой вариант сводной таблицей

Такой вариант не очень хорош.
Глубина меняется от 6 до 15 метров, от этого сводная таблица постоянно меняется в размерах.
Данные из сводной таблицы в последствии автоматически копируются на другие листы для дальнейшего анализа.
Однако из за изменении размеров таблицы данные частично отсутствуют, от чего выскакивают ошибки.
Плюс Excel начинает ужасно тормозить.

Нашел такой код, но как его поменять к необходимым требованиям - не понимаю.
К сожалению код без комментариев. И данные суммируются, а не выбираются максимальные значения.
Построчно проверить код не получается, выдает ошибку "Expected:to", при этом макрос работает.

[vba]
Код

Sub Go()
Dim CurrentArr(3) As Variant
Set CurrentDic = CreateObject("Scripting.Dictionary")
With ActiveWorkbook.Sheets("ЛИСТ1")
Count = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Count
CurrentCode = .Cells(i, 9).Value
If CurrentDic.exists(CurrentCode) Then
CurrentArr2 = CurrentDic.Item(CurrentCode)
CurrentArr2(1) = CurrentArr2(1) + .Cells(i, 3).Value
CurrentArr2(3) = .Cells(i, 4).Value
CurrentDic.Item(CurrentCode) = CurrentArr2
Else
CurrentArr(0) = .Cells(i, 7).Value
CurrentArr(1) = .Cells(i, 8).Value
CurrentArr(2) = .Cells(i, 11).Value
CurrentArr(3) = .Cells(i, 12).Value
CurrentDic.Add CurrentCode, CurrentArr
End If
Next i
Arr = CurrentDic.Keys
For i = 3 To CurrentDic.Count - 1
CurrentKey = Arr(i)
PromArr = CurrentDic.Item(CurrentKey)
.Cells(i + 1, 20).Value = CurrentKey
.Cells(i + 1, 21).Value = PromArr(0)
.Cells(i + 1, 22).Value = PromArr(1)
.Cells(i + 1, 23).Value = PromArr(2)
.Cells(i + 1, 24).Value = PromArr(3)
Next i
End With
End Sub
[/vba]


Сообщение отредактировал alex_07 - Четверг, 12.04.2018, 07:08
 
Ответить
Сообщение
Самый простой вариант сводной таблицей

Такой вариант не очень хорош.
Глубина меняется от 6 до 15 метров, от этого сводная таблица постоянно меняется в размерах.
Данные из сводной таблицы в последствии автоматически копируются на другие листы для дальнейшего анализа.
Однако из за изменении размеров таблицы данные частично отсутствуют, от чего выскакивают ошибки.
Плюс Excel начинает ужасно тормозить.

Нашел такой код, но как его поменять к необходимым требованиям - не понимаю.
К сожалению код без комментариев. И данные суммируются, а не выбираются максимальные значения.
Построчно проверить код не получается, выдает ошибку "Expected:to", при этом макрос работает.

[vba]
Код

Sub Go()
Dim CurrentArr(3) As Variant
Set CurrentDic = CreateObject("Scripting.Dictionary")
With ActiveWorkbook.Sheets("ЛИСТ1")
Count = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Count
CurrentCode = .Cells(i, 9).Value
If CurrentDic.exists(CurrentCode) Then
CurrentArr2 = CurrentDic.Item(CurrentCode)
CurrentArr2(1) = CurrentArr2(1) + .Cells(i, 3).Value
CurrentArr2(3) = .Cells(i, 4).Value
CurrentDic.Item(CurrentCode) = CurrentArr2
Else
CurrentArr(0) = .Cells(i, 7).Value
CurrentArr(1) = .Cells(i, 8).Value
CurrentArr(2) = .Cells(i, 11).Value
CurrentArr(3) = .Cells(i, 12).Value
CurrentDic.Add CurrentCode, CurrentArr
End If
Next i
Arr = CurrentDic.Keys
For i = 3 To CurrentDic.Count - 1
CurrentKey = Arr(i)
PromArr = CurrentDic.Item(CurrentKey)
.Cells(i + 1, 20).Value = CurrentKey
.Cells(i + 1, 21).Value = PromArr(0)
.Cells(i + 1, 22).Value = PromArr(1)
.Cells(i + 1, 23).Value = PromArr(2)
.Cells(i + 1, 24).Value = PromArr(3)
Next i
End With
End Sub
[/vba]

Автор - alex_07
Дата добавления - 12.04.2018 в 06:58
SLAVICK Дата: Четверг, 12.04.2018, 09:19 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2183
Репутация: 735 ±
Замечаний: 0% ±

2007,2010,2013,2016
сводная таблица постоянно меняется в размерах

так нужно чтобы размеры были одинаковые?
можно просто таблицу сделать с формулой:
Код
=МАКС(($B$3:$B$999<=[@Param])*($B$3:$B$999>Q3)*($J$3:$J$999))
К сообщению приложен файл: 12-3-2-.xls(50.0 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
сводная таблица постоянно меняется в размерах

так нужно чтобы размеры были одинаковые?
можно просто таблицу сделать с формулой:
Код
=МАКС(($B$3:$B$999<=[@Param])*($B$3:$B$999>Q3)*($J$3:$J$999))

Автор - SLAVICK
Дата добавления - 12.04.2018 в 09:19
alex_07 Дата: Четверг, 12.04.2018, 11:51 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
можно просто таблицу сделать с формулой


Не понимаю. Использую выше указанную формулу, но в любом случае получаю ошибку #ЗНАЧ.
Видимо это не просто формула с методом "скопируй и вставь"?


Сообщение отредактировал alex_07 - Четверг, 12.04.2018, 11:52
 
Ответить
Сообщение
можно просто таблицу сделать с формулой


Не понимаю. Использую выше указанную формулу, но в любом случае получаю ошибку #ЗНАЧ.
Видимо это не просто формула с методом "скопируй и вставь"?

Автор - alex_07
Дата добавления - 12.04.2018 в 11:51
китин Дата: Четверг, 12.04.2018, 11:56 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4774
Репутация: 763 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
Видимо это не просто формула

да, это формула массива. водится нажатием 3 клавиш Ctrl,Shift,Enter


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщение
Видимо это не просто формула

да, это формула массива. водится нажатием 3 клавиш Ctrl,Shift,Enter

Автор - китин
Дата добавления - 12.04.2018 в 11:56
alex_07 Дата: Четверг, 12.04.2018, 13:46 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Помогло, спасибо!
 
Ответить
СообщениеПомогло, спасибо!

Автор - alex_07
Дата добавления - 12.04.2018 в 13:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как найти максимальное значение из массива по подобию ВПР? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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