Загрузка данных


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