в общем разобрался может кому будет полезно оставлю тут
Скрытый текст |
|---|
| Sub ОбновитьПробеги_ПоНомеру() Dim wb As Workbook Dim wsTO As Worksheet Dim lastDataSheet As Worksheet Dim maxDate As Double Dim ws As Worksheet Dim shtDate As Double Dim i As Long Dim vehicleNumber As String Dim foundCell As Range Dim lastRowTO As Long Dim lastRowData As Long Set wb = ThisWorkbook Set wsTO = wb.Worksheets("ТО") ' Находим последний лист с датой maxDate = 0 For Each ws In wb.Worksheets If IsDate(ws.Name) Then shtDate = CDbl(CDate(ws.Name)) If shtDate > maxDate Then maxDate = shtDate Set lastDataSheet = ws End If End If Next If lastDataSheet Is Nothing Then MsgBox "Нет листов с датами.", vbExclamation Exit Sub End If ' Последняя строка на листе "ТО" в колонке C (номера транспортных средств) lastRowTO = wsTO.Cells(wsTO.Rows.Count, "C").End(xlUp).Row ' Последняя строка на листе с данными в колонке C lastRowData = lastDataSheet.Cells(lastDataSheet.Rows.Count, "C").End(xlUp).Row For i = 2 To lastRowTO vehicleNumber = wsTO.Cells(i, "C").Value If vehicleNumber <> "" Then ' Ищем номер транспортного средства в листе с датой Set foundCell = lastDataSheet.Range("C2:C" & lastRowData).Find(What:=vehicleNumber, LookIn:=xlValues, LookAt:=xlWhole) If Not foundCell Is Nothing Then ' Если нашли и пробег не пустой, обновляем пробег If Not IsEmpty(lastDataSheet.Cells(foundCell.Row, "F").Value) Then wsTO.Cells(i, "F").Value = lastDataSheet.Cells(foundCell.Row, "F").Value End If ' Если пробег в новом листе пустой — не обновлять, оставить старое значение Else ' Ничего не делаем — пробег в листе "ТО" остаётся прежним End If End If Next i MsgBox "Пробеги обновлены по последним доступным данным.", vbInformation End Sub |
В листе "ТО":
- В колонке C — номера транспортных средств
- В колонке F — нужно заносить пробеги
- В колонке C — номера транспортных средств
В листах с датами:
- В колонке C — номера транспортных средств
- В колонке F — пробеги
- В колонке C — номера транспортных средств
Необходимо найти каждое транспортное средство из "ТО" в последнем по дате листе и, если найдено, занести его пробег из колонки F этого листа в колонку F листа "ТО".