Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/32: Рейтинг темы: голосов - 32, средняя оценка - 4.50
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85

Объекты в VBA (Excel)

21.02.2011, 19:42. Показов 6120. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать подпрограмму нахождения в выделенном диапазоне рабочей таблицы максимального и минимального значения по строкам и по столбцам. Элементы массива задать самостоятельно через функцию Inputbox.


Ввод элементов массива получился, но как найти максимальное и минимальное значения в выделенном диапазоне рабочей таблицы я не знаю:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub r()
Dim stl As Integer
Dim str As Integer
Dim i As Integer
Dim j As Integer
stl = InputBox("Введите количество столбцов")
str = InputBox("Введите количество строк")
For i = 1 To stl
For j = 1 To str
Sheets("Лист1").Cells(i, j) = InputBox("Введите" & j & "элемент" & i & "строки")
Next j
Next i
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2011, 19:42
Ответы с готовыми решениями:

Объекты Excel VBA: рабочие листы. Примеры структур рабочих листов в приложении, их связь и изменчивость
Ребята,помогите найти информацию...ума не приложу,что нужно искать... 7. Объекты Excel VBA: приложение, рабочие книги Примеры структур...

Vba excel windows и vba excel Mac Os - Макинтош корявит шрифт
Всем привет, столкнулся с такой ситуацией. Макросы написаны на Excel 2016 Windows. Когда файл открывается и сохраняется на маке, весь...

Автоматические создаваемые VBA объекты?
Доброго времени суток! Помогите разобраться с объектами в VBA. Суть моего непонимания: Возьмем для конкретики VBA в Excel. В VBA мы...

27
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
21.02.2011, 20:54
Цитата Сообщение от dimok5 Посмотреть сообщение
в выделенном диапазоне рабочей таблицы
вы же вводите элементы массива через InputBox.
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
21.02.2011, 21:04
название топику дали шикарное!!!!!!!!
Вот же в соседнем топике почти тоже самое Алекс77755 ответил:
Я предлагаю такой алгоритм:
1. берём (значит запоминаем) первое число из переданного в функцию массива как текущий минимум.
Оно будет с индексом 0 - по умолчанию
2. перебираем все числа в массиве
3. если очередное число меньше текущего минимума - запоминаем очередное как текущий минимум
4. Всё! Значение функции равно минимуму. Осталось выразить всё это операторами:

Да действительно зачем инпут боксом вводите лишь бы палец не устал ))
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
21.02.2011, 22:31  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
вы же вводите элементы массива через InputBox.
Как объяснил препод: нужно составить как бы 2 программы, одна - на ввод элементов элементов массива, а вторая - выделение диапазона и нахождение в нём максимальных и минимальных значений столбцов и строк.

К примеру, из введённого массива 4х4 выделяется следующий диапазон:

1 2 3 4
5 6 7 8
2 6 9 4
0 3 5 1
Цитата Сообщение от Ципихович Эндрю
Да действительно зачем инпут боксом вводите лишь бы палец не устал ))
Такое уж условие задачи. И как всегда нужно решать нерациональным путём...
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
22.02.2011, 08:46
dimok5,
а что значит поиск минимальных и максимальных значений по строкам и столбцам?
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
22.02.2011, 09:26
Я думаю, ТС неправильно понял и истолковал (либо препод недостаточно ясно её растолковал студентам) задачу о нахождении в матрице "седловых точек". Это такие элементы на матрице, которые одновременно являются минимальными в своем столбце и максимальными в своей строке. Таких точек на матрице может оказаться несколько, вплоть до всей матрицы, если она будет состоять из одинаковых элементов. Задача о седловых точках наиболее просто решается с помощью создания вспомогательной матрицы той же размерности (скажем, заполненной нулями), проставлении на ней единицами тех элементов, которые являются минимумами в своих столбцах и увеличением на единицу тех элементов, которые являются максимумами в своих строках. Ответом будут узловые точки, соответствующие координатам двоек на вспомогательной матрице. Если задача именно та, решить её - дело техники и набора 4-5 десятков строк кода.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
22.02.2011, 12:04
mc-black,
Не думаю, что там так сложно.
Скорее всего притивный максимум и минимум выделенной области.
И нужно просто перебрать ячейки в Selection
0
 Аватар для mc-black
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
22.02.2011, 12:42
Да, все может быть. Может и так, как ты пишешь, Alex77755.

