Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用条件生成VBA永久更改单元格的颜色?_Vba_Excel_Encoding_Formatting - Fatal编程技术网

如何使用条件生成VBA永久更改单元格的颜色?

如何使用条件生成VBA永久更改单元格的颜色?,vba,excel,encoding,formatting,Vba,Excel,Encoding,Formatting,我想根据规则永久更改单元格的颜色。我对每个列中的前2个值使用了条件格式。它应该改变顶部2个红色单元格的颜色,它做到了,但在那之后,我只需要复制和粘贴单元格的颜色,而不是颜色背后的实际公式。当我检查单元格的格式时,它说没有背景颜色。我需要复制这些颜色,并将它们粘贴到另一系列产品上,仅限于颜色。我向一位朋友要了一个宏,这是他为我创建的,但它的作用与条件格式化相同: Sub SortColoredCells() Dim rng2 As Range For Each rng2 In Ac

我想根据规则永久更改单元格的颜色。我对每个列中的前2个值使用了条件格式。它应该改变顶部2个红色单元格的颜色,它做到了,但在那之后,我只需要复制和粘贴单元格的颜色,而不是颜色背后的实际公式。当我检查单元格的格式时,它说没有背景颜色。我需要复制这些颜色,并将它们粘贴到另一系列产品上,仅限于颜色。我向一位朋友要了一个宏,这是他为我创建的,但它的作用与条件格式化相同:

Sub SortColoredCells()
    Dim rng2 As Range
    For Each rng2 In ActiveSheet.UsedRange.Columns
        c_name = GetColumnLetter(rng2.Cells.Column)
        ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
        ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Add(Range(c_name & "2:" & c_name & "1000"), _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, 0, 0)
        With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
            .SetRange Range(c_name & "1:" & c_name & "1000")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Next
End Sub

谢谢你的帮助

此代码将顶部两行的颜色更改为红色。右键单击“工作表”选项卡,选择“查看代码”,然后将其粘贴到此处,然后按F5运行代码:

       Sub main()

    'loop thru columns
    For i = 1 To UsedRange.Columns.Count

        'look for top values in each column cell by cell
        Set Rng = Sheets("Ranked").UsedRange.Columns(i).Cells

        'reset parameters
        a = 0 'top 1 value
        b = 0 '2nd top value
        Set cella = Nothing
        Set cellb = Nothing

        For Each cell In Rng
            If IsNumeric(cell) = True Then
                If cell.Value > b Then
                    If cell.Value > a Then
                       b = a
                        Set cellb = cella
                        a = cell.Value
                        Set cella = cell
                    Else
                        b = cell.Value
                        Set cellb = cell
                    End If
                End If
            End If
        Next cell

        'color the cells
        If Not cella Is Nothing Then cella.Interior.Color = vbRed
        If Not cellb Is Nothing Then cellb.Interior.Color = vbRed
    Next i
End Sub
输出

“我想根据一条规则永久更改单元格的颜色。”这条规则是什么?我想独立地将每列的前2个值涂成红色。我不太擅长编程,所以我很想听听你的想法。非常感谢。然后我只需要复制颜色,但通过条件格式化,我不能像手动给单元格着色那样只粘贴颜色。将颜色复制到哪里?我正在写论文,我需要应用动量策略。因此,我需要复制彩色单元格,并将它们粘贴到前一个周期的另一个数据范围中,这将在不改变其值的情况下为第二个数据集的单元格着色。