Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
lalaladododo
-23 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 5
1

Поиск максимального значения

31.03.2019, 23:28. Просмотров 458. Ответов 7
Метки нет (Все метки)

Народ, хэлп.
Знаю, задачка элементарная, но я полный профан в VBA и не знаю как это записать.

Вообщем:
Имеется 2 столбца[A50:B50], в первом имеется ряд значений, который динамически обновляется, второй нужно заполнить

Нужно написать макрос, который бы сравнивал ячейки A и B.
если A1 = максимальное значение (из диапазона [A1:A50]), то в B1 ставится "+", спускается на A2, и цикл повторяется, затем на A3...A4
если A1 =\= максимальное значение, то ничего не ставится

Остановиться когда в ячейке B51 (итог), будет 20 плюсов. (там стоит формула СЧЕТЕСЛИ)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2019, 23:28
Ответы с готовыми решениями:

Поиск минимального и максимального значения
Здравствуйте, перерыл гугл и не смог найти решения. У меня есть 2 столбца, в одном имя параметра в...

Поиск максимального значения в ячейке
Как на листе найти (программно)ячейку с максимальным значением.

Поиск второго максимального значения в массиве
Здравствуйте! в этом коде не работает нахождение второго максимального значения массива,...

Поиск максимального, минимального, среднего значения и произведения
В экселе колонка цифр, нужно создать КНОПКУ чтоб нажав на нее в отдельные ячейки вписывались...

Поиск столбцов с нужным именем и копирование максимального значения
Всем привет! Нужна помощь в решение проблемы. Обычными средствами Excel это удается сделать, но...

7
Казанский
14905 / 6308 / 1719
Регистрация: 24.09.2011
Сообщений: 9,977
01.04.2019, 23:35 2
lalaladododo, нужно пометить плюсом 20 наибольших значений из А, что ли?
Для этого макрос не нужен, достаточно в B1 вставить формулу
Код
=ЕСЛИ(A1>=НАИБОЛЬШИЙ(A:A;20);"+";"")
и автозаполнить по столбцу.
0
lalaladododo
-23 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 5
02.04.2019, 00:27  [ТС] 3
Казанский, Нет, там определенный алгоритм, при постановке "+" максимальные значения пересчитываются. Автозаполнение не прокатит, нужно чтоб именно по порядку сравнивал. Возможно даже, несколько кругов таких прогнал, пока не будет в сумме 20. Тоесть доходя до 50 ячейки, возвращался бы назад на первую.
0
Казанский
14905 / 6308 / 1719
Регистрация: 24.09.2011
Сообщений: 9,977
02.04.2019, 07:21 4
lalaladododo, ОК, каким образом диапазон "динамически обновляется"? Это юзер вставляет значения, или другой макрос, или другое приложение по DDE? От этого зависит, на какое событие вешать макрос. Или юзер будет на кнопку нажимать?
0
02.04.2019, 07:21
lalaladododo
-23 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 5
02.04.2019, 08:31  [ТС] 5
Казанский, Юзер да, на поля с "+" привязана формула, которая пересчитывает общую сумму всех ячеек и равномерно распределяет. Максимальное значение, это собстно приоритет заполнения ячеек...он всегда меняется, по мере заполнения.
Ничего супер навороченного не требуется, просто элементарный макрос, который бы ставил "+",если этом максимальное значение, либо ничего не ставил.
0
Казанский
14905 / 6308 / 1719
Регистрация: 24.09.2011
Сообщений: 9,977
02.04.2019, 08:40 6
Цитата Сообщение от lalaladododo Посмотреть сообщение
элементарный макрос, который бы ставил "+",если этом максимальное значение
Visual Basic
1
2
3
Sub La()
  Cells(WorksheetFunction.Match(WorksheetFunction.Max(Range("A1:A50")), Range("A1:A50"), 0), "B") = "+"
End Sub
0
lalaladododo
-23 / 0 / 0
Регистрация: 31.03.2019
Сообщений: 5
02.04.2019, 23:10  [ТС] 7
Казанский, спасибо, примерно то, что нужно, осталось только цикл написать, чтоб он сам проставил 20 плюсов и остановился. А затем перекинулся бы на столбец С и начинал ставить плюсы там,а затем на D и так еще столбцов 20...

Если б подсказал, сэкономил бы мне кучу времени =)
0
Казанский
14905 / 6308 / 1719
Регистрация: 24.09.2011
Сообщений: 9,977
11.04.2019, 23:55 8
Цитата Сообщение от lalaladododo Посмотреть сообщение
на поля с "+" привязана формула
Значит, вставка плюса вызывает пересчет листа? Тогда так (пробовал с формулой =СЛЧИС() в А1:А50, С1:С50, Е1:Е50...)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub LaOne()
Dim i&, r As Range
  With WorksheetFunction
    For i = 1 To Columns.Count Step 2
      If Cells(1, i) = "" Then Exit Sub
      Set r = Cells(1, i).Resize(50)
      Do
        Cells(.Match(.Max(r), r, 0), i + 1) = "+"
      Loop While .CountIf(r.Offset(, 1), "+") < 20
    Next
  End With
End Sub
Для однократного проставления плюса используйте
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub LaTwo()
Dim i&, r As Range
  With WorksheetFunction
    For i = 1 To Columns.Count Step 2
      If Cells(1, i) = "" Then Exit Sub
      Set r = Cells(1, i).Resize(50)
      If .CountIf(r.Offset(, 1), "+") < 20 Then
        Cells(.Match(.Max(r), r, 0), i + 1) = "+"
        Exit Sub
      End If
    Next
  End With
End Sub
0
11.04.2019, 23:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2019, 23:55

Открытие файла, поиск значения и копирование значения в исходный файл
Уважаемые форумчане, помогите, пожалуйста, с выполнением &quot;простой&quot; задачи (если можно - с...

Поиск значения из одной книги в другой и вставка этого значения
Привет форумчане. Требуется ваша помощь. Мне из книги &quot;Разобрано&quot; нужно найти в &quot;Справочнике&quot;...

Поиск значения в столбце с выводом найденного значения в Label
Здравствуйте. помогите пожалуйста, надо организовать поиск значения в столбце А, если оно найдено,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.