Всем привет. Подскажите, каким образом можно сделать следующее..... Есть комендант, он выдаёт ключи от помещений, активность выдачи очень высокая, и количество тоже. Необходимо в екселе сделать так (ох, сформулировать даже тяжело), на бирки ключей (их около 800 шт.) наклеить сгенерированный QR код, далее, при выдаче какого-то количества ключей, пропикать сканером эти QR-коды (числовой значение например 6\1-2-98 означает, 6 дом, 1 корпус, 2 этаж, 98 квартира) и это числовое значение отображалось только в одной колонке (не там где стоит курсор, а только в последней свободной строчке одной колонки), например "Е", далее в соседней колонке выбивалась текущая дата и время (я так делал с помощью макроса), и вот тут самое сложное. Выдано к примеру 200 ключей, мы имеем 200 заполненных строк с числовым значением QR-кода в определённой колонке. а также дату и время в соседней колонке. которая называется "ВРЕМЯ\ДАТА ВЫДАЧИ", и через часов 5 приносят некоторые ключи назад, и при пропикивании QR-кода ключа нужно сделать так, чтобы полученное числовое значение сравнивалось с уже имеющейся колонкой, например: из 200 заполненных строк есть такая запись "6\1-2-98" и при пропикивании этого же ключа. ексель находил его из всего списка и рядом с колонкой "ВРЕМЯ\ДАТА ВЫДАЧИ" ставил в соседней дату и время (но уже сдачи) Люди, не судите строго, кое-как смог описать, коряво но как смог. Если Что-то нужно уточнить, я уточню. Подскажите, как вообще это сделать ????????
Всем привет. Подскажите, каким образом можно сделать следующее..... Есть комендант, он выдаёт ключи от помещений, активность выдачи очень высокая, и количество тоже. Необходимо в екселе сделать так (ох, сформулировать даже тяжело), на бирки ключей (их около 800 шт.) наклеить сгенерированный QR код, далее, при выдаче какого-то количества ключей, пропикать сканером эти QR-коды (числовой значение например 6\1-2-98 означает, 6 дом, 1 корпус, 2 этаж, 98 квартира) и это числовое значение отображалось только в одной колонке (не там где стоит курсор, а только в последней свободной строчке одной колонки), например "Е", далее в соседней колонке выбивалась текущая дата и время (я так делал с помощью макроса), и вот тут самое сложное. Выдано к примеру 200 ключей, мы имеем 200 заполненных строк с числовым значением QR-кода в определённой колонке. а также дату и время в соседней колонке. которая называется "ВРЕМЯ\ДАТА ВЫДАЧИ", и через часов 5 приносят некоторые ключи назад, и при пропикивании QR-кода ключа нужно сделать так, чтобы полученное числовое значение сравнивалось с уже имеющейся колонкой, например: из 200 заполненных строк есть такая запись "6\1-2-98" и при пропикивании этого же ключа. ексель находил его из всего списка и рядом с колонкой "ВРЕМЯ\ДАТА ВЫДАЧИ" ставил в соседней дату и время (но уже сдачи) Люди, не судите строго, кое-как смог описать, коряво но как смог. Если Что-то нужно уточнить, я уточню. Подскажите, как вообще это сделать ????????deniska1989malikov
Привет. Я бы делал так - всё писал в один столбец. Миллион строк позволяет их не экономить. Рядом с датой добавил поле Выдано/Принято, что туда писать может зависеть например от галки в первой строке листа. И если вдруг забыли её отжать - можно вручную поправить это в базе. Макрос сканирования с датами как я понимаю уже есть. Ну а анализ этого добра можно поручить сводной. И тогда ещё и графики можно строить - например активность ключа, динамика его использования, можно ещё что-то придумать...
Привет. Я бы делал так - всё писал в один столбец. Миллион строк позволяет их не экономить. Рядом с датой добавил поле Выдано/Принято, что туда писать может зависеть например от галки в первой строке листа. И если вдруг забыли её отжать - можно вручную поправить это в базе. Макрос сканирования с датами как я понимаю уже есть. Ну а анализ этого добра можно поручить сводной. И тогда ещё и графики можно строить - например активность ключа, динамика его использования, можно ещё что-то придумать...Hugo
deniska1989malikov, ну у кого - это пока не озвучивалось в описании, вот как это будете заносить? Вручную? Не, ну вообще макрос может легко найти первую запись по этому ключу выше, и поставить рядом время. Если никто базу не будет сортировать и всё перепутывать - тогда ОК. При условии что этот ключ при выдаче тоже отсканили, что на практике не факт. А если всё писать в столбик - то не важно как отсортировано, и записана ли ранее выдача, это всё можно в аналитике продумать как сводить.
deniska1989malikov, ну у кого - это пока не озвучивалось в описании, вот как это будете заносить? Вручную? Не, ну вообще макрос может легко найти первую запись по этому ключу выше, и поставить рядом время. Если никто базу не будет сортировать и всё перепутывать - тогда ОК. При условии что этот ключ при выдаче тоже отсканили, что на практике не факт. А если всё писать в столбик - то не важно как отсортировано, и записана ли ранее выдача, это всё можно в аналитике продумать как сводить.Hugo
Hugo, лицо, которому выдавался ключ прописываться будет в ручную , только вот я не могу понять ещё один момент, бывает так, что берёт один, а сдаёт другой, и это тоже необходимо фиксировать, что вручную вводить фамилии это понятно, но не совсем понимаю, как это должно работать .
Hugo, лицо, которому выдавался ключ прописываться будет в ручную , только вот я не могу понять ещё один момент, бывает так, что берёт один, а сдаёт другой, и это тоже необходимо фиксировать, что вручную вводить фамилии это понятно, но не совсем понимаю, как это должно работать .deniska1989malikov
Тем более если писать всё последовательно не будет проблемы с записью персоналий. А в сводной или где/как будете делать анализ увидите что ключ одн не сдал, другой не брал, а может это и не важно, а если ключ пропал то всегда в базу увидите кто его брал последним. В отчёте за день можно вывести какие ключи не сданы, и кто их брал. Можно хоть формулами, хоть макросом, или сводной. Кому как проще анализ написать, ну и зависит от практической задачи.
Вы подумайте сразу вперёд - как и что будете делать с теми записями, которые хотите сейчас видеть. И как/где будет указывать информацию когда брал один, а отдавал другой. Если просто фильтром выбирать день и ключи без сдачи - тогда проще конечно так как предагаете Вы. Если же возможны всякие косяки в плане дисциплины, а результаты будете выводить в табличку - то имхо в реализации проще мой вариант. Например такая ситуация - сдают ключ, который сегодня не выдавался (не записан), возможно выдавался вчера, но там уже есть запись о сдаче. Коду искать далее в позавчера и т.д., может там есть окошко? Или что делать? Если писать последовательно - этой проблемы нет. Если строка добавилась - всё ОК, работа сделана, всё под контролем. При анализе увидите что вчера одн не сдали, а сегодня сдали то, что сегодня не брали. И кто. А можно посмотреть за месяц и увидеть что всё ОК. Или вручную внести коррекционные записи если например ключ пропал и списан.
Тем более если писать всё последовательно не будет проблемы с записью персоналий. А в сводной или где/как будете делать анализ увидите что ключ одн не сдал, другой не брал, а может это и не важно, а если ключ пропал то всегда в базу увидите кто его брал последним. В отчёте за день можно вывести какие ключи не сданы, и кто их брал. Можно хоть формулами, хоть макросом, или сводной. Кому как проще анализ написать, ну и зависит от практической задачи.
Вы подумайте сразу вперёд - как и что будете делать с теми записями, которые хотите сейчас видеть. И как/где будет указывать информацию когда брал один, а отдавал другой. Если просто фильтром выбирать день и ключи без сдачи - тогда проще конечно так как предагаете Вы. Если же возможны всякие косяки в плане дисциплины, а результаты будете выводить в табличку - то имхо в реализации проще мой вариант. Например такая ситуация - сдают ключ, который сегодня не выдавался (не записан), возможно выдавался вчера, но там уже есть запись о сдаче. Коду искать далее в позавчера и т.д., может там есть окошко? Или что делать? Если писать последовательно - этой проблемы нет. Если строка добавилась - всё ОК, работа сделана, всё под контролем. При анализе увидите что вчера одн не сдали, а сегодня сдали то, что сегодня не брали. И кто. А можно посмотреть за месяц и увидеть что всё ОК. Или вручную внести коррекционные записи если например ключ пропал и списан.Hugo
Hugo, тут среди комендантов у меня люди в возрасте , и я думал сделать как то так, сверху две области, одна кто брал, вписывается фамилия, инициалы, и пропикиваются бирки с кодами, а в одной колонке, копируется фамилия и инициалы, которуюые вбил ранее, во второй колонке числовое значение кода, в третьей дата и время, потом в другой области, вбивается, кто сдал, и копируется эта фамилия и инициалы с числовым значением кода, которое он нашёл в предыдущей записи и с фиксацией даты и временем . Мне тяжело текстом объяснить, бурда получается, может дадите Вацап, я отправлю вам видео как должна работать эта система, к то я как собака, понимаю, а объяснить текстом мне тяжело
Hugo, тут среди комендантов у меня люди в возрасте , и я думал сделать как то так, сверху две области, одна кто брал, вписывается фамилия, инициалы, и пропикиваются бирки с кодами, а в одной колонке, копируется фамилия и инициалы, которуюые вбил ранее, во второй колонке числовое значение кода, в третьей дата и время, потом в другой области, вбивается, кто сдал, и копируется эта фамилия и инициалы с числовым значением кода, которое он нашёл в предыдущей записи и с фиксацией даты и временем . Мне тяжело текстом объяснить, бурда получается, может дадите Вацап, я отправлю вам видео как должна работать эта система, к то я как собака, понимаю, а объяснить текстом мне тяжелоdeniska1989malikov
Не, я вацапом не пользуюсь. Так сюда файл положите на десяток записей, с пояснениями что куда. Может ещё кто-то подключится, а может кто уже такое и делал.
Не, я вацапом не пользуюсь. Так сюда файл положите на десяток записей, с пояснениями что куда. Может ещё кто-то подключится, а может кто уже такое и делал.Hugo
Hugo, с товарищем сейчас советовался , разбили это по этапам. Первый, как сделать так, чтобы когда пикнул код, то его числовое значение отображалось только в одной колонке (ну например Е) и в последней ячейке этой колонки, следующий пик кода также и т.д. то есть, не там отображалось где стоит курсор, а именно в указанной колонке в последней пустой ячейке
Hugo, с товарищем сейчас советовался , разбили это по этапам. Первый, как сделать так, чтобы когда пикнул код, то его числовое значение отображалось только в одной колонке (ну например Е) и в последней ячейке этой колонки, следующий пик кода также и т.д. то есть, не там отображалось где стоит курсор, а именно в указанной колонке в последней пустой ячейкеdeniska1989malikov
Ну например - активная ячейка F1 считываем код, макрос по событию в F1 отключает события, ищет последнюю свободную ячейку в Е (что-то уже должно быть в первой строке записано, например заголовок, так чуть проще будет код), считывает код из F1 и копирует его в найденную ячейку, сразу правее пишет дату и время события, и можно и ФИО написать например из G1, и выдали или получили по состоянию галки где-нить ещё правее в первой строке И переводит курсор снова в F1, очищает ячейку, включает события. Как вариант - можно по состоянию галки искать такой код в Е, и писать время сдачи правее в F, но нужно продумать что делать если не найдёт, или если некуда писать, начинать новую строку?
Ну например - активная ячейка F1 считываем код, макрос по событию в F1 отключает события, ищет последнюю свободную ячейку в Е (что-то уже должно быть в первой строке записано, например заголовок, так чуть проще будет код), считывает код из F1 и копирует его в найденную ячейку, сразу правее пишет дату и время события, и можно и ФИО написать например из G1, и выдали или получили по состоянию галки где-нить ещё правее в первой строке И переводит курсор снова в F1, очищает ячейку, включает события. Как вариант - можно по состоянию галки искать такой код в Е, и писать время сдачи правее в F, но нужно продумать что делать если не найдёт, или если некуда писать, начинать новую строку?Hugo
deniska1989malikov, см вариант в I1 вносите фамилию, enter выделяется I2, пикаете нюансы, думаю допилите [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False 'отключаем обновление экрана Application.EnableEvents = False 'отключаем события If Not Intersect(Target, Range("I2")) Is Nothing Then a = Target.Value b = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя заполненная строка столбца A 'пустая ячейка в столбце E, соот QR c = Evaluate("MIN(IF(A2:A" & b & "=I2,IF(E2:E" & b & "="""",ROW(A2:A" & b & "))))") If c > 0 Then 'если такая ячейка найдена Range("d" & c) = Range("i1").Value 'фио Range("e" & c) = Now 'дата/время Else 'если такая ячейка не найдена Range("a" & b + 1) = Range("i2").Value 'QR Range("b" & b + 1) = Range("i1").Value 'фио Range("c" & b + 1) = Now 'дата/время End If Range("i1:i2").ClearContents 'сотрем Range("i1").Select 'выделим ячейку с фио End If Application.EnableEvents = True 'включаем события Application.ScreenUpdating = True 'включаем обновление экрана End Sub
[/vba] [p.s.]я бы не против иметь сканер, а то №заявок приходиться на клаве набирать)[/p.s.]
deniska1989malikov, см вариант в I1 вносите фамилию, enter выделяется I2, пикаете нюансы, думаю допилите [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False 'отключаем обновление экрана Application.EnableEvents = False 'отключаем события If Not Intersect(Target, Range("I2")) Is Nothing Then a = Target.Value b = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя заполненная строка столбца A 'пустая ячейка в столбце E, соот QR c = Evaluate("MIN(IF(A2:A" & b & "=I2,IF(E2:E" & b & "="""",ROW(A2:A" & b & "))))") If c > 0 Then 'если такая ячейка найдена Range("d" & c) = Range("i1").Value 'фио Range("e" & c) = Now 'дата/время Else 'если такая ячейка не найдена Range("a" & b + 1) = Range("i2").Value 'QR Range("b" & b + 1) = Range("i1").Value 'фио Range("c" & b + 1) = Now 'дата/время End If Range("i1:i2").ClearContents 'сотрем Range("i1").Select 'выделим ячейку с фио End If Application.EnableEvents = True 'включаем события Application.ScreenUpdating = True 'включаем обновление экрана End Sub
[/vba] [p.s.]я бы не против иметь сканер, а то №заявок приходиться на клаве набирать)[/p.s.]Nic70y
Вообще все вводимые данные - код, время, фамилию, конец списка размещать всегда в одних и тех же ячейках, а потом инициировать копирование в следующие за концом списка ячейки коротким макросом копирования. Ячейки можно сделать с крупным шрифтом для дедушки вахтёра, фамилию из выпадающего списка. *А если пропуска тоже сделать со штрихкодами, то вообще куча проблем уходит. Вахтёру пару раз пикнуть, а а макрос сам разберётся от чего штрихкод и поместит в нужные ячейки.
Вообще все вводимые данные - код, время, фамилию, конец списка размещать всегда в одних и тех же ячейках, а потом инициировать копирование в следующие за концом списка ячейки коротким макросом копирования. Ячейки можно сделать с крупным шрифтом для дедушки вахтёра, фамилию из выпадающего списка. *А если пропуска тоже сделать со штрихкодами, то вообще куча проблем уходит. Вахтёру пару раз пикнуть, а а макрос сам разберётся от чего штрихкод и поместит в нужные ячейки.Светлый
Программировать проще, чем писать стихи.
Сообщение отредактировал Светлый - Пятница, 25.04.2025, 11:05
Nic70y, можете чуть подкорректировать, я приложу файл. 1. Если есть значение в колонке "Е", то в колонке "D" копируется то, что введено в ячейку "D4" (Например в ячейке "D4" я ввёл "Сидоров В.В., и когда я пикаю сканером, числовое значение кода отображается только в колонке "Е" , то и "Сидоров В.В." копируется в колонку "D"), ну а в колонке "F" отображается текущая дата и время.
2. Если есть значение в колонке "I" (это область сдачи ключей), то копируется в колонку "H" то, что что прописано в ячейке "H4", ну а в колонке "J" отбивается текущая дата и время.
И я вот не совсем понял, как я предполагаю, должна быть какая-то промежуточная ячейка, в которой отображается числовое значение кода при пропикивании (наверное да, там наверное ставиться курсор и пикаются коды), в таком случае я приложу два файла, один без промежуточной ячейки, а второй с ней. Ваш макрос отлично работает, но нужно немного подкорректировать . Вот во втором файле есть красная область , это "промежуточная ячейка", может я не правильно выражаюсь, прошу простить и понять.
Nic70y, можете чуть подкорректировать, я приложу файл. 1. Если есть значение в колонке "Е", то в колонке "D" копируется то, что введено в ячейку "D4" (Например в ячейке "D4" я ввёл "Сидоров В.В., и когда я пикаю сканером, числовое значение кода отображается только в колонке "Е" , то и "Сидоров В.В." копируется в колонку "D"), ну а в колонке "F" отображается текущая дата и время.
2. Если есть значение в колонке "I" (это область сдачи ключей), то копируется в колонку "H" то, что что прописано в ячейке "H4", ну а в колонке "J" отбивается текущая дата и время.
И я вот не совсем понял, как я предполагаю, должна быть какая-то промежуточная ячейка, в которой отображается числовое значение кода при пропикивании (наверное да, там наверное ставиться курсор и пикаются коды), в таком случае я приложу два файла, один без промежуточной ячейки, а второй с ней. Ваш макрос отлично работает, но нужно немного подкорректировать . Вот во втором файле есть красная область , это "промежуточная ячейка", может я не правильно выражаюсь, прошу простить и понять.deniska1989malikov
Nic70y, здесь, чуть чуть неудобно то, что например если петров берёт ключ, то он только один раз отображается, а при втором пропикивании вместо петров, отображается числовое значение кода. А если петров берёт 80 ключей.....
Nic70y, здесь, чуть чуть неудобно то, что например если петров берёт ключ, то он только один раз отображается, а при втором пропикивании вместо петров, отображается числовое значение кода. А если петров берёт 80 ключей.....deniska1989malikov
deniska1989malikov, в типаголубые ячейки пишите фио, далее макрос выделяет красную - пикайте
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False 'отключаем обновление экрана Application.EnableEvents = False 'отключаем события a = Left(Target.Address(0, 0), 2) 'адрес ячейки куда вводятся данные If a = "D4" Then 'фио кому Range("h4:j5").ClearContents 'сотрем кто Range("g4").Select 'выделим QR End If If a = "H4" Then 'фио кто Range("d4:f5").ClearContents 'сотрем кому Range("g4").Select 'выделим QR End If If a = "G4" Then 'QR Range("g4").Select 'выделим QR b = Range("d4").Value 'кому c = Range("h4").Value 'кто d = Range("g4").Value 'QR e = b & c 'фио If b <> "" Then 'если кому f = Cells(Rows.Count, "d").End(xlUp).Row + 1 'нижняя заполненная строка столбца D +1 'запишем: Range("d" & f) = e 'фио Range("e" & f) = d '№ пом Range("f" & f) = Now 'дата/время End If If c <> "" Then 'если кто f = Cells(Rows.Count, "h").End(xlUp).Row + 1 'нижняя заполненная строка столбца Н +1 'запишем: Range("h" & f) = e 'фио Range("i" & f) = d '№ пом Range("j" & f) = Now 'дата/время End If End If Application.EnableEvents = True 'включаем события Application.ScreenUpdating = True 'включаем обновление экрана End Sub
[/vba]
так хотели? [p.s.]в левой и правой таблице разъединил ячейки не объединяйте их, если хотите просто увеличте высоту строки[/p.s.]
deniska1989malikov, в типаголубые ячейки пишите фио, далее макрос выделяет красную - пикайте
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False 'отключаем обновление экрана Application.EnableEvents = False 'отключаем события a = Left(Target.Address(0, 0), 2) 'адрес ячейки куда вводятся данные If a = "D4" Then 'фио кому Range("h4:j5").ClearContents 'сотрем кто Range("g4").Select 'выделим QR End If If a = "H4" Then 'фио кто Range("d4:f5").ClearContents 'сотрем кому Range("g4").Select 'выделим QR End If If a = "G4" Then 'QR Range("g4").Select 'выделим QR b = Range("d4").Value 'кому c = Range("h4").Value 'кто d = Range("g4").Value 'QR e = b & c 'фио If b <> "" Then 'если кому f = Cells(Rows.Count, "d").End(xlUp).Row + 1 'нижняя заполненная строка столбца D +1 'запишем: Range("d" & f) = e 'фио Range("e" & f) = d '№ пом Range("f" & f) = Now 'дата/время End If If c <> "" Then 'если кто f = Cells(Rows.Count, "h").End(xlUp).Row + 1 'нижняя заполненная строка столбца Н +1 'запишем: Range("h" & f) = e 'фио Range("i" & f) = d '№ пом Range("j" & f) = Now 'дата/время End If End If Application.EnableEvents = True 'включаем события Application.ScreenUpdating = True 'включаем обновление экрана End Sub
[/vba]
так хотели? [p.s.]в левой и правой таблице разъединил ячейки не объединяйте их, если хотите просто увеличте высоту строки[/p.s.]Nic70y
Nic70y, Вы гений. Но в первой вашей версии. было так: вот выдал я к примеру 20 ключей, пропикал их, и они в столбик отобразились, далее мне принесли обратно 7 ключей и пропикивая их (второй раз), этот ключ проходил как за сдачу, то есть..... пикнул я на выдачу 6\1-2-96, и он 13 к примеру строчке, и мне его принесли назад, пикнув его второй раз макрос находил его в 13 строчке и уже в поле где сдача, напротив него пробивал время. Это я к тому, что я слышал про условное форматирование, что можно как то подкрасить строку, и когда ключ на руках. я хочу сделать так, чтобы строчка двух областей выделялась зелёной с белыми буквами, а когда из 20 выданых ключей принесли назад какие-то, пропикав их, макрос отыскал эти ключи из списка (ну например это 3,4, 6, 8. 9. 11 строчка) окрасил их в красный цвет. Тем самым я вижу, сколько ключей у меня выдано на руки. сколько вернули назад. файл с примером прилагою
Nic70y, Вы гений. Но в первой вашей версии. было так: вот выдал я к примеру 20 ключей, пропикал их, и они в столбик отобразились, далее мне принесли обратно 7 ключей и пропикивая их (второй раз), этот ключ проходил как за сдачу, то есть..... пикнул я на выдачу 6\1-2-96, и он 13 к примеру строчке, и мне его принесли назад, пикнув его второй раз макрос находил его в 13 строчке и уже в поле где сдача, напротив него пробивал время. Это я к тому, что я слышал про условное форматирование, что можно как то подкрасить строку, и когда ключ на руках. я хочу сделать так, чтобы строчка двух областей выделялась зелёной с белыми буквами, а когда из 20 выданых ключей принесли назад какие-то, пропикав их, макрос отыскал эти ключи из списка (ну например это 3,4, 6, 8. 9. 11 строчка) окрасил их в красный цвет. Тем самым я вижу, сколько ключей у меня выдано на руки. сколько вернули назад. файл с примером прилагоюdeniska1989malikov
для более удобного поиска выданного ключа предлагаю дублировать его в столбце C, при его получении ячейка сотрется, т.к. заливка черная - визуально этого видно не будет
для более удобного поиска выданного ключа предлагаю дублировать его в столбце C, при его получении ячейка сотрется, т.к. заливка черная - визуально этого видно не будетNic70y