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

Вход

Регистрация

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

 

= Мир MS Excel/Динамический массив - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Динамический массив (Макросы/Sub)
Динамический массив
lolo25 Дата: Четверг, 23.03.2023, 16:47 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

Задание:Создать динамический массив, посчитать сумму каждой строки,найти максимальную сумму строки и окрасить ее в красный цвет.Я нашел максимальную сумму, но не знаю как окрасить в красный.Что нужно добавить после If Sum > Max Then Max = Sum?
[vba]
Код
Sub massivchik()
Dim a() As Integer
Dim j, i, m, n As Integer
Worksheets("Лист1").Select
Cells.Clear
n = InputBox("Введите количество строк")
m = InputBox("Введите количество столбцов")
ReDim a(1 To n, 1 To m)
For i = 1 To n
For j = 1 To m
a(i, j) = Int(100 * Rnd)
Next j
Next i
For i = 1 To n
For j = 1 To m
Cells(i + 1, j + 1) = a(i, j)
Cells(i + 1, j + 1).Interior.Color = vbGreen
Cells(i + 1, j + 1).Borders.Color = vbBlack
Next j
Next i
For i = 1 To n
Sum = 0
For j = 1 To m
Sum = Sum + a(i, j)
Next j
Cells(i + 1, m + 2) = Sum
Cells(i + 1, m + 2).Interior.Color = vbCyan
Cells(i + 1, m + 2).Borders.Color = vbBlack
If Sum > Max Then Max = Sum
Next i
MsgBox Max
End Sub
[/vba]


Сообщение отредактировал Serge_007 - Четверг, 23.03.2023, 17:02
 
Ответить
СообщениеЗадание:Создать динамический массив, посчитать сумму каждой строки,найти максимальную сумму строки и окрасить ее в красный цвет.Я нашел максимальную сумму, но не знаю как окрасить в красный.Что нужно добавить после If Sum > Max Then Max = Sum?
[vba]
Код
Sub massivchik()
Dim a() As Integer
Dim j, i, m, n As Integer
Worksheets("Лист1").Select
Cells.Clear
n = InputBox("Введите количество строк")
m = InputBox("Введите количество столбцов")
ReDim a(1 To n, 1 To m)
For i = 1 To n
For j = 1 To m
a(i, j) = Int(100 * Rnd)
Next j
Next i
For i = 1 To n
For j = 1 To m
Cells(i + 1, j + 1) = a(i, j)
Cells(i + 1, j + 1).Interior.Color = vbGreen
Cells(i + 1, j + 1).Borders.Color = vbBlack
Next j
Next i
For i = 1 To n
Sum = 0
For j = 1 To m
Sum = Sum + a(i, j)
Next j
Cells(i + 1, m + 2) = Sum
Cells(i + 1, m + 2).Interior.Color = vbCyan
Cells(i + 1, m + 2).Borders.Color = vbBlack
If Sum > Max Then Max = Sum
Next i
MsgBox Max
End Sub
[/vba]

Автор - lolo25
Дата добавления - 23.03.2023 в 16:47
_Boroda_ Дата: Четверг, 23.03.2023, 17:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Не стоит называть переменные Sum и Max. Есть такие внутренние названия в VBA. Я вот, например, чтобы точно не ошибиться, переменные обзываю с нижним подчеркиванием, вот так - "Sum_"
И, кстати, Вы не всё объявили. А второй Дим вообще неверный - там Интеджер только n, остальные Вариант

[vba]
Код
Sub massivchik()
    Dim a()         As Integer
    Dim j, i, m, n  As Integer
    Worksheets("Лист1").Select
    Cells.Clear
    n = InputBox("Введите количество строк")
    m = InputBox("Введите количество столбцов")
    Application.ScreenUpdating = False
    ReDim a(1 To n, 1 To m + 1)
    For i = 1 To n
        For j = 1 To m
            a(i, j) = Int(100 * Rnd)
        Next j
    Next i
'    For i = 1 To n
'        For j = 1 To m
'            Cells(i + 1, j + 1) = a(i, j)
'            Cells(i + 1, j + 1).Interior.Color = vbGreen
'            Cells(i + 1, j + 1).Borders.Color = vbBlack
'        Next j
'    Next i
    For i = 1 To n
        Sum = 0
        For j = 1 To m
            Sum = Sum + a(i, j)
        Next j
        a(i, m + 1) = Sum
