Доброго всем времени суток и настроения! Уважаемые форумчане, знатоки и Елена Нужна срочная помощь ! Есть некая база данных, информация которая сортирована по колоннам А,В,С,D,Е,F (прилагается excel файл/sheet 1,2,3). Нужно что бы Excel удалял одинаковые значения вбитые в колонну D если числа копии чётные. А те которые нечетные то Excel оставлял ячейку которая была вбита последней по времени и удалял остальные копии. К примеру: в Sheet3 В колонну E было вбито определенное количество (повтояющихся) номеров карт. копируем колонну E и F и вставляем в Sheet1 в колонну D и E. После этого нам нужно что бы Excel находил дублированные четные номера карт и удалял все (можно привязать кнопку макроса) А из нечётных дубликатов оставлял только ту которая была вбита последней. Надеюсь что ясно выложил проблему. Спасибо заранее за помощь.
Доброго всем времени суток и настроения! Уважаемые форумчане, знатоки и Елена Нужна срочная помощь ! Есть некая база данных, информация которая сортирована по колоннам А,В,С,D,Е,F (прилагается excel файл/sheet 1,2,3). Нужно что бы Excel удалял одинаковые значения вбитые в колонну D если числа копии чётные. А те которые нечетные то Excel оставлял ячейку которая была вбита последней по времени и удалял остальные копии. К примеру: в Sheet3 В колонну E было вбито определенное количество (повтояющихся) номеров карт. копируем колонну E и F и вставляем в Sheet1 в колонну D и E. После этого нам нужно что бы Excel находил дублированные четные номера карт и удалял все (можно привязать кнопку макроса) А из нечётных дубликатов оставлял только ту которая была вбита последней. Надеюсь что ясно выложил проблему. Спасибо заранее за помощь.Fiko81
Fiko81, есть несколько уточнений 1. "знатоки и Елена" - это подразумевает, что Елена не знаток? 2. В файле у Вас формула с циклической ссылкой. Для F2
Код
=ЕСЛИ(E2<>"";ЕСЛИ(F2="";ТДАТА();F2);"")
F2 ссылается сама на себя. Так работать не будет. Вернее будет, но только если включить итеративные вычисления, чего делать настоятельно не советую. Поясните словами, что Вы хотели добиться этой формулой. Поставить дату-время ввода номера карты? Это делается макросом, а не такой формулой 3. У Вас в файле уже есть макрос, обрабатывающий ввод номеров карт. Он будет конфликтовать с тем макросом, который Вы хотите, чтобы мы Вам написали. Имеющийся я удаляю 4. Переписал Вам формулы в столбцах А:С Макрос вот такой получился
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim ddel As Range c_ = 4 Set d_ = Intersect(Target, Columns(c_)) If Not d_ Is Nothing Then r0_ = 2 n_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 1 ar = Cells(r0_, c_).Resize(n_) Set d_ = Cells(r0_, c_).Resize(n_) Set slov = CreateObject("Scripting.Dictionary") With slov For i = 1 To n_ If .Exists(ar(i, 1)) Then If .Item(ar(i, 1)) > 0 Then .Item(ar(i, 1)) = -.Item(ar(i, 1)) If ddel Is Nothing Then Set ddel = d_(i, 1).Resize(1, 2) Else Set ddel = Union(ddel, d_(i, 1).Resize(1, 2)) End If Else Set ddel = Union(ddel, d_(-.Item(ar(i, 1)), 1).Resize(1, 2)) .Item(ar(i, 1)) = i End If Else .Item(ar(i, 1)) = i End If Next i Application.EnableEvents = 0 ddel.Delete Shift:=xlUp Application.EnableEvents = 1 End With End If End Sub
[/vba]
* Немного подправил текст поста
Fiko81, есть несколько уточнений 1. "знатоки и Елена" - это подразумевает, что Елена не знаток? 2. В файле у Вас формула с циклической ссылкой. Для F2
Код
=ЕСЛИ(E2<>"";ЕСЛИ(F2="";ТДАТА();F2);"")
F2 ссылается сама на себя. Так работать не будет. Вернее будет, но только если включить итеративные вычисления, чего делать настоятельно не советую. Поясните словами, что Вы хотели добиться этой формулой. Поставить дату-время ввода номера карты? Это делается макросом, а не такой формулой 3. У Вас в файле уже есть макрос, обрабатывающий ввод номеров карт. Он будет конфликтовать с тем макросом, который Вы хотите, чтобы мы Вам написали. Имеющийся я удаляю 4. Переписал Вам формулы в столбцах А:С Макрос вот такой получился
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim ddel As Range c_ = 4 Set d_ = Intersect(Target, Columns(c_)) If Not d_ Is Nothing Then r0_ = 2 n_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 1 ar = Cells(r0_, c_).Resize(n_) Set d_ = Cells(r0_, c_).Resize(n_) Set slov = CreateObject("Scripting.Dictionary") With slov For i = 1 To n_ If .Exists(ar(i, 1)) Then If .Item(ar(i, 1)) > 0 Then .Item(ar(i, 1)) = -.Item(ar(i, 1)) If ddel Is Nothing Then Set ddel = d_(i, 1).Resize(1, 2) Else Set ddel = Union(ddel, d_(i, 1).Resize(1, 2)) End If Else Set ddel = Union(ddel, d_(-.Item(ar(i, 1)), 1).Resize(1, 2)) .Item(ar(i, 1)) = i End If Else .Item(ar(i, 1)) = i End If Next i Application.EnableEvents = 0 ddel.Delete Shift:=xlUp Application.EnableEvents = 1 End With End If End Sub
Увожаемый _Boroda_ постораюсь ответить на все пункты. 1. B разработке данного файла был огромный труд Елены, и из за этого я хотел подчеркнуть её имя в месте со знотоками Excel. Надеюсь вы меня поймете 2.
- Да ! 3. Мне нужно что бы excel работал с колонной D в sheet 1. То есть с номерами (Card Number). Нужно что бы когда в sheet 1 вбитая в колонну D нформация повторяется (например 1,2,3 и.т.д вбивается во второй раз) oбе записи (вбитая в первый и во второй раз) автоматически удалялась из sheet 1. В вашеи формуле удаляется только информация которая повторяется, а имеющийся остается. Суть задачи в том чтобы когда информация вбитая в колонну Е (sheet 3) дублировалась в колонне D (sheet 1). И когда вбивается повторный номер в колонну Е (sheet 3), то эта информация должна остался в колонне Е (sheet 3) как архив запись . И если этот номер повтояется в дублированной колонне D (sheet 1) то Excel автоматически удалял обе строки в sheet 1. Заранее вам благодарен
Увожаемый _Boroda_ постораюсь ответить на все пункты. 1. B разработке данного файла был огромный труд Елены, и из за этого я хотел подчеркнуть её имя в месте со знотоками Excel. Надеюсь вы меня поймете 2.
- Да ! 3. Мне нужно что бы excel работал с колонной D в sheet 1. То есть с номерами (Card Number). Нужно что бы когда в sheet 1 вбитая в колонну D нформация повторяется (например 1,2,3 и.т.д вбивается во второй раз) oбе записи (вбитая в первый и во второй раз) автоматически удалялась из sheet 1. В вашеи формуле удаляется только информация которая повторяется, а имеющийся остается. Суть задачи в том чтобы когда информация вбитая в колонну Е (sheet 3) дублировалась в колонне D (sheet 1). И когда вбивается повторный номер в колонну Е (sheet 3), то эта информация должна остался в колонне Е (sheet 3) как архив запись . И если этот номер повтояется в дублированной колонне D (sheet 1) то Excel автоматически удалял обе строки в sheet 1. Заранее вам благодаренFiko81
1. Я думаю понятно, что я пошутил? 2. Для этого нужно написать отдельный макрос, но только после того, как разберемся с п.3, чтобы не было конфликтов условий для макросов 3. Не, подождите, а как же тогда всё то, что Вы написали в первом посте про всякие четные-нечетные? Я потому и написал, что макросы будут конфликтовать - то Вы хотите удалять все задвоения, а то Вы хотите оставлять последнюю нечетную. То Вы вводите данные на этом листе, а то Вы вбиваете их на Лист3 и оттуда копируете на Лист1. Уж тогда как-то поподробнее опишите хотелки, чтобы время зря не тратить, решая не ту задачу.
1. Я думаю понятно, что я пошутил? 2. Для этого нужно написать отдельный макрос, но только после того, как разберемся с п.3, чтобы не было конфликтов условий для макросов 3. Не, подождите, а как же тогда всё то, что Вы написали в первом посте про всякие четные-нечетные? Я потому и написал, что макросы будут конфликтовать - то Вы хотите удалять все задвоения, а то Вы хотите оставлять последнюю нечетную. То Вы вводите данные на этом листе, а то Вы вбиваете их на Лист3 и оттуда копируете на Лист1. Уж тогда как-то поподробнее опишите хотелки, чтобы время зря не тратить, решая не ту задачу._Boroda_
_Boroda_, Не хотел ввести вас в заблуждения. Но в первом посте была моя идея как решить поставленную задачу. А потом я придумал упрощенный вариант (на мой взгляд). Пожалуйста проверьте свою почту я выложил там все подробно
_Boroda_, Не хотел ввести вас в заблуждения. Но в первом посте была моя идея как решить поставленную задачу. А потом я придумал упрощенный вариант (на мой взгляд). Пожалуйста проверьте свою почту я выложил там все подробноFiko81
Не-не-не, так не пойдет. Правила форума не нужно нарушать. Все вопросы решаем на форуме, каждый в своей теме. * Вы уж извините, но почта у меня только для платной помощи, о чем и написано строкой выше
Не-не-не, так не пойдет. Правила форума не нужно нарушать. Все вопросы решаем на форуме, каждый в своей теме. * Вы уж извините, но почта у меня только для платной помощи, о чем и написано строкой выше _Boroda_
Хорошо. О таких правилах не знал. Постараюсь объяснить подробно что мне надо а вы сами решайте как правильно можно решить задачу. Bы уж простите меня за мою неграмотность.
Этот файл предназначен для контроля входа и выхода работников в объект. Тоесть когда Michael Jackson заходит в объект )))) он регистрируется под номером карты 1 в листе 3 и должен дублироваться в листе 1. Потом когда он выходит из объекта он опять регистрируется под номером карты 1 в листе 3 во второй раз. Тут должно произойти следующее: Так как его номер уже зарегистрирован в листе 1 при повторной регистрации Excel должен найти копию в листе 1 и удалить обе строки в листе 1 автоматически. Это дает нам информацию о том сколько человек и кто конкретно находится в объекте в настоящее время.
Есть 3 листа (sheet 1,2,3)
1. Третий лист нам нужен для архива записей. Тоесть все записи (какая карта была зарегистрирована, сколько раз и когда) должны оставаться в третьем листе без всякого изменеия.
2. Bторой лис эта сама база данных из которой берут нужную информацию листы 1 и 3.
3. Дает информацию сколько человек и кто находится в объекте в настоящее время.
Хорошо. О таких правилах не знал. Постараюсь объяснить подробно что мне надо а вы сами решайте как правильно можно решить задачу. Bы уж простите меня за мою неграмотность.
Этот файл предназначен для контроля входа и выхода работников в объект. Тоесть когда Michael Jackson заходит в объект )))) он регистрируется под номером карты 1 в листе 3 и должен дублироваться в листе 1. Потом когда он выходит из объекта он опять регистрируется под номером карты 1 в листе 3 во второй раз. Тут должно произойти следующее: Так как его номер уже зарегистрирован в листе 1 при повторной регистрации Excel должен найти копию в листе 1 и удалить обе строки в листе 1 автоматически. Это дает нам информацию о том сколько человек и кто конкретно находится в объекте в настоящее время.
Есть 3 листа (sheet 1,2,3)
1. Третий лист нам нужен для архива записей. Тоесть все записи (какая карта была зарегистрирована, сколько раз и когда) должны оставаться в третьем листе без всякого изменеия.
2. Bторой лис эта сама база данных из которой берут нужную информацию листы 1 и 3.
3. Дает информацию сколько человек и кто находится в объекте в настоящее время.Fiko81
Доброго дня всем. В принципе все выше указанные задачи выполнены. Там остался только одна проблема. Нужно что бы в колонне D лист 1 удалялись повторяющийся номера. В данный момент повторяющиеся номера выделяются красным цветом. А мне нужно что бы они удалялись оттуда. Пожалуйста помогите решить проблему.
Доброго дня всем. В принципе все выше указанные задачи выполнены. Там остался только одна проблема. Нужно что бы в колонне D лист 1 удалялись повторяющийся номера. В данный момент повторяющиеся номера выделяются красным цветом. А мне нужно что бы они удалялись оттуда. Пожалуйста помогите решить проблему.Fiko81
Откуда там формулы взялись я не понял - из того, что Вы выше писали, вроде следует, что значения вручную вбиваются. Поэтому непонятно, нужно ли вешать макрс на событие ввода в ячейку, ведь изменение в формуле не запускает это событие. В общем повесил макрос на кнопку
[vba]
Код
Sub tt() n_ = Cells(Rows.Count, 4).End(3).Row - 1 ar = Cells(2, 4).Resize(n_) With CreateObject("Scripting.Dictionary") For i = 1 To n_ aaa = .Item(ar(i, 1)) Next i Application.ScreenUpdating = 0 Application.Calculation = 3 Cells(2, 4).Resize(n_).ClearContents Cells(2, 4).Resize(.Count) = Application.Transpose(.Keys) Application.Calculation = 1 Application.ScreenUpdating = 1 End With End Sub
[/vba]
Откуда там формулы взялись я не понял - из того, что Вы выше писали, вроде следует, что значения вручную вбиваются. Поэтому непонятно, нужно ли вешать макрс на событие ввода в ячейку, ведь изменение в формуле не запускает это событие. В общем повесил макрос на кнопку
[vba]
Код
Sub tt() n_ = Cells(Rows.Count, 4).End(3).Row - 1 ar = Cells(2, 4).Resize(n_) With CreateObject("Scripting.Dictionary") For i = 1 To n_ aaa = .Item(ar(i, 1)) Next i Application.ScreenUpdating = 0 Application.Calculation = 3 Cells(2, 4).Resize(n_).ClearContents Cells(2, 4).Resize(.Count) = Application.Transpose(.Keys) Application.Calculation = 1 Application.ScreenUpdating = 1 End With End Sub
_Boroda_, Задача решена. Может быть я не правильно объяснил. Но мне нужно было что бы обе записи (вбитая в первый и во второй раз) автоматически удалялиь из sheet 1. Отправляю вам файл с готовым решением. Спасибо! Удачи всем.
_Boroda_, Задача решена. Может быть я не правильно объяснил. Но мне нужно было что бы обе записи (вбитая в первый и во второй раз) автоматически удалялиь из sheet 1. Отправляю вам файл с готовым решением. Спасибо! Удачи всем.Fiko81