首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >更快地更改基于值的单元格颜色

更快地更改基于值的单元格颜色
EN

Stack Overflow用户
提问于 2017-07-08 21:23:17
回答 4查看 287关注 0票数 0

我有基于内容改变单元格颜色的vba代码,目前我使用行和列索引的for循环和select case语句分别遍历13000个单元格,但这需要大约30秒。有谁知道更快的方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-09 10:38:28

我怀疑从单元格读取每个值会占用大量的时间。尝试将数据读取到一个数组中,然后创建15个范围,每种颜色一个范围。然后,您只需在每个范围的末尾填充适当的颜色即可。

话虽如此,13,000个细胞着色将需要一些时间。我不能超过10秒。如果你只需要做一次,那么30秒似乎并不是那么糟糕?

代码语言:javascript
运行
AI代码解释
复制
Dim r As Long, c As Long, i As Long, rOff As Long, cOff As Long
Dim data As Variant
Dim dataRange As Range, cell As Range
Dim colourRanges(14) As Range
Dim colours(14) As Long

'Define the colours
colours(0) = 255
colours(1) = 65535
colours(2) = 5296274
colours(3) = 12611584
colours(4) = 10498160
colours(5) = 49407
colours(6) = 192
colours(7) = 5287936
colours(8) = 15773696
colours(9) = 6299648
colours(10) = 5540756
colours(11) = 9803737
colours(12) = 13083058
colours(13) = 9486586
colours(14) = 14474738

'Define the target range
With Sheet1
    Set dataRange = .Range(.Range("A2"), _
                           .Cells(.Rows.Count, "A").End(xlUp)) _
                    .Resize(, 103)
End With

'Calculate offsets from "A1"
With dataRange
    rOff = .Cells(1).Row - 1
    cOff = .Cells(1).Column - 1
End With

'Read data
data = dataRange.Value2


'Test the data
For r = 1 To UBound(data, 1)
    For c = 1 To UBound(data, 2)
        Select Case data(r, c)
            Case 1: i = 0
            Case 2: i = 1
            Case 3: i = 2
            Case 4: i = 3
            Case 5: i = 4
            Case 6: i = 5
            Case 7: i = 6
            Case 8: i = 7
            Case 9: i = 8
            Case 10: i = 9
            Case 11: i = 10
            Case 12: i = 11
            Case 13: i = 12
            Case 14: i = 13
            Case 15: i = 14
            Case Else: i = -1
        End Select

        'Build the colour ranges
        If i <> -1 Then
            With Sheet1
                Set cell = .Cells(r + rOff, c + cOff)
                If colourRanges(i) Is Nothing Then
                    Set colourRanges(i) = cell
                Else
                    Set colourRanges(i) = Union(colourRanges(i), cell)
                End If
            End With
        End If
    Next
Next

'Colour the ranges
Application.ScreenUpdating = False
For i = 0 To 14
    colourRanges(i).Interior.Color = colours(i)
Next
Application.ScreenUpdating = True
票数 1
EN

Stack Overflow用户

发布于 2017-07-09 05:29:39

这是我从另一个问题中得到的一些示例代码。您应该能够看到设置autofilter是多么容易,一旦它根据您的标准进行筛选,只需为您想要为可见单元格设置的任何颜色执行interior.colorindex,然后更改下一个颜色的标准,漂洗并重复。我还建议在子集计算开始时将计算改为手动,同时屏幕更新为假,并启用事件假,然后在子集计算结束时将计算恢复为自动,并再次使其他两件事为真。

代码语言:javascript
运行
AI代码解释
复制
Private Sub CommandButton2_Click()
Dim IMBacklogSh As Worksheet, logoffSh As Worksheet, deniedsh As Worksheet

Set IMBacklogSh = ThisWorkbook.Worksheets("Backlog")
Set logoffSh = ThisWorkbook.Worksheets("Claims Logged off")
Set deniedsh = ThisWorkbook.Worksheets("Claims Denied")

With IMBacklogSh
    If .AutoFilterMode Then .AutoFilterMode = False
    With .Cells(1, 1).CurrentRegion
        .AutoFilter field:=13, Criteria1:="#N/A"
        .AutoFilter field:=14, Criteria1:="C"
        With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0)
            If CBool(Application.Subtotal(103, .Cells)) Then
                .Copy Destination:= _
                    logoffSh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
                'optionally delete the originals
                .EntireRow.Delete
            End If
        End With
        .AutoFilter field:=14, Criteria1:="<>C"
        With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0)
            If CBool(Application.Subtotal(103, .Cells)) Then
                .Copy Destination:= _
                    deniedsh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
                'optionally delete the originals
                .EntireRow.Delete
            End If
        End With
    End With
    If .AutoFilterMode Then .AutoFilterMode = False
End With

结束子对象

票数 1
EN

Stack Overflow用户

发布于 2017-07-08 21:25:56

也许是按照你用颜色编码的标准进行排序,然后改变范围,最后再回到原来的顺序。以这样一种方式对其进行排序,即不需要更改颜色的那些将显示在末尾。然后你就可以更快地退出..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44990871