'        Cells(i + 1, m + 2).Interior.Color = vbCyan
'        Cells(i + 1, m + 2).Borders.Color = vbBlack
        If Sum > Max Then
            Max = Sum
            r = i
        End If
    Next i
    Cells(2, 2).Resize(n, m + 1) = a
    Cells(2, 2).Resize(n, m + 1).Borders.Color = vbBlack
    Cells(2, 2).Resize(n, m).Interior.Color = vbGreen
    Cells(2, m + 2).Resize(n).Interior.Color = vbCyan
    Cells(r + 1, 2).Resize(, m + 1).Interior.Color = vbRed
    Application.ScreenUpdating = True
    MsgBox Max
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНе стоит называть переменные Sum и Max. Есть такие внутренние названия в VBA. Я вот, например, чтобы точно не ошибиться, переменные обзываю с нижним подчеркиванием, вот так - "Sum_"
И, кстати, Вы не всё объявили. А второй Дим вообще неверный - там Интеджер только n, остальные Вариант

[vba]
Код
Sub massivchik()
    Dim a()         As Integer
    Dim j, i, m, n  As Integer
    Worksheets("Лист1").Select
    Cells.Clear
    n = InputBox("Введите количество строк")
    m = InputBox("Введите количество столбцов")
    Application.ScreenUpdating = False
    ReDim a(1 To n, 1 To m + 1)
    For i = 1 To n
        For j = 1 To m
            a(i, j) = Int(100 * Rnd)
        Next j
    Next i
'    For i = 1 To n
'        For j = 1 To m
'            Cells(i + 1, j + 1) = a(i, j)
'            Cells(i + 1, j + 1).Interior.Color = vbGreen
'            Cells(i + 1, j + 1).Borders.Color = vbBlack
'        Next j
'    Next i
    For i = 1 To n
        Sum = 0
        For j = 1 To m
            Sum = Sum + a(i, j)
        Next j
        a(i, m + 1) = Sum
'        Cells(i + 1, m + 2).Interior.Color = vbCyan
'        Cells(i + 1, m + 2).Borders.Color = vbBlack
        If Sum > Max Then
            Max = Sum
            r = i
        End If
    Next i
    Cells(2, 2).Resize(n, m + 1) = a
    Cells(2, 2).Resize(n, m + 1).Borders.Color = vbBlack
    Cells(2, 2).Resize(n, m).Interior.Color = vbGreen
    Cells(2, m + 2).Resize(n).Interior.Color = vbCyan
    Cells(r + 1, 2).Resize(, m + 1).Interior.Color = vbRed
    Application.ScreenUpdating = True
    MsgBox Max
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 23.03.2023 в 17:27
lolo25 Дата: Воскресенье, 26.03.2023, 18:40 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

_Boroda_, спасибо вам большое, а вы не знаете, можно ли сделать подобное без Resize? И чтобы выделялась не вся строка с максимальным значением,а только само максимальное значение среди сумм других строк)
 
Ответить
Сообщение_Boroda_, спасибо вам большое, а вы не знаете, можно ли сделать подобное без Resize? И чтобы выделялась не вся строка с максимальным значением,а только само максимальное значение среди сумм других строк)

Автор - lolo25
Дата добавления - 26.03.2023 в 18:40
_Boroda_ Дата: Понедельник, 27.03.2023, 09:35 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Конечно можно
Перепишите строку
[vba]
Код
Cells(r + 1, 2).Resize(, m + 1).Interior.Color = vbRed
[/vba]
вот так
[vba]
Код
Cells(r + 1, m + 2).Interior.Color = vbRed
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКонечно можно
Перепишите строку
[vba]
Код
Cells(r + 1, 2).Resize(, m + 1).Interior.Color = vbRed
[/vba]
вот так
[vba]
Код
Cells(r + 1, m + 2).Interior.Color = vbRed
[/vba]

Автор - _Boroda_
Дата добавления - 27.03.2023 в 09:35
lolo25 Дата: Понедельник, 27.03.2023, 11:36 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 20% ±

_Boroda_, а у вывода самого массива и сумм строк убрать Resize можно? Чтобы resize вообще не было в коде
 
Ответить
Сообщение_Boroda_, а у вывода самого массива и сумм строк убрать Resize можно? Чтобы resize вообще не было в коде

Автор - lolo25
Дата добавления - 27.03.2023 в 11:36
_Boroda_ Дата: Понедельник, 27.03.2023, 12:10 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
вместо
[vba]
Код
Cells(2, 2).Resize(n, m + 1) = a
[/vba]
напишите
[vba]
Код
Range("B2:" & Cells(n + 1, m + 2).Address) = a
[/vba]
и с остальными также


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениевместо
[vba]
Код
Cells(2, 2).Resize(n, m + 1) = a
[/vba]
напишите
[vba]
Код
Range("B2:" & Cells(n + 1, m + 2).Address) = a
[/vba]
и с остальными также

Автор - _Boroda_
Дата добавления - 27.03.2023 в 12:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Динамический массив (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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