Excel宏将选定的列单元格与"下一列"单元格和颜色填充相同

时间:2014-10-28 16:51:28

标签: excel vba excel-vba

我认为这一定非常容易,但我无法找到GoogleFu的帮助,而且我不了解VBA的对象参考指南。

我要做的是创建一个允许我选择列的宏,然后将该列中的每个单元格逐行比较到右侧列中的单元格(例如A1:B1 if选择A1,F1:G1选择F1)。我不希望细胞与不同色谱柱中的所有细胞相比(例如A1与B列中的所有细胞相比),或同一行中的所有细胞(例如A1与A行中的所有细胞相比)。

当我手动执行此操作时,我会突出显示要查看的两个单元格,单击“条件格式”,按公式进行格式设置,然后输入= x1<> y1(其中x1是我选择的列,例如A1或F1,y1是我要比较的列,例如B1或G1)。

我尝试使用宏录制器,但它强迫我按ID指定列,而不是允许我通过鼠标选择选择列。如果有一种方法可以弹出一个文本框,让我输入我想要的列,那就行了。如果有一种方法可以将选定列填充为x1并将列填充到右侧作为y1,那么它也可以工作。我无法找到有关这两种可能性的信息。我知道.Offset属性存在,但我不知道它是如何用于我想要的。

以下是来自我的宏录制器的代码:

    Sub ColorHighlightDiscrepancies()
'
' ColorHighlightDiscrepancies Macro
' ColorHighlightDiscrepancies
'

'
    Columns("X:Y").Select
    Range("Y1").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=X1<>Y1"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 4145151
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

这是逐行(在ExcelForum中找到)的代码,但将行中的所有单元格与行中的所有其他单元格进行比较:

Sub ColorDuplicates()

  Dim Data As Variant
  Dim DSO As Object
  Dim Rng As Range

   'Assumes Row 1 has Column Headers
    Set Rng = Range("A2").CurrentRegion.Offset(1, 0)
    Data = Rng.Value

    Set DSO = CreateObject("Scripting.Dictionary")

      For I = 1 To UBound(Data, 1)
        For J = 1 To UBound(Data, 2)
          Key = Trim(Data(I, J))
          If Key <> "" Then
            If Not DSO.Exists(Key) Then
               DSO.Add Key, 1
            Else
               Rng.Cells(I, J).Interior.ColorIndex = 3
            End If
          End If
        Next J
        DSO.RemoveAll
      Next I

    Set DSO = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

  

如果有一种方法可以弹出一个文本框,让我输入我想要的列,那就行了。

幸运的是,有:

Dim rng as Range
Set rng = Application.InputBox("Select column(s)", Type:=8)

<强>可替换地:

  

我尝试使用宏录制器,但它迫使我按ID指定列,而不是允许我通过鼠标选择选择列。

改变这个:

Columns("X:Y").Select
Range("Y1").Activate

对此(将选择当前Selection第二列中的第一个单元格):

Range(Selection.Cells(1, 2).Address).Activate