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


Sub ProcessDataWithMultipleKeys()
    Dim wsMain As Worksheet
    Dim dictMain As Object, dictExample As Object
    Dim filePath As String, exampleFilePath As String
    Dim fileNo As Integer, line As String
    Dim mainKey As String, valueFromB As String, valueFromD As String, valueFromC As String
    Dim i As Long, lastRow As Long
    Dim compositeKey As String, coeff As String
    
    ' Настройка листа
    Set wsMain = ThisWorkbook.Sheets("Основной")
    
    ' Создаем словари
    Set dictMain = CreateObject("Scripting.Dictionary")
    Set dictExample = CreateObject("Scripting.Dictionary")
    
    ' Путь к основному файлу данных
    filePath = "C:\Путь\К\Файлу\M08.txt"
    
    ' Загрузка данных из основного файла в словарь
    fileNo = FreeFile()
    Open filePath For Input As #fileNo
    Do While Not EOF(fileNo)
        Line Input #fileNo, line
        line = Trim(line)
        
        If Len(line) >= 29 Then
            ' Извлекаем и очищаем данные
            mainKey = Replace(Left(line, 12), " ", "") ' Колонка A
            valueFromB = Mid(line, 13, 3)  ' Колонка B
            valueFromD = Mid(line, 16, 3)  ' Колонка D
            valueFromC = Mid(line, 19, 11) ' Колонка F (коэффициент)
            
            ' Создаем составной ключ
            compositeKey = mainKey & "|" & valueFromB & "|" & valueFromD
            
            ' Сохраняем коэффициент в словарь
            dictMain(compositeKey) = valueFromC
        End If
    Loop
    Close #fileNo
    
    ' Путь к файлу "Пример"
    exampleFilePath = "C:\Путь\К\Файлу\Пример.txt"
    
    ' Загрузка данных из файла "Пример"
    fileNo = FreeFile()
    Open exampleFilePath For Input As #fileNo
    Do While Not EOF(fileNo)
        Line Input #fileNo, line
        line = Trim(line)
        
        If Len(line) >= 18 Then
            ' Предполагаем следующие позиции в файле:
            ' Колонка C: 1-12 (ключ)
            ' Колонка N: 13-15 (значение B)
            ' Колонка F: 16-18 (значение D)
            mainKey = Replace(Left(line, 12), " ", "")
            valueFromB = Mid(line, 13, 3)
            valueFromD = Mid(line, 16, 3)
            
            ' Создаем составной ключ
            compositeKey = mainKey & "|" & valueFromB & "|" & valueFromD
            
            ' Помечаем ключ как существующий
            dictExample(compositeKey) = True
        End If
    Loop
    Close #fileNo
    
    ' Проверка соответствий и запись коэффициентов
    lastRow = wsMain.Cells(wsMain.Rows.Count, "A").End(xlUp).Row
    For i = 5 To lastRow
        ' Извлекаем и очищаем данные
        mainKey = Replace(wsMain.Cells(i, "A").Value, " ", "")
        valueFromB = wsMain.Cells(i, "B").Value
        valueFromD = wsMain.Cells(i, "D").Value
        
        ' Создаем составной ключ
        compositeKey = mainKey & "|" & valueFromB & "|" & valueFromD
        
        ' Проверяем соответствие
        If dictExample.Exists(compositeKey) Then
            ' Если соответствие найдено, записываем коэффициент
            If dictMain.Exists(compositeKey) Then
                wsMain.Cells(i, "G").Value = dictMain(compositeKey)
            Else
                wsMain.Cells(i, "G").Value = "Коэффициент не найден"
            End If
        Else
            ' Если соответствие не найдено
            wsMain.Cells(i, "G").Value = "Рассогласование"
        End If
    Next i
    
    MsgBox "Обработка данных завершена!"
End Sub