А на тот случай, если нужен все-таки поиск "седловых точек" (или "узловых точек"?), или если кому-то понадобится, то заполнение листа и поиск таковых можно реализовать так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Sub FillMatrix()
    Dim i As Long, j As Long, m As Long, n As Long, wsh As Worksheet
    Randomize
    
    Set wsh = ThisWorkbook.Worksheets(1)
    wsh.UsedRange.Clear
    
    i = 1: m = 5
    Do While i <= m
        j = 1: n = 4
        Do While j <= n
            wsh.Cells(i, j).Value = Int((6 * Rnd) + 1)
            j = j + 1
        Loop
        i = i + 1
    Loop
    
    Call NodePoints(m, n)
    
    Set wsh = Nothing
End Sub
 
Private Sub NodePoints(m As Long, n As Long)
    Dim src(), tmp() As Long, wsh As Worksheet
    Dim i As Long, j As Long, lMin As Long, lMax As Long
    
    Set wsh = ThisWorkbook.Worksheets(1)
    src = wsh.Range(wsh.Cells(1, 1), wsh.Cells(m, n)).Value
    
    ReDim tmp(1 To m, i To n)
    For i = 1 To m
        For j = 1 To n
            tmp(i, j) = 0
        Next j
    Next i
    
    For j = 1 To n
        lMax = src(1, j)
        For i = 1 To m
            If lMax < src(i, j) Then lMax = src(i, j)
        Next
        For i = 1 To m
            If lMax = src(i, j) Then tmp(i, j) = 1
        Next i
    Next j
    
    For i = 1 To m
        lMin = src(i, 1)
        For j = 1 To n
            If lMin > src(i, j) Then lMin = src(i, j)
        Next j
        For j = 1 To n
            If lMin = src(i, j) Then tmp(i, j) = tmp(i, j) + 1
        Next j
    Next i
    
    For i = 1 To m
        For j = 1 To n
            If tmp(i, j) = 2 Then
                With wsh.Cells(i, j)
                    .Font.Bold = True
                    .Font.ColorIndex = 3
                End With
            End If
        Next j
    Next i
    
    Set wsh = Nothing
End Sub
Если узловые точки имеются, то они делаются жирными и выделяются красным цветом.
1
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 15:35  [ТС]
Нет, дело не в седловых точках!
Я уточнил задание у препода:
1) Нужно с клавиатуры ввести элементы массива, задав количество строк и столбцов.
2) Далее, например, из введённого массива выделяем смостоятельно произвольный диапазон и для данного примера в соответствующие ячейки выводится ответ:
2 3 4 -5
мах 4 min 2
8 1 -5 -8
мах 10 min -5
0 5 4 7
мах 5 min 0
мах 8 мах 10 мах 4
min 0 min3 min-5
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.02.2011, 19:25
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub m_1()
Dim myArray As Variant
Dim i As Long
Dim j As Long
Dim Max As Variant
Dim Min As Variant
myArray = Selection
For i = 1 To UBound(myArray, 1)
    Max = myArray(i, 1)
    Min = myArray(i, 1)
    For j = 1 To UBound(myArray, 2)
        If myArray(i, j) > Max Then
            Max = myArray(i, j)
        ElseIf myArray(i, j) < Min Then
            Min = myArray(i, j)
        End If
    Next j
    Cells(i, 10).Value = "max" & " " & Max & " " & "min" & " " & Min
Next i
End Sub
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 20:18  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
Visual Basic
1
For i = 1 To UBound(myArray, 1)
Почему -то находит ошибку в этой строке
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.02.2011, 20:30
dimok5,
а что за ошибка?
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 20:32  [ТС]
Несоответствие типа( Type mismatch)
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.02.2011, 20:40
dimok5,
этот код рассчитан, что будет выделено как минимум 2 ячейки.
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 20:46  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
dimok5,
этот код рассчитан, что будет выделено как минимум 2 ячейки.
Выделяю 9 ячеек - всё таже ошибка:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub m_1()
Dim myArray As Variant
Dim i As Long
Dim j As Long
Dim Max As Variant
Dim Min As Variant
Dim stl As Integer
Dim str As Integer
 stl = InputBox("Введите количество столбцов")
 str = InputBox("Введите количество строк")
 For i = 1 To stl
  For j = 1 To str
   Sheets("Лист1").Cells(i, j) = InputBox("Введите" & j & "элемент" & i & "строки")
 Next j
 Next i
 
