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