首页 > 解决方案 > 突出显示单元格而不是特定单元格的宏

问题描述

我正在编写一个 excel 宏,它将获取在一个 excel 工作簿中突出显示的信息并将其粘贴到新工作簿中。

我目前拥有的代码从特定单元格获取信息,但我需要它是在整个电子表格中突出显示的某些单元格。

我目前拥有的代码是

Sub copy()

Workbooks("Book2.xlsx").Worksheets("Master Data").Range("A8:I14").copy _
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1")


End Sub

编辑

通过突出显示,我并不是指用颜色或格式突出显示。我的意思是通过单击并拖动来选择多个单元格以选择单元格

标签: vbaexcel

解决方案


Option Explicit

Sub CopySpecificRange()

    Dim srcRange As Range
    Set srcRange = Worksheets(1).Range("A8:I14")

    Dim myCell  As Range
    Dim srcRangeColored As Range

    For Each myCell In srcRange
        If myCell.Interior.Color = vbYellow Then
            If Not srcRangeColored Is Nothing Then
                Set srcRangeColored = Union(srcRangeColored, myCell)
            Else
                Set srcRangeColored = myCell
            End If
        End If
    Next myCell

    If Not srcRangeColored Is Nothing Then
        srcRangeColored.copy Worksheets(2).Range("A2")
    End If

End Sub

关于你只想要单元格,用 vbYellow 着色,上面的代码有效。只需确保您按照自己的意愿正确修复Worksheets(2)and即可。Worksheets(1)

根据您的需要,将彩色值保存在数据结构(数组或列表)中并将其一个接一个地放在 range 中可能是一个更好的主意A2。因此,请考虑您只对 A1:D10范围的黄色单元格感兴趣:

在此处输入图像描述

因此,试图得到这个:

在此处输入图像描述

您可以使用myCollas aCollection并向其中添加任何vbYellow单元格。然后,使用 incremented cnt,很容易将集合的值放在一行中:

Sub CopySpecificRange()

    Dim srcRange As Range
    Set srcRange = Worksheets(1).Range("A1:D10")

    Dim myCell  As Range
    Dim srcRangeColored As Range
    Dim myColl As New Collection

    For Each myCell In srcRange
        If myCell.Interior.Color = vbYellow Then
            myColl.Add myCell.Value2
        End If
    Next myCell

    Dim cnt As Long: cnt = 1
    With Worksheets(2)
        For Each myCell In .Range(.Cells(1, 1), .Cells(1, myColl.Count))
            myCell = myColl.Item(cnt)
            cnt = cnt + 1
        Next myCell
    End With

End Sub

关于编辑,突出显示的意思是选中。

输入:

在此处输入图像描述

输出:

在此处输入图像描述

Sub CopySelectedRanges()

    Dim myCell  As Range
    Dim srcRangeColored As Range
    Dim myColl As New Collection

    For Each myCell In Selection.Cells
        myColl.Add myCell.Value2
    Next myCell

    Dim cnt As Long: cnt = 1
    With Worksheets(2)
        For Each myCell In .Range(.Cells(1, 1), .Cells(1, myColl.Count))
            myCell = myColl.Item(cnt)
            cnt = cnt + 1
        Next myCell
    End With

End Sub

推荐阅读