首页 > 解决方案 > 通过确定两个单元格何时不匹配并从另一个工作表粘贴标题来创建标题

问题描述

我正在寻找能够开始在 C 列的第 9 行中搜索不等于下面 2 行的单元格的单元格。例如 C9 <> C11、C10 <> C12 等。然后从另一个工作表中复制一个单元格并将其粘贴到 A 列中的第一个差异所在的同一行中。EG 如果 C9 <> C11,则从 Sheet2 粘贴到 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

标签: excelvba

解决方案


如果可以的话,我建议你使用列号。然后你可能会发现你需要的索引比你当前的代码少得多,而且你不要忘记更新索引(比如 currentiRow2iCol2)那么容易。

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

这应该给你一个好的开始。我不知道内部循环到底是用来检查的,因为你从来没有接触过它iRow2iCol2它会尝试检查 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

推荐阅读