Добрый вечер. Помогите, пожалуйста, с графиком поездок автомобиля. Есть график с отображением дат. Есть транспорт и ездки этого транспорта по датам. Необходимо в графике на Листе1 прописать формулу, чтобы проставлялись страны из колонки место разгрузки -(I), только в те даты когда тягач был в рейсе, с учетом перецепок, то есть если стоит перецепка, значит он отдал груз другому автомобилю и освободился, в графике у первого должно стоять пусто в дату после перецепки, а у второго тягоча (перецепки) началась ездка, значит у него должна быть закрашена ячейка. Заранее спасибо.
Добрый вечер. Помогите, пожалуйста, с графиком поездок автомобиля. Есть график с отображением дат. Есть транспорт и ездки этого транспорта по датам. Необходимо в графике на Листе1 прописать формулу, чтобы проставлялись страны из колонки место разгрузки -(I), только в те даты когда тягач был в рейсе, с учетом перецепок, то есть если стоит перецепка, значит он отдал груз другому автомобилю и освободился, в графике у первого должно стоять пусто в дату после перецепки, а у второго тягоча (перецепки) началась ездка, значит у него должна быть закрашена ячейка. Заранее спасибо.serena6025
Что-то башка сегодня не соображает, наверное потому что пятница, все мысли не о том Получилась большая, может кто-то короче напишет (для удобства написания перенес на один лист, на новый сами перенесёте). Наверное это лучше использовать VBA или PQ
Условное форматирование не стал писать, думалка не думает Блин, формула косячно работает если есть повторы в тягачах сцепки (удалять не буду, может исправите сами). Вот макрос написал, вроде работает правильно [vba]
Код
Sub Макрос3() Dim arr1 As Variant, arr2 As Variant, rng As Range, n As Integer, i As Integer lr1 = Worksheets("Data").Cells(Rows.Count, 2).End(xlUp).Row arr1 = Worksheets("Data").Range(Worksheets("Data").Cells(2, 2), Worksheets("Data").Cells(lr1, 9)) With Worksheets("Лист1") lr2 = .Cells(Rows.Count, 2).End(xlUp).Row lс2 = .Cells(2, Columns.Count).End(xlToLeft).Column arr2 = .Range(Worksheets("Лист1").Cells(3, 2), .Cells(lr2, lс2)) .Range(Worksheets("Лист1").Cells(3, 3), .Cells(lr2, lс2)).Interior.Color = 16777215 .Range(Worksheets("Лист1").Cells(3, 3), .Cells(lr2, lс2)) = "" For n = 1 To UBound(arr1) auto1 = arr1(n, 1) auto2 = arr1(n, 5) d1 = arr1(n, 3) d2 = arr1(n, 4) d3 = arr1(n, 6) pg = arr1(n, 7) rz = arr1(n, 8) For i = 1 To UBound(arr2) If arr2(i, 1) = auto1 Then arr2(i, DatePart("y", CDate(d1)) + 1) = pg If d2 = "" Then arr2(i, DatePart("y", CDate(d3)) + 1) = rz If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2))) Else arr2(i, DatePart("y", CDate(d2)) + 1) = pg If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d2)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d2)) + 2))) End If ElseIf arr2(i, 1) = auto2 Then arr2(i, DatePart("y", CDate(d2)) + 1) = pg arr2(i, DatePart("y", CDate(d3)) + 1) = rz If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d2)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d2)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2))) End If Next Next .Range(.Cells(3, 2), .Cells(lr2, lс2)) = arr2 End With If Not rng Is Nothing Then rng.Interior.Color = vbRed End Sub
[/vba]
Что-то башка сегодня не соображает, наверное потому что пятница, все мысли не о том Получилась большая, может кто-то короче напишет (для удобства написания перенес на один лист, на новый сами перенесёте). Наверное это лучше использовать VBA или PQ
Условное форматирование не стал писать, думалка не думает Блин, формула косячно работает если есть повторы в тягачах сцепки (удалять не буду, может исправите сами). Вот макрос написал, вроде работает правильно [vba]
Код
Sub Макрос3() Dim arr1 As Variant, arr2 As Variant, rng As Range, n As Integer, i As Integer lr1 = Worksheets("Data").Cells(Rows.Count, 2).End(xlUp).Row arr1 = Worksheets("Data").Range(Worksheets("Data").Cells(2, 2), Worksheets("Data").Cells(lr1, 9)) With Worksheets("Лист1") lr2 = .Cells(Rows.Count, 2).End(xlUp).Row lс2 = .Cells(2, Columns.Count).End(xlToLeft).Column arr2 = .Range(Worksheets("Лист1").Cells(3, 2), .Cells(lr2, lс2)) .Range(Worksheets("Лист1").Cells(3, 3), .Cells(lr2, lс2)).Interior.Color = 16777215 .Range(Worksheets("Лист1").Cells(3, 3), .Cells(lr2, lс2)) = "" For n = 1 To UBound(arr1) auto1 = arr1(n, 1) auto2 = arr1(n, 5) d1 = arr1(n, 3) d2 = arr1(n, 4) d3 = arr1(n, 6) pg = arr1(n, 7) rz = arr1(n, 8) For i = 1 To UBound(arr2) If arr2(i, 1) = auto1 Then arr2(i, DatePart("y", CDate(d1)) + 1) = pg If d2 = "" Then arr2(i, DatePart("y", CDate(d3)) + 1) = rz If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2))) Else arr2(i, DatePart("y", CDate(d2)) + 1) = pg If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d2)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d1)) + 2), .Cells(i + 2, DatePart("y", CDate(d2)) + 2))) End If ElseIf arr2(i, 1) = auto2 Then arr2(i, DatePart("y", CDate(d2)) + 1) = pg arr2(i, DatePart("y", CDate(d3)) + 1) = rz If rng Is Nothing Then Set rng = .Range(.Cells(i + 2, DatePart("y", CDate(d2)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2)) Else Set rng = Union(rng, .Range(.Cells(i + 2, DatePart("y", CDate(d2)) + 2), .Cells(i + 2, DatePart("y", CDate(d3)) + 2))) End If Next Next .Range(.Cells(3, 2), .Cells(lr2, lс2)) = arr2 End With If Not rng Is Nothing Then rng.Interior.Color = vbRed End Sub
msi2102, Спасибо Вам огромное! Макрос классный! Попробую перенести в рабочий файл. Я в макросах не сильна, попробую разобраться. Я формулу написала, но она берет только последнюю дату выгрузки, не проставляет дату загрузки и промежуточную(выдает Н/Д) Сама ошибка в середине формулы, видимо что-то не учла. Может кто-нибудь сможет глянуть где ошибка. Сама формула из раб.файла
Проблема именно вот тут по моему -ЕСЛИ(СУММЕСЛИМН('1'!$A:$A;'1'!$AA:$AA;$B14&H$2=0;'1'!$X:$X;$B14&I$2=0); на неё эксель ссылается как на ошибку и я не понимаю почему он ставит только в дату разгрузки страну а остальное Н/Д
msi2102, Спасибо Вам огромное! Макрос классный! Попробую перенести в рабочий файл. Я в макросах не сильна, попробую разобраться. Я формулу написала, но она берет только последнюю дату выгрузки, не проставляет дату загрузки и промежуточную(выдает Н/Д) Сама ошибка в середине формулы, видимо что-то не учла. Может кто-нибудь сможет глянуть где ошибка. Сама формула из раб.файла
Проблема именно вот тут по моему -ЕСЛИ(СУММЕСЛИМН('1'!$A:$A;'1'!$AA:$AA;$B14&H$2=0;'1'!$X:$X;$B14&I$2=0); на неё эксель ссылается как на ошибку и я не понимаю почему он ставит только в дату разгрузки страну а остальное Н/Дserena6025