如何选择列中唯一的填充/彩色单元格?

时间:2019-04-18 01:35:00

标签: excel vba

我目前正在使用一个工作簿,该工作簿使用一行用彩色/填充灰色表示的单元格在两组数据之间进行分隔。工作表的设置方式没有任何真正的结构,但是如果我可以将数据提取到新工作表中,则可以使用其他一些代码对其进行格式化。提取数据的第一步是让我进入第二个数据集,如果我可以选择有色/填充的单元格行,则可以这样做。我试图使用记录功能,并提出了以下代码:

Application.FindFormat.Clear
    Columns("A:A").Select
    With Application.FindFormat.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.14996795556505
        .PatternTintAndShade = 0
    End With
    Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=True).Activate
ActiveCell.Select
End Sub

问题是上述代码激活/选择了没有填充的空白单元格。如果有人能为我提供一些可能的解释,那我将非常感谢。

或者,如果有人对如何在特定列中搜索唯一的填充/彩色单元格然后返回/选择该单元格地址有想法,那将同样有用。

提前感谢您的任何建议!

2 个答案:

答案 0 :(得分:1)

我倾向于使用自己的方法而不是内置的方式进行操作,因此发现调试起来更容易。并非在所有情况下都是如此,但使用这种方法确实如此。

将此功能放入VBA中的新模块中...

Public Function GetColoredCells(ByVal rngCells As Range) As Range
    Dim objCell As Range, strCells As String

    For Each objCell In rngCells.Cells
        If objCell.Interior.ColorIndex <> xlColorIndexNone Then
            strCells = strCells & "," & Replace(objCell.Address, "$", "")
        End If
    Next

    strCells = Trim(Mid(strCells, 2))

    Set GetColoredCells = rngCells.Range(strCells)
End Function

Public Sub YourRoutineToCopyAndPaste()
    Dim rngCells As Range

    Set rngCells = GetColoredCells(Sheet1.Range("A1:G13"))

    ' From here, you can work with the individual cells that the
    ' GetColoredCells function returned.

    rngCells.Select
End Sub

它不一定能为您提供所需的确切结果,但是您可以通过逻辑做些事情,并且可以证明该方法。我相信您可以继续进行下一步。

答案 1 :(得分:1)

这就是我要做的,只需调整rng,然后为MsgBox添加代码

Public Sub FindFilled()

Dim rng As Range
Dim rcell As Range
Set rng = Range("A1:A255")

  For Each rcell In rng.Cells
        If rcell.Interior.ColorIndex <> xlColorIndexNone Then
                MsgBox "Shading in Cell" & rcell.Address ' Do Code Here
                rcell.select
        End If
  Next rcell
End Sub