Мне нужно сравнить данные из формы Excel со столбцом на листе, в который они вводят данные, затем, если эти же данные есть, измените другую ячейку для уже существующих данных на 0.
IУ меня есть данные, которые должны постоянно регистрироваться, НЕТ стирая дубликаты - Даты отслеживания «Активны».
У меня есть форма ввода данных с Элементом, датой и 1 (1 показывает, что он активен в эту дату).Форма вводит данные в последнюю строку / следующую пустую строку на листе "ItemData".
$A="Item" $B="Date" $C="Active(1)"
$A | $B | $C
$1 I1 | 1-5-19 | 1
$2 I2 | 1-8-19 | 1
$3 I3 | 1-9-19 | 1
$4 I1 | 1-9-19 | 1
$5 I4 | 1-9-19 | 1
$6 I2 | 1-10-19 | 1
$7 Next time submit button click data goes here
Мне нужно - Форма на кнопке "Отправить" Нажмите Сравнить "Элемент", "Дата и" Активна "в последней записи $ 7 в приведенном выше примере для всех других записей на листе.
Если новая запись ($ 7) «Элемент» $ A такая же, как и любая другая запись в $ A И the »Дата "($ B) предшествует дате создания нового элемента ($ B $ 7), а значение" Активный "($ C) также = 1. Затем измените значение $ C" Активное "с 1 на 0 для соответствующего элемента и оставьте новую запись $ C$ 7 = 1.
Я знаю ... Непонятно, правда?!?
В основном возьмите пример выше. Когда я "Отправить" в форме новую запись:
$A | $B | $C
$7 I1 | 1-11-19 | 1
Он должен найти все "I1" в $ A с датами перед "1-11-19" в $ B и с "1" в $ C. Затем замените каждую "1" в $ C для этих записей на "0 ".
Пример:
$A | $B | $C
$1 I1 | 1-5-19 | 0
$2 I2 | 1-8-19 | 1
$3 I3 | 1-9-19 | 1
$4 I1 | 1-9-19 | 0
$5 I4 | 1-9-19 | 1
$6 I2 | 1-10-19 | 1
$7 I1 | 1-11-19 | 1
Затем, конечно, следующее" Отправить "в форме для другой новой записи:
$A | $B | $C
$8 I2 | 1-12-19 | 1
Должен найти все"I2" в $ A с датами до "1-12-19" в $ B и с "1 "в $ C.Затем замените каждое «1» в $ C для этих записей на «0».
Пример:
$A | $B | $C
$1 I1 | 1-5-19 | 0
$2 I2 | 1-8-19 | 0
$3 I3 | 1-9-19 | 1
$4 I1 | 1-9-19 | 0
$5 I4 | 1-9-19 | 1
$6 I2 | 1-10-19 | 0
$7 I1 | 1-11-19 | 1
$8 I2 | 1-12-19 | 1
Я пытался и потерпел неудачу так много разных попыток кода, что это смущает, поэтому я не могу отправить «Мой код», потому что я, очевидно, не знаю, с чего начать,Пожалуйста, если кто-то может помочь с этим, я действительно ценю это!
============================================================================
ОБНОВЛЕНИЕ
Хорошо, я не мог понять, как это сделать с помощью автофильтра ... Но сейчас у меня есть хороший фундамент!Мне все еще нужна помощь, чтобы изменить это.
Мне нужно условие, чтобы изменить только дубликаты, у которых есть дата, предшествующая дате в поле формы "txtDate" или самой новой записи на листе (последний столбец строки D).
Вот текущий код:
Dim i As Long
Dim j As Long
Dim lDuplicates As Long
Dim rngCheck As Range
Dim rngCell As Range
Dim rngDuplicates() As Range
'Range
Set rngCheck = ws.Range("$A:$A")
'# of Duplicates found
lDuplicates = 0
'Checking cells in range
For Each rngCell In rngCheck.Cells
Debug.Print rngCell.Address
'Check non empty cells only
If Not IsEmpty(rngCell.Value) Then
'Resize & clear duplicate array
ReDim rngDuplicates(0 To 0)
'Setting counter
i = 0
'Search method
Set rngDuplicates(i) = rngCheck.Find(What:=rngCell.Value, After:=rngCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)
'Check if duplicates exist
If rngDuplicates(i).Address <> rngCell.Address Then
'Count duplicates
lDuplicates = lDuplicates + 1
'If duplicates exsist then continue filling array
Do While rngDuplicates(i).Address <> rngCell.Address
i = i + 1
ReDim Preserve rngDuplicates(0 To i)
Set rngDuplicates(i) = rngCheck.FindNext(rngDuplicates(i - 1))
Loop
'Set the value of duplicates to 0 and number format to text
For j = 0 To UBound(rngDuplicates, 1) - 1
rngDuplicates(j).Offset(0, 5).Value = "0"
rngDuplicates(j).Offset(0, 5).NumberFormat = "@"
Next j
End If
End If
Next rngCell