复制
相关文章
如何更愉快地使用em
CSS提供了很多种方式去定义一个值。大家最熟悉的可能也是最容易使用的就是像素(pixel),这被称做“绝对单位”。也就是说,5px在不同的场景下是一样的值。而其他的单位,如em和rem,不是绝对的而是相对的。相对单位的值会根据外部影响因素的变化而变化。例如,2em的值取决于你在哪个元素使用它(有时甚至是哪个属性)。很自然,相对单位使用起来会比较困难。
六小登登
2018/09/18
9120
Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色
1.用GridView中的getRowClass方法来实现颜色的渲染,status是在Store中定义的字段
全栈程序员站长
2022/09/18
3.5K0
Extjs grid设置单元格字体颜色,单元格背景颜色,行背景颜色
设置CListCtrl单元格的颜色
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152481.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
8710
SAP abap ALV的列颜色、、行颜色、单元格颜色设置
matinal
2023/10/13
4630
如何更改 Ubuntu 的终端的颜色
但是,如果你想要一个独一无二的的终端体验或者符合你自身品位的一些东西,你也可以改变你的 Ubuntu 的终端的颜色。
用户1880875
2021/11/08
14.7K0
RGB颜色值转十六进制颜色值
值”#FF9999″是由红绿蓝三原色组成的颜色,#号后的两位表示红,其后的两位为绿,最后的两位为蓝。
全栈程序员站长
2022/07/05
1.4K0
RGB颜色值转十六进制颜色值
Excel实战技巧:基于单元格的值显示相应的图片
选择零件号,显示相应的零件图;选择员工姓名,显示该员工相片,等等,都是选择单元格中的值而显示相应的图片的例子,也就是说基于单元格的值查找并显示对应的图片,单元格的值改变,图片也自动改变。效果如下图1所示。
fanjy
2023/02/24
9.6K0
Excel实战技巧:基于单元格的值显示相应的图片
[踩坑]iconfont Symbol svg引入无法更改颜色
最近公司组织架构调整(反正每次组织架构调整,领导就会下场。有一个idea或者有重构一下,先定一个月底上),被拉取一个项目组做新项目。这边图标现状:有些项目是font-face方式,有些用的阿里图标库,最近又在用腾讯图标库,有些甚至直接切图。
玖柒的小窝
2021/11/16
3.7K0
[踩坑]iconfont Symbol svg引入无法更改颜色
keil更改黑色背景颜色「建议收藏」
1、先将keil安装目录下UV4中global文件复制出来留作备用,然后用记事本打开安装目录下的global文件
全栈程序员站长
2022/09/10
7.7K0
keil更改黑色背景颜色「建议收藏」
WPF DataGrid 改变单元格字体颜色
第一种方法,指定 DataGrid 里单元格的值是否符合用户自定义的条件,如果不,改变指定的颜色:
用户9127601
2021/12/30
3.1K0
Android系统更改状态栏字体颜色
原文地址:http://blog.isming.me/2016/01/09/chang-android-statusbar-text-color/,转载请注明出处。 随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上面的文字就无法看清了。因此本文提供一些解决方案,可以是MIUI6+,Flyme4+
非著名程序员
2018/02/02
2.5K0
vue ColorPicker 颜色选择器,传颜色值的问题
vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。
王小婷
2021/11/24
2.5K0
vue ColorPicker 颜色选择器,传颜色值的问题
SecureCRT更改vim中#注释的文本内容颜色
今天在学习redis的时候,发现vim打开redis.conf配置文件的时候,#注释起来的代码是蓝色的,阅读起来很不方便。
上分如喝水
2021/08/16
6.3K0
SecureCRT更改vim中#注释的文本内容颜色
listview灵活控制单元格颜色的代码(aardio)
image.png listview颜色控制效果 import win.ui; /*DSG{{*/ var winform = win.form(text="listview color";right=627;bottom=294;border="dialog frame") winform.add( button={cls="button";text="增加项目:指定整行同一颜色";left=393;top=39;right=591;bottom=83;z=2}; button2={cls="butt
用户2135432
2018/06/04
1.8K0
Excel技巧:使用上方单元格的值填充空单元格
有时候,工作表列中有许多空单元格,而不是在每行都重复相同的内容,这样可以使报表更容易阅读,然而也会导致一些问题,例如不方便排序或筛选数据。
fanjy
2022/04/13
3.4K0
Excel技巧:使用上方单元格的值填充空单元格
04.HTML区块/布局/表单/框架/颜色/颜色名/颜色值
04.HTML区块/布局/表单/ 框架/颜色/颜色名/颜色值 HTML <div> 和<span> ---- HTML 可以通过 <div> 和 <span>将元素组合起来。 ---- HTML 区块元素 大多数 HTML 元素被定义为块级元素或内联元素。 块级元素在浏览器显示时,通常会以新行来开始(和结束)。 实例: <h1>, <p>, <ul>, <table> ---- HTML 内联元素 内联元素在显示时通常不会以新行开始。 实例: <b>, <td>, <a>, <img> ---- HTML
Java帮帮
2018/03/15
6.7K0
04.HTML区块/布局/表单/框架/颜色/颜色名/颜色值
怎样将Excel包含某字符的单元格填充颜色
  在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了。   比如要将A1到A12区间包含数字1的单
ytkah
2018/03/05
3K0
怎样将Excel包含某字符的单元格填充颜色
更改PPT所有页面字体与页面颜色的技巧
在评估期间,无心插柳地探索到一个新技术,就是关于PPT课件统一更改字体颜色和页面背景颜色的问题。
用户1191760
2019/02/27
5.7K0
excel如何合并相同项单元格内容_不能对合并单元格部分更改
工作中可能想要快速的实现将Excel相同项目单元格合并,下面就跟大家简单地介绍一下。
全栈程序员站长
2022/11/17
1.9K0
excel如何合并相同项单元格内容_不能对合并单元格部分更改
点击加载更多

相似问题

基于其他单元格更改颜色

20

基于单元格值的颜色单元格

31

基于单元格值的单元格颜色

13

基于值的颜色单元格- VBA

11

基于值的单元格颜色变化

27
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文