【问题标题】:Selecting two columns based on active cell?根据活动单元格选择两列?
【发布时间】:2013-06-20 20:20:57
【问题描述】:

我正在尝试对 2 组中的大量列进行条件格式设置。我不确定如何记录一个宏,该宏将从活动单元格中选择整个列及其旁边的列,然后应用条件形成。然后向下移动两个单元格并重复。

这是我目前所拥有的,但它会继续回到那些特定的单元格,我需要它向右移动 2。

Sub findDups()
'
' findDups Macro

    ActiveCell.EntireColumn.Select

    Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Range("M1").Select

    Worksheets("User Check List").Activate
    Selection.Offset(0, 2).Select
End Sub

【问题讨论】:

  • ActiveCell.Resize(1, 2).EntireColumn.Select 但更好的方法不涉及使用ActiveCellSelection 方法,除非可能用于初始输入。

标签: vba excel conditional-formatting


【解决方案1】:

这应该可以帮助您入门。我完全避免使用Selection,只使用ActiveCell 作为了解从哪里开始宏的方法。最好你可以使用Application.InputBox 来做到这一点,但这没什么大不了的。

因为我不知道你希望它循环多少次,所以我使用了 Do ... Loop 语句,这将一直持续到列号 > 26。你可以在 Loop Until ... 语句中更改它。

Sub findDups()
Dim startCell As Range
Dim formatCols As Range

Set startCell = ActiveCell

Do
    Set formatCols = startCell.Resize(1, 2).EntireColumn

    formatCols.FormatConditions.AddUniqueValues
    formatCols.FormatConditions(formatCols.FormatConditions.Count).SetFirstPriority
    formatCols.FormatConditions(1).DupeUnique = xlDuplicate
    With formatCols.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With formatCols.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With

    Set startCell = startCell.Offset(0, 2)

Loop Until startCell.Column >= 26

End Sub

这是一个输出格式的例子:

【讨论】:

  • 这正是我想要的。谢谢你。我有大约 400 列(200 对)。如果单元格中有内容而不是将 26 更改为 400,是否有办法稍微更改要应用的公式?列表从第 2 行开始,第 1 行有标题,可能类似于如果第 1 行有标题运行此函数:/
  • 假设工作表只包含这些数据列,无论有多少列,您都可以执行Loop Until startCell.Column > ActiveSheet.UsedRange.Columns.Count 之类的操作。如果您的工作表也包含其他数据,它仍然可以完成,但如果是这种情况,我需要了解更多有关工作表布局的信息,以便以编程方式得出应该应用的最后一列。
  • 我会试试的。该表不包含任何其他内容。看起来就像你所拥有的,但在第 1 行有标题。
  • 嘿,我想知道是否有办法根据单元格内是否有内容来限制应用的行数。我觉得它正在应用于整个专栏,并且确实减慢了工作表的速度。也许不是整个列,比如前 100 个单元格?
  • 尝试更改为 set formatcols = startcell.resize(100, 2) 这将只执行前 100 行。这应该会大大加快速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多