Создайте заголовок, определив, когда две ячейки не совпадают, и вставив заголовок из другого листа. - PullRequest
0 голосов
/ 11 апреля 2019

Я ищу что-то, что может начать поиск в строке 9 столбца C для ячеек, которые не равны ячейкам на 2 строки нижеНапример, C9 <> C11, C10 <> C12 и т. Д. Затем скопируйте ячейку с другого листа и вставьте ее в столбец A в той же строке, где было первое расхождение.Например, если C9 <> C11, вставьте лист 2 в A11.Цель состоит в том, чтобы вставить новый заголовок после того, как данные уже отформатированы и отсортированы, ниже приведен один из многих вариантов, которые я пробовал, получая только ошибки или пустые данные.

Любая помощь будет принята с благодарностью.

Dim iRow2 As Integer, iCol2 As Integer, iRow3 As Integer, iCol3 As Integer
Dim oRng2 As Range
Dim oRng3 As Range
Dim qqq As Range

Set oRng2 = Range("C9:C80")
Set oRng3 = Range("A9:A80")

iCol2 = oRng2.Column
iCol3 = oRng3.Column

For Each qqq In oRng2
Do
If qqq.Cells(oRng2, 3) <> qqq.Cells(oRng2 + 2, 3) Then
 ThisWorkbook.Worksheets("Sheet1").Range("N1").Copy Destination = Sheets("Sheet2").Range(oRng2 + 2, 1)

End If
Loop While Not Cells(iRow2, iCol2).Text = ""
Next

1 Ответ

0 голосов
/ 11 апреля 2019

Я предлагаю вам поработать с номерами столбцов, если можете. Тогда вы, вероятно, увидите, что вам нужно гораздо меньше индексов, чем в текущем коде, и вы не забудете так легко обновить индексы (например, iRow2 и iCol2).

Dim dataSheet As Worksheet
Dim headerSheet As Worksheet

Set dataSheet = ActiveWorkbook.Sheets(2)
Set headerSheet = ActiveWorkbook.Sheets(1)

Dim r As Integer
For r = 9 To 80
  If dataSheet.Cells(r, 3).Value <> dataSheet.Cells(r + 2, 3).Value Then
    dataSheet.Cells(r, 1).Value = headerSheet.Cells(1, 14).Value
  End If
Next r

Это должно дать вам хорошее начало. Я не знаю, что именно внутренний цикл предназначен для проверки, потому что вы никогда не касаетесь iRow2 и iCol2, он попытается проверить ячейку с R0C0, которая является неверным адресом. Если вы хотите убедиться, что строка, с которой вы сравниваете, не пуста, сначала проверьте это в цикле For:

...
For r = 9 To 90
  If dataSheet.Cells(r + 2, 3).Value = "" Then
    Exit For
  ElseIf dataSheet.Cells(r, 3).Value <> dataSheet.Cells(r + 2, 3).Value Then
    dataSheet.Cells(r, 1).Value = headerSheet.Cells(1, 14).Value
  End If
Next r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...