我认为这一定非常容易,但我无法找到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
答案 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