Колонка А - Код Колонка B - Дата Колонка C - Начало времени Колонка D - Конец времени
Файл2 Лист BB
Колонка E - Код Колонка F - Дата Колонка G - Начало времени Колонка H - Конец времени
Подскажите с макросом (может и есть формула) которая если все 4 значения будут сходиться, то запишет их в строку Код-Дата-Начало времени-Конец времени на новом листе
Всем доброго времени суток!
Файл1 Лист АА
Колонка А - Код Колонка B - Дата Колонка C - Начало времени Колонка D - Конец времени
Файл2 Лист BB
Колонка E - Код Колонка F - Дата Колонка G - Начало времени Колонка H - Конец времени
Подскажите с макросом (может и есть формула) которая если все 4 значения будут сходиться, то запишет их в строку Код-Дата-Начало времени-Конец времени на новом листеOh_Nick
Сообщение отредактировал Oh_Nick - Четверг, 24.08.2023, 23:25
Можете показать на примере? Немного не понял логику
Файл Факт Лист by outlets
Колонка W - Код Колонка N - Дата Колонка R - Начало времени Колонка S - Конец времени
Файл Прогноз Лист AP
Колонка E - Код Колонка K - Дата Колонка M - Начало времени Колонка N - Конец времени
Мы должны вносить в таблицу только ту строчка, которая полностью совпадает с двумя файлами , т.е и Код1=Код2=Дата1=Дата2=Начало Времени1=Начало Времени2=Конец времени 1=Конец времени 2. Если что-то не сходится то строчка пустая. Попробовал ввести вашу формулу, мне выдало 0
Можете показать на примере? Немного не понял логику
Файл Факт Лист by outlets
Колонка W - Код Колонка N - Дата Колонка R - Начало времени Колонка S - Конец времени
Файл Прогноз Лист AP
Колонка E - Код Колонка K - Дата Колонка M - Начало времени Колонка N - Конец времени
Мы должны вносить в таблицу только ту строчка, которая полностью совпадает с двумя файлами , т.е и Код1=Код2=Дата1=Дата2=Начало Времени1=Начало Времени2=Конец времени 1=Конец времени 2. Если что-то не сходится то строчка пустая. Попробовал ввести вашу формулу, мне выдало 0
Пример вы не приложили, а если абстрактно, то например так. Макросом скопировать данные в два двухмерных массива, циклом или несколькими циклами сравнить их, по результатам сравнения сформировать третий массив и сбросить его на лист. Правда есть вопросы: - есть ли дубликаты в столбце Код? - упорядочены ли данные в этом же столбце? Приложите небольшой пример, и не обязательно с несколькими файлами.
Пример вы не приложили, а если абстрактно, то например так. Макросом скопировать данные в два двухмерных массива, циклом или несколькими циклами сравнить их, по результатам сравнения сформировать третий массив и сбросить его на лист. Правда есть вопросы: - есть ли дубликаты в столбце Код? - упорядочены ли данные в этом же столбце? Приложите небольшой пример, и не обязательно с несколькими файлами.i691198
Сообщение отредактировал i691198 - Суббота, 26.08.2023, 12:38
Идея выше в посте. Гуглдиск закрыт. Формула в файле не такая как моя идея )) Если делать макросом то просто куча всяких вариантов, чтоб выбрать оптимальный нужно знать задачу целиком.
Идея выше в посте. Гуглдиск закрыт. Формула в файле не такая как моя идея )) Если делать макросом то просто куча всяких вариантов, чтоб выбрать оптимальный нужно знать задачу целиком.Hugo
Oh_Nick, Доброго времени суток. Дело было вечером, делать было нечего. Может вам и не так вам надо, но как вариант. Предположим что у вас есть три книги: Oh_Nick_Book1.xlsx, Oh_Nick_Book2.xlsx и третья книга куда вы хотите копировать совпавшие данные, а именно
Колонка А - Код Колонка B - Дата Колонка C - Начало времени Колонка D - Конец времени
Файл2 Лист BB
Колонка E - Код Колонка F - Дата Колонка G - Начало времени Колонка H - Конец времени
То вот вам код: [vba]
Код
Option Explicit
' все три файла которые указаны в коде должны быть открытыми ' совпашие строки между "Oh_Nick_Book1.xlsx" и "Oh_Nick_Book2.xlsx" заносяться в книгу "Oh_Nick_Main.xlsm" из книги "Oh_Nick_Book1.xlsx" Sub Oh_Nick_Main() Dim i As Long Application.ScreenUpdating = False Dim sh As Worksheet: Set sh = Workbooks("Oh_Nick_Book1.xlsx").Worksheets(1) Application.ScreenUpdating = False
With Workbooks("Oh_Nick_Book2.xlsx").Worksheets(1) Dim iRow As Long: iRow = .Cells(.Rows.Count, "E").End(xlUp).Row
For i = 2 To iRow
If .Cells(i, "E") <> "" Then
If sh.Cells(i, "A").Value = .Cells(i, "E").Value _ And sh.Cells(i, "B").Value = .Cells(i, "F").Value _ And sh.Cells(i, "C").Value = .Cells(i, "G").Value _ And sh.Cells(i, "D").Value = .Cells(i, "H").Value Then Dim ws As Worksheet: Set ws = Workbooks("Oh_Nick_Main.xlsm").Worksheets(1) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
ws.Cells(lastRow, 3).NumberFormat = "h:mm" ws.Cells(lastRow, 4).NumberFormat = "h:mm" End If
End If
iRow = iRow + 1 Next
End With
Application.ScreenUpdating = True End Sub
[/vba] Не судите строго, как понял я так и сделал. Повторюсь, дело было вечером, делать было нечего. Данный код вставить в третью книгу Oh_Nick_Main.xlsm, от туда и запускаете данный макрос. Удачи.
Oh_Nick, Доброго времени суток. Дело было вечером, делать было нечего. Может вам и не так вам надо, но как вариант. Предположим что у вас есть три книги: Oh_Nick_Book1.xlsx, Oh_Nick_Book2.xlsx и третья книга куда вы хотите копировать совпавшие данные, а именно
Колонка А - Код Колонка B - Дата Колонка C - Начало времени Колонка D - Конец времени
Файл2 Лист BB
Колонка E - Код Колонка F - Дата Колонка G - Начало времени Колонка H - Конец времени
То вот вам код: [vba]
Код
Option Explicit
' все три файла которые указаны в коде должны быть открытыми ' совпашие строки между "Oh_Nick_Book1.xlsx" и "Oh_Nick_Book2.xlsx" заносяться в книгу "Oh_Nick_Main.xlsm" из книги "Oh_Nick_Book1.xlsx" Sub Oh_Nick_Main() Dim i As Long Application.ScreenUpdating = False Dim sh As Worksheet: Set sh = Workbooks("Oh_Nick_Book1.xlsx").Worksheets(1) Application.ScreenUpdating = False
With Workbooks("Oh_Nick_Book2.xlsx").Worksheets(1) Dim iRow As Long: iRow = .Cells(.Rows.Count, "E").End(xlUp).Row
For i = 2 To iRow
If .Cells(i, "E") <> "" Then
If sh.Cells(i, "A").Value = .Cells(i, "E").Value _ And sh.Cells(i, "B").Value = .Cells(i, "F").Value _ And sh.Cells(i, "C").Value = .Cells(i, "G").Value _ And sh.Cells(i, "D").Value = .Cells(i, "H").Value Then Dim ws As Worksheet: Set ws = Workbooks("Oh_Nick_Main.xlsm").Worksheets(1) Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1
ws.Cells(lastRow, 3).NumberFormat = "h:mm" ws.Cells(lastRow, 4).NumberFormat = "h:mm" End If
End If
iRow = iRow + 1 Next
End With
Application.ScreenUpdating = True End Sub
[/vba] Не судите строго, как понял я так и сделал. Повторюсь, дело было вечером, делать было нечего. Данный код вставить в третью книгу Oh_Nick_Main.xlsm, от туда и запускаете данный макрос. Удачи.MikeVol
Ученик. Одесса - Украина
Сообщение отредактировал MikeVol - Суббота, 26.08.2023, 20:58
Быстрее будет если заменить And на вложенные If. Ибо зачем проверять далее, если уже sh.Cells(i, "A").Value <> .Cells(i, "E").Value К тому же же очень вряд ли строки в разных файлах будут/должны совпадать... Но эти детали в файлах, которых не видим.
Быстрее будет если заменить And на вложенные If. Ибо зачем проверять далее, если уже sh.Cells(i, "A").Value <> .Cells(i, "E").Value К тому же же очень вряд ли строки в разных файлах будут/должны совпадать... Но эти детали в файлах, которых не видим.Hugo
вносить в таблицу только ту строчка, которая полностью совпадает с двумя файлами , т.е и Код1=Код2=Дата1=Дата2=Начало Времени1=Начало Времени2=Конец времени 1=Конец времени 2
я не понял, просто пропускаем ту строку или же вносим следудуйщюю строку. Ну а про файлы примеры тут беда, сделал сам так как: дело было вечером, делать было нечего.
Hugo, Приветствую вас! Сделал как понял по описанию
вносить в таблицу только ту строчка, которая полностью совпадает с двумя файлами , т.е и Код1=Код2=Дата1=Дата2=Начало Времени1=Начало Времени2=Конец времени 1=Конец времени 2
я не понял, просто пропускаем ту строку или же вносим следудуйщюю строку. Ну а про файлы примеры тут беда, сделал сам так как: дело было вечером, делать было нечего.MikeVol
MikeVol, спасибо, а без макроса возможно сравнить формулой? например
Берем код из столбца А ,проверяем его в столбце B ,если находит идем дальше К коду из столбца А относится дата из столбца C, ее проверяем с датой из столбца D , если находит идем дальше К коду из столбца А относится начало времени из столбца E, ее проверяем с началом времени из столбца F, если находит идем дальше К коду из столбца A относится конец времени из столбца F, его проверяем с концом времени из столбца G и если все ок то записываем значение в колонки как вы указали, если нет. то ничего не пишем
MikeVol, спасибо, а без макроса возможно сравнить формулой? например
Берем код из столбца А ,проверяем его в столбце B ,если находит идем дальше К коду из столбца А относится дата из столбца C, ее проверяем с датой из столбца D , если находит идем дальше К коду из столбца А относится начало времени из столбца E, ее проверяем с началом времени из столбца F, если находит идем дальше К коду из столбца A относится конец времени из столбца F, его проверяем с концом времени из столбца G и если все ок то записываем значение в колонки как вы указали, если нет. то ничего не пишемOh_Nick
Чем не годится моя идея с полуавтоматом? Формула поставит единицы, по ним ставите фильтр и копипастите куда угодно, если уж так нужен этот копипаст - задача вообще в чём?
Чем не годится моя идея с полуавтоматом? Формула поставит единицы, по ним ставите фильтр и копипастите куда угодно, если уж так нужен этот копипаст - задача вообще в чём?Hugo
Hugo, а куда вашу формулу написать? ее можно для отдельного файла сделать? допустим вот у меня есть отдельный файл с заголовками КОД ДАТА НАЧАЛО ВРЕМЕНИ КОНЕЦ ВРЕМЕНИ. как мне этот файл заполнить?
Hugo, а куда вашу формулу написать? ее можно для отдельного файла сделать? допустим вот у меня есть отдельный файл с заголовками КОД ДАТА НАЧАЛО ВРЕМЕНИ КОНЕЦ ВРЕМЕНИ. как мне этот файл заполнить?Oh_Nick
В любой свободный столбец пишите мою формулу массива. В старых версиях ввод завершаете Ctrl+Shift+Enter, в новых вроде и так подхватит, но не проверял, у меня тоже 2019
В любой свободный столбец пишите мою формулу массива. В старых версиях ввод завершаете Ctrl+Shift+Enter, в новых вроде и так подхватит, но не проверял, у меня тоже 2019Hugo