Sub ProcessMatrixColumns()
Dim fso As Object
Dim ts As Object
Dim filePath As Variant
Dim content As String
Dim dataArr As Variant
Dim i As Integer, j As Integer
Dim matrix(1 To 5, 1 To 5) As Double
Dim colMaxes(1 To 5) As Double
Dim globalMax As Double
Dim msgText As String
' 1. Выбор файла
filePath = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If filePath = False Then Exit Sub
' 2. Чтение файла
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(filePath, 1)
content = ts.ReadAll
ts.Close
' Очистка от переносов строк и разбивка
content = Replace(content, vbCrLf, " ")
content = Replace(content, vbCr, " ")
content = Replace(content, vbLf, " ")
dataArr = Split(WorksheetFunction.Trim(content), " ")
' Проверка на наличие 25 чисел
If UBound(dataArr) < 24 Then
MsgBox "В файле меньше 25 чисел!", vbCritical
Exit Sub
End If
' 3. Заполнение матрицы и вывод на лист
For i = 1 To 5
For j = 1 To 5
matrix(i, j) = CDbl(dataArr((i - 1) * 5 + (j - 1)))
Cells(i, j).Value = matrix(i, j)
Next j
Next i
' 4. Поиск максимумов в каждом столбце
msgText = "Максимумы по столбцам:" & vbCrLf
For j = 1 To 5
' Инициализируем максимум первого элемента текущего столбца
colMaxes(j) = matrix(1, j)
' Ищем максимум в текущем столбце
For i = 1 To 5
If matrix(i, j) > colMaxes(j) Then
colMaxes(j) = matrix(i, j)
End If
Next i
' Добавляем в строку сообщения
msgText = msgText & "Столбец " & j & ": " & colMaxes(j) & vbCrLf
Next j
' 5. Поиск абсолютного максимума среди найденных максимумов
globalMax = colMaxes(1)
For j = 1 To 5
If colMaxes(j) > globalMax Then
globalMax = colMaxes(j)
End If
Next j
' Вывод результатов
MsgBox msgText & vbCrLf & "Абсолютный максимум: " & globalMax, vbInformation
End Sub