Я использую Excel 2010 и у меня вопрос VBA.
У меня есть некоторый код VBA, который создает уникальный ключ, а затем ищет повторяющиеся записи уникальных ключей. Любые дубликаты окрашены в красный цвет.
Что мне нужно, это немного автоматизировать это. Если есть повторяющийся уникальный ключ, я хочу, чтобы он скопировал информацию из новейшей записи и вставил ее в строку, где находится исходная запись. Затем я хочу удалить самую новую запись.
Чтобы объяснить немного дальше. Уникальный ключ - это конкат, составленный из имени клиента и даты создания файла. На каждого клиента будет приходиться не более 1 повторяющейся записи, потому что дата последнего обновления файла изменилась. Мне нужна повторяющаяся запись concat с самой новой датой, чтобы скопировать информацию поверх записи с самой старой датой, а затем удалить исходную самую новую запись даты. Это связано с тем, что у нас есть другие проверки, которые были выполнены в дальнейшем по листу, которые мы должны держать в такте.
В идеале я хотел бы, чтобы в окне сообщения все же сообщалось, сколько дубликатов было найдено и для записиостаться красным после того, как будет выполнено копирование / вставка / удаление, чтобы выделить измененную запись.
Я не могу на всю жизнь понять, как это сделать. Я довольно новичок в VBA и собрал следующее на основе таких форумов, как этот.
Пожалуйста, кто-нибудь может мне помочь? Если мой код ниже неправильный / длинный, то сообщите мне об этом тоже. Я хочу учиться.
Private Sub CommandButton1_Click()
'Start of Concatenate Code
Dim i As Integer
Dim r As Range
On Error Resume Next
' Tells Excel to look in column 3 (Column C) for the last one with data in it
lRow = Cells(Rows.Count, 3).End(xlUp).Row
' Tell Excel to focus on cells 4 to 5000
For i = 4 To lRow
' Tell Excel to paste the contents of cell 4 (column D) followed by | then the contents of cell 8 (column H) into cell 2 (column B)
Cells(i, 2).Value = Cells(i, 11) & " | " & Cells(i, 7)
Next i
'End of Concatenate Code
'Start of Check for Duplicates code
Dim j As Integer
Dim myCell As Range
Dim myRange As Integer
myRange = Range("A4:A5000").Count
j = 0
' Select the Range
For Each myCell In Range("B4:B5000")
' Check that the cells in the range are not blank
If WorksheetFunction.CountIf(Range("B4:B5000"), myCell.Value) > 1 Then
' Colour the duplicate entries in red
myCell.EntireRow.Interior.ColorIndex = 3
j = j + 1
End If
Next
MsgBox "There are " & j & " duplicates found." & vbCrLf & vbCrLf & "Any duplicates have been highlighted in red.", vbInformation + vbOKOnly, "Duplicate Entry Checker"
' End of Check for Duplicates code
End Sub
Заранее благодарю,
Крейг
** РЕДАКТИРОВАНИЕ, ЧТОБЫ ВКЛЮЧИТЬ СКРИНШОТ РАСПИСАНИЯ ДЛЯ @rickmanalexander ** Электронная таблицаСкриншот