Доброго времени суток, подскажите пожалуйста, вот есть задача - Дан список дневных и ночных температур за неделю. Определить день, с максимальной разницей дневных и ночных температур, решить через массивы, алгоритм то понятен, из наибольших температур, пускай это будут дневные, вычитаем наименьшие, пускай будут ночные, можно даже занести эту разницу в дополнительный столбец, и в этом столбце ищем наибольшее значение, но как занести эти значения из столбцов в массивы? то что у меня получилось во вложении, но это не правильно т.к. через locals window видно что заносятся одни нули, и только последнее значение заносится верно ... где ошибка, не пойму ....
Код
Sub температура() Dim DNedX() As String
Dim DenX() As Integer, NochX() As Integer, RaznX() As Integer
Dim n, i As Integer
Dim max, min As Integer
'пересчет строк в каждом массиве (столбце)
n = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To n
ReDim DNedX(n)
ReDim DenX(n)
ReDim NochX(n)
ReDim RaznX(n)
Next
'присваивание массивам значений и расчет разницы с занесением в новый массив
For i = 1 To n
DNedX(n) = Cells(i, 1).Value
DenX(n) = Cells(i, 2).Value
NochX(n) = Cells(i, 3).Value
RaznX(n) = Cells(i, 4).Value
RaznX(n) = DenX(n) - NochX(n)
Cells(i, 4) = RaznX(n)
Next
'поиск максимального
ReDim Preserve RaznX(n)
max = i
For i = 1 To n
If RaznX(i) > max Then max = RaznX(i)
Next
'вывод результата
For i = 1 To n
Cells(1, 6).Value = "Максимальная разница в: " & DNedX(i)
Cells(1, 7).Value = "Равна: " & RaznX(i)
Cells(1, 6).Columns.AutoFit
Cells(1, 7).Columns.AutoFit
Next
End Sub
Артем Кузнецов написал: VBA сделать массив из значений имеющихся на листе
вот этот макрос:
Код
Sub GetData()
Dim a
a = [a1].CurrentRegion
End Sub
примет значения с листа в массив а (собственно, вы спрашивали как значения с листа получить в массив)
а вот этот макрос:
Код
Sub MaxDiff()
Dim a, r&, d&, m#
a = [a1].CurrentRegion
For r = 1 To UBound(a)
If a(r, 2) - a(r, 3) > m Then m = a(r, 2) - a(r, 3): d = r
Next
MsgBox "максимальная разница = " & m & vbLf & "день - " & a(d, 1)
End Sub
определит максимальную разницу температур и укажет день, когда это случилось
всем спасибо, что тут сказать, первый код соответствует подписи )))))))) Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! )))
кто нибудь, подскажите пожалуйста, в коде от buchlotnik запись If rc > rm Then rm = rc : rd = arr(i, 1) как еще можно было бы записать это без : ? просто в справке написано что : используется просто для записи нескольких операторов в одной строчке т.е. по идеи можно просто перенести часть rd = arr(i, 1) на другую строчку, удалить : и все будет тоже самое, но на самом деле, тогда макрос работает по другому, тоже самое кстати и в коде Ігоря Гончаренкоm = a(r, 2) - a(r, 3): d = r ....