myArray = Selection
For i = 1 To UBound(myArray, 1)
    Max = myArray(i, 1)
    Min = myArray(i, 1)
    For j = 1 To UBound(myArray, 2)
        If myArray(i, j) > Max Then
            Max = myArray(i, j)
        ElseIf myArray(i, j) < Min Then
            Min = myArray(i, j)
        End If
    Next j
    Cells(i, 10).Value = "max" & " " & Max & " " & "min" & " " & Min
Next i
End Sub
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.02.2011, 21:00
dimok5,
этот код рассчитан, если выделено более 1 ячейки, а ячейки смежные.
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 21:05  [ТС]
Цитата Сообщение от Busine2009 Посмотреть сообщение
dimok5,
этот код рассчитан, если выделено более 1 ячейки, а ячейки смежные.
Так вроде как и выделяю больше 1 ячейки и они все смежные.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
23.02.2011, 21:42
Предлагаю функцию нахождения максимума в несвязанных диапазонах(до 30 штук)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Function Min_D(ParamArray myArray())
Dim Q
Dim J
Dim W
Min_D = myArray(0)(1, 1)
For J = 0 To UBound(myArray)
W = myArray(J)
    For Each Q In myArray(J)
        If Min_D > Q Then Min_D = Q
    Next
Next
End Function
По её подобию можно сделать и мунимум
0
2 / 2 / 1
Регистрация: 04.10.2010
Сообщений: 85
23.02.2011, 21:56  [ТС]
Цитата Сообщение от Alex77755 Посмотреть сообщение
Предлагаю функцию нахождения максимума в несвязанных диапазонах(до 30 штук)
Хм...интересно, но мне нужно связанный диапазон
Busine2009, я разобрался в вашем коде. А можно как -то реализавать выделение ячеек не до начала выполнения программы, а сразу после ввода элементов массива?
0
2309 / 1541 / 115
Регистрация: 13.06.2009
Сообщений: 5,575
23.02.2011, 22:00
dimok5,
вот так заполните массив из выделенного диапазона:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub m_1()
Dim myArray() As Single
Dim i As Long
Dim j As Long
'1 To используется для удобства.
ReDim myArray(1 To Selection.Rows.Count, 1 To Selection.Columns.Count)
For i = 1 To Selection.Cells.Count
    For j = 1 To Selection.Columns.Count
        myArray(i, j) = Selection.Cells(i, j)
    Next j
Next i
End Sub
Цитата Сообщение от dimok5 Посмотреть сообщение
А можно как -то реализавать выделение ячеек не до начала выполнения программы, а сразу после ввода элементов массива?
разбейте код на 2 кода. После первого кода вручную выделяйте нужный диапазон ячеек.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2011, 22:00
Помогаю со студенческими работами здесь

VBA парсер выдает ошибку vba excel Run-time error '-2147319783 (80028019) и "microsoft ожидает пока другое приложение за
Добрый день, делаю свой первый парсер. Выдает ошибку vba excel Run-time error '-2147319783 (80028019) . одну категорию по каждому товару...

Объекты в Excel
Объект Application (Приложение) занимает самый верхний уровень иерархии объектов Excel. Объект Application управляет установками и...

Как сделать объекты в VBA чтобы были методы, свойства, события?
подскажите как сделать объекты в VBA чтобы были методы, свойства события. Как в Делфи сделанно.

Функциия excel в функции excel на vba
С помощью мастера записи матросов получил следующую функцию ActiveCell.FormulaR1C1 = &quot;=IFERROR...

Vba экспорт в excel по vba-фильтру
Работает VBA-фильтр, как сделать экспорт выбранных данных в Excel по средствам кнопки. Прошу о помощи


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru