Это обновленная версия для этого.
Вышеупомянутое решение хорошо, пока я не понял, когда я помещаю большие данные, цикл for генерирует дублирующиеся строки (что приводит к нежелательным результатам)
Я нашел какой-то метод в Интернете, чтобы удалить дубликаты строк.
ActiveSheet.Range("A:F").RemoveDuplicates Columns:= 1, Заголовок:= xlNo
Но было немного напрасно тратить время на генерацию обновленных данных, а затем удалять дубликаты.
Моя ЛОГИКА вызывает дубликаты?
Позвольте мне привести пример для моей проблемы сейчас,
code name description status
4566 Adam al active
Так как Адам совпадает, а также активен, я получаю 4566; запись.
Но по моей логике я получаю еще 4566.
Спасибо. Будем благодарны за любые советы по функции / методу или коду.
РЕДАКТИРОВАТЬ
Код является уникальным значением в этой группе данных. У меня есть Xsheet, где оба столбца независимы и неравномерны, но без дубликатов (этот лист является динамическим).
- Sheet1 - это оригинальные сгенерированные данные, динамическая база данных.
- И Xsheet, и Sheet1 являются случайными данными, которые не отсортированы.
Что я пытаюсь сделать
Если имя или описание в основном списке (Xsheet) найдено в листе данных (Sheet1) и оно также является активным, скопируйте его на новый лист без дубликатов (того же кода для Sheet2). Поскольку у некоторого кода было соответствующее Имя, также Описание.
Судя по всему, дубликаты - не единственная проблема, с которой я столкнулся, но я подумал, что должен решать их по одному. Я создаю новый вопрос для другой проблемы, когда я не получил ответа на этот вопрос.
Это Xsheet.
name description
Adam al
Edward dc
Rose tp
Jen
Owen
Jack
Belle
Sally
Cindy
Max
Zack
Moon
Shawn
Это Лист1.
code operation title date name description status
4566 Adam ttr active
4899 Edward ttp inactive
4987 Adam dc active
4988 Kris al active
4989 Chris ttr inactive
5713 Mary rt active
5312 Ken active
3211 John active
2138 Summer active
3334 Wendy active
5417 Adam active
3355 Belle active
4773 Adam active
3288 Ron inactive
1289 Wincy dc active
Это VBA.
Sub Procedure2()
Dim xsht As Worksheet
Dim sht As Worksheet 'original sheet
Dim newsht As Worksheet 'sheet with new data
Application.ScreenUpdating = False
Set xsht = ThisWorkbook.Worksheets("Xsheet")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
Set main = xsht.Range("A1")
Set dat = sht.Range("A1")
Set newdat = newsht.Range("A1")
'initialise counters
Dim i, j, iRow As Integer 'instantiate and initialize the integers
i = 1
j = 1
iRow = 1
'set heading on sheet2
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 'copy code
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 'copy title
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 'copy date
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 'copy name
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 'copy descr
newdat.Offset(0, 5).Value = dat.Offset(0, 6).Value 'copy status
Do While main.Offset(i, 0).Value <> "" Or main.Offset(i, 1).Value <> ""
j = 1 'reset DataSheet pointer
Do While dat.Offset(j, 0).Value <> ""
If (main.Offset(i, 0).Value = dat.Offset(j, 4).Value _
Or main.Offset(i, 1).Value = dat.Offset(j, 5).Value) _
And dat.Offset(j, 6).Value = "active" Then
newdat.Offset(iRow, 0).Value = dat.Offset(j, 0).Value 'copy code
newdat.Offset(iRow, 1).Value = dat.Offset(j, 2).Value 'copy title
newdat.Offset(iRow, 2).Value = dat.Offset(j, 3).Value 'copy date
newdat.Offset(iRow, 3).Value = dat.Offset(j, 4).Value 'copy name
newdat.Offset(iRow, 4).Value = dat.Offset(j, 5).Value 'copy descr
newdat.Offset(iRow, 5).Value = dat.Offset(j, 6).Value 'copy status
iRow = iRow + 1
End If
j = j + 1 'increment DataSheet pointer; fast moving; changing/resetting
Loop
i = i + 1 'increment XSheet pointer; slow moving outer loop; not resetting
Loop
Application.ScreenUpdating = True
End Sub