Я задавал здесь вопрос и мне Mikael очень помог написав код для поиска даты с 1 листа на 2 листе и при ненахождении создается столбец. Как примерно нужно изменить код чтобы он искал сначала по дате и если дата такая есть то потом искал по другому значению и вставлял столбец рядом с ним а не от столбца D Выглядит это так
[vba]
Код
With Results ' If .Cells.Find(test.[c2]) Is Nothing and .Cells.Find(test.[c9] is nothing then Пробовал так но почему-то не работает( If .Cells.Find(test.[c2]) Is Nothing Then ' поиск ячейки с датой и временем. .Columns("D").Insert xlRight, xlFormatFromRightOrBelow ' .Cells.Find(test.[c9]).Offset(, 1).EntireColumn.Insert xlToLeft ' .Cells.Find(test.[c9]).Offset(, 1).Value = Worksheets("test").[c2] .[d7].Value = test.[c2] 'ячейка с датой и времем .[d3:d7].HorizontalAlignment = xlCenterAcrossSelection .[d1].Resize(24).Borders.Weight = xlMedium .Range("D8:D24").Interior.Color = RGB(120, 7, 7) .[d4].Value = test.[a6] .[d5].Value = test.[a4] .[d6].Value = "значение" .[d1].Value = test.[c9] ' тут находится как раз номер маршрута по которому нужно тоже искать .[d2].Value = test.[a10] .[d5].ColumnWidth = 32 Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn) End If End With With Results Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn) End With
[/vba]
Работают в паре
Доброе утро.
Я задавал здесь вопрос и мне Mikael очень помог написав код для поиска даты с 1 листа на 2 листе и при ненахождении создается столбец. Как примерно нужно изменить код чтобы он искал сначала по дате и если дата такая есть то потом искал по другому значению и вставлял столбец рядом с ним а не от столбца D Выглядит это так
[vba]
Код
With Results ' If .Cells.Find(test.[c2]) Is Nothing and .Cells.Find(test.[c9] is nothing then Пробовал так но почему-то не работает( If .Cells.Find(test.[c2]) Is Nothing Then ' поиск ячейки с датой и временем. .Columns("D").Insert xlRight, xlFormatFromRightOrBelow ' .Cells.Find(test.[c9]).Offset(, 1).EntireColumn.Insert xlToLeft ' .Cells.Find(test.[c9]).Offset(, 1).Value = Worksheets("test").[c2] .[d7].Value = test.[c2] 'ячейка с датой и времем .[d3:d7].HorizontalAlignment = xlCenterAcrossSelection .[d1].Resize(24).Borders.Weight = xlMedium .Range("D8:D24").Interior.Color = RGB(120, 7, 7) .[d4].Value = test.[a6] .[d5].Value = test.[a4] .[d6].Value = "значение" .[d1].Value = test.[c9] ' тут находится как раз номер маршрута по которому нужно тоже искать .[d2].Value = test.[a10] .[d5].ColumnWidth = 32 Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn) End If End With With Results Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn) End With
Amon, тут Вам трудно помочь. Кусок кода нерабочий, что такое "по другому значению" и откуда оно возьмётся — неизвестно, что такое "рядом" (выше? ниже? левее? правее? в ближайшей (в какую сторону?) свободной ячейке?) — тоже непонятно. Могу только дать самые общие наметки. Проверка отсутствия даты у Вас уже есть: [vba]
Код
If .Cells.Find(test.[c2]) Is Nothing Then
[/vba] Теперь к этому Then'у нужно приписать некий Else (его в коде нет). Для этого целесообразней сделать так. If меняем на [vba]
Код
Dim rng As Range Set rng=.Cells.Find(test.[c2]) If rng Is Nothing Then
[/vba] И тогда в Вашем Else код [vba]
Код
rng.Offset(,1)
[/vba] даст Вам ячейку справа (.Value не нужно) [vba]
Код
rng.Offset(1,0)
[/vba] даст Вам ячейку снизу [vba]
Код
rng.Row
[/vba] вернёт ряд с датой, [vba]
Код
rng.Column
[/vba] колонку, если эти данные Вам нужны. [vba]
Код
Set rng=.Cells.Find("другое значение")
[/vba] поиск по другому значению. Нахождение "рядом" описано выше. Ближайшая свободная ячейка ниже — [vba]
Код
rng.End(xlDown).Offset(,1)
[/vba] Правее — [vba]
Код
rng.End(xlToRight).Offset(1,0)
[/vba]
Amon, тут Вам трудно помочь. Кусок кода нерабочий, что такое "по другому значению" и откуда оно возьмётся — неизвестно, что такое "рядом" (выше? ниже? левее? правее? в ближайшей (в какую сторону?) свободной ячейке?) — тоже непонятно. Могу только дать самые общие наметки. Проверка отсутствия даты у Вас уже есть: [vba]
Код
If .Cells.Find(test.[c2]) Is Nothing Then
[/vba] Теперь к этому Then'у нужно приписать некий Else (его в коде нет). Для этого целесообразней сделать так. If меняем на [vba]
Код
Dim rng As Range Set rng=.Cells.Find(test.[c2]) If rng Is Nothing Then
[/vba] И тогда в Вашем Else код [vba]
Код
rng.Offset(,1)
[/vba] даст Вам ячейку справа (.Value не нужно) [vba]
Код
rng.Offset(1,0)
[/vba] даст Вам ячейку снизу [vba]
Код
rng.Row
[/vba] вернёт ряд с датой, [vba]
Код
rng.Column
[/vba] колонку, если эти данные Вам нужны. [vba]
Код
Set rng=.Cells.Find("другое значение")
[/vba] поиск по другому значению. Нахождение "рядом" описано выше. Ближайшая свободная ячейка ниже — [vba]
StoTisteg, Спасибо за ответ. По другому значению это ячейка [vba]
Код
(test.[c9])
[/vba] которуя нужно найти в том же столбце где и дата, и мне нужно чтобы он не просто если найдет дату искал еще другое значение а создавал столбец левее от нее, а не просто справа от столбца D как у меня написано [vba]
[/vba] Дата которая ищется в документе находится в ячейке всегда D7, а второе значение находится в ячейке D1 .
StoTisteg, Спасибо за ответ. По другому значению это ячейка [vba]
Код
(test.[c9])
[/vba] которуя нужно найти в том же столбце где и дата, и мне нужно чтобы он не просто если найдет дату искал еще другое значение а создавал столбец левее от нее, а не просто справа от столбца D как у меня написано [vba]
если найдет дату искал еще другое значение а создавал столбец левее от нее
Что такое "неё"? Если "даты", то зачем искать другое значение? Сформулируйте задачу яснее. Вот мы нашли дату. Где именно нужно искать другое значение и левее чего вставлять колонку?
если найдет дату искал еще другое значение а создавал столбец левее от нее
Что такое "неё"? Если "даты", то зачем искать другое значение? Сформулируйте задачу яснее. Вот мы нашли дату. Где именно нужно искать другое значение и левее чего вставлять колонку?StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Понедельник, 21.05.2018, 16:21
[/vba] в том же столбце что и другое значение [vba]
Код
test.[c9]
[/vba] , Сначала искать дату, если не нашел создается столбец с датой в столбце D , Если нашел дату то ищет второе значение, Если не нашел то так же как и первый раз создается столбец от D , а если нашел дату и второе значение тогда создается столбец слева от второго значения.
StoTisteg, Дата [vba]
Код
test.[c2]
[/vba] в том же столбце что и другое значение [vba]
Код
test.[c9]
[/vba] , Сначала искать дату, если не нашел создается столбец с датой в столбце D , Если нашел дату то ищет второе значение, Если не нашел то так же как и первый раз создается столбец от D , а если нашел дату и второе значение тогда создается столбец слева от второго значения.Amon
ищет на всём листе, а Вам, насколько я понял, нужно искать в той колонке, где находится rng. Я же Вам написал: Set rng=.Columns(rng.Column).Find("другое значение")
У меня VBA постоянно ругается на эту строку Object variable or With block variable not set Написано у меня так сейчас [vba]
ищет на всём листе, а Вам, насколько я понял, нужно искать в той колонке, где находится rng. Я же Вам написал: Set rng=.Columns(rng.Column).Find("другое значение")
У меня VBA постоянно ругается на эту строку Object variable or With block variable not set Написано у меня так сейчас [vba]
На листе по другим столбцам. Столбцы выглядят так Дата допустим (18.05.2018) и второе значение "1 из 6" Дата допустим (18.05.2018) и второе значение "2 из 6" Дата допустим (18.05.2018) и второе значение "3 из 6" Дата допустим (18.05.2018) и второе значение "4 из 6" Дата допустим (18.05.2018) и второе значение "5 из 6" Дата допустим (18.05.2018) и второе значение "6 из 6" И Если я снова буду запускать макрос 18.05.2018 го и у меня второе значение будет допусти " 3 из 6" То чтобы столбец создавался слева от столбца в котором уже есть дата 18.05.2018 и второе значение "3 из 6"
На листе по другим столбцам. Столбцы выглядят так Дата допустим (18.05.2018) и второе значение "1 из 6" Дата допустим (18.05.2018) и второе значение "2 из 6" Дата допустим (18.05.2018) и второе значение "3 из 6" Дата допустим (18.05.2018) и второе значение "4 из 6" Дата допустим (18.05.2018) и второе значение "5 из 6" Дата допустим (18.05.2018) и второе значение "6 из 6" И Если я снова буду запускать макрос 18.05.2018 го и у меня второе значение будет допусти " 3 из 6" То чтобы столбец создавался слева от столбца в котором уже есть дата 18.05.2018 и второе значение "3 из 6"Amon
Очень жаль то что я не могу прикрепить файл.. в общем он создает и колонку Д и справа. я не понимаю почему так происходит. Как можно уменьшить документ? Я вроде все убрал оттуда... остались только фигуры
Очень жаль то что я не могу прикрепить файл.. в общем он создает и колонку Д и справа. я не понимаю почему так происходит. Как можно уменьшить документ? Я вроде все убрал оттуда... остались только фигурыAmon