首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >VBA -在应用条件格式后获取实际单元格的NumberFormat

VBA -在应用条件格式后获取实际单元格的NumberFormat
EN

Stack Overflow用户
提问于 2020-10-17 15:02:15
回答 1查看 281关注 0票数 0

例如:我们有一个带有常规格式的简单单元格。

让我们添加将单元格的NumberFormat更改为"# ##0.00"的条件格式。现在它看起来像这样

问题是如何从VBA代码中获取单元格的当前NumberFormat?假设我需要实际显示的格式。

当我尝试.NumberFormat.DisplayFormat.NumberFormat时-相同的结果=“常规”。有没有办法获得正确的数字格式- "# ##0.00"

PS我需要它的原因-我正在尝试创建一个VBA宏,它将保存单元格的当前格式,但删除所有条件格式计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-18 09:41:45

正如@Ron Rosefeld和@FaneDuru指出的那样--我猜唯一的解决方案就是遍历所有的格式条件,并得到一个有效的。不出所料,这是相当棘手的。

幸运的是,我找到了一个函数来确定对于给定的单元当前哪个CF是活动的(如果有的话)-来自http://www.cpearson.com/excel/cfcolors.htm的函数ActiveCondition。我已经修改了它,并制作了CFNumberFormat函数,它可以做我想做的事情。代码如下。

示例:https://i.stack.imgur.com/CJyrD.png

另一个有效的概念是,Rng.FormatConditions(n).NumberFormat总是返回本地数字格式(.NumberFormatLocal)。这意味着,如果您需要将此NumberFormat应用于其他单元格,则需要将其指定为本地号码格式:

代码语言:javascript
运行
AI代码解释
复制
Selection.NumberFormatLocal = Rng.FormatConditions(n).NumberFormat

如果不这样做,那么您可能会得到数字格式的意外转义空格,这将导致错误。

功能代码:

代码语言:javascript
运行
AI代码解释
复制
    Private Function GetStrippedValue(CF As String) As String
        Dim Temp As String
        If InStr(1, CF, "=", vbTextCompare) Then
           Temp = Mid(CF, 2, Len(CF) - 1)
           If Left(Temp, 1) = "=" Then
               Temp = Mid(Temp, 2)
           End If
        Else
           Temp = CF
        End If
        GetStrippedValue = Temp
    End Function
    
    Private Function ActiveCondition(Rng As Range) As Integer
        Dim Ndx As Long
        Dim FC As FormatCondition
        Dim Temp As Variant
        Dim Temp2 As Variant
        
        If Rng.FormatConditions.Count = 0 Then
            ActiveCondition = 0
        Else
            For Ndx = 1 To Rng.FormatConditions.Count
                Set FC = Rng.FormatConditions(Ndx)
                Select Case FC.Type
                    Case xlCellValue
                    Select Case FC.Operator
                        Case xlBetween
                            Temp = GetStrippedValue(FC.Formula1)
                            Temp2 = GetStrippedValue(FC.Formula2)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) >= CDbl(Temp) And _
                                   CDbl(Rng.Value) <= CDbl(Temp2) Then
                                   ActiveCondition = Ndx
                                   Exit Function
                               End If
                           Else
                              If Rng.Value >= Temp And _
                                 Rng.Value <= Temp2 Then
                                 ActiveCondition = Ndx
                                 Exit Function
                              End If
                           End If
        
                        Case xlGreater
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) > CDbl(Temp) Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            Else
                               If Rng.Value > Temp Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
        
                        Case xlEqual
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) = CDbl(Temp) Then
                                   ActiveCondition = Ndx
                                   Exit Function
                               End If
                            Else
                               If Temp = Rng.Value Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
        
        
                        Case xlGreaterEqual
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) >= CDbl(Temp) Then
                                   ActiveCondition = Ndx
                                   Exit Function
                               End If
                            Else
                               If Rng.Value >= Temp Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
        
                      
                        Case xlLess
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                                If CDbl(Rng.Value) < CDbl(Temp) Then
                                   ActiveCondition = Ndx
                                   Exit Function
                                End If
                            Else
                                If Rng.Value < Temp Then
                                   ActiveCondition = Ndx
                                   Exit Function
                                End If
                            End If
        
                        Case xlLessEqual
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) <= CDbl(Temp) Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            Else
                               If Rng.Value <= Temp Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
        
        
                        Case xlNotEqual
                            Temp = GetStrippedValue(FC.Formula1)
                            If IsNumeric(Temp) Then
                               If CDbl(Rng.Value) <> CDbl(Temp) Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            Else
                               If Temp <> Rng.Value Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
        
                       Case xlNotBetween
                            Temp = GetStrippedValue(FC.Formula1)
                            Temp2 = GetStrippedValue(FC.Formula2)
                            If IsNumeric(Temp) Then
                               If Not (CDbl(Rng.Value) <= CDbl(Temp)) And _
                                  (CDbl(Rng.Value) >= CDbl(Temp2)) Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            Else
                               If Not Rng.Value <= Temp And _
                                  Rng.Value >= Temp2 Then
                                  ActiveCondition = Ndx
                                  Exit Function
                               End If
                            End If
                    
                       Case Else
                            Debug.Print "UNKNOWN OPERATOR"
                   End Select
        
        
                Case xlExpression
                    If Application.Evaluate(FC.Formula1) Then
                       ActiveCondition = Ndx
                       Exit Function
                    End If
        
                Case Else
                    Debug.Print "UNKNOWN TYPE"
               End Select
        
            Next Ndx
        
        End If
        
        ActiveCondition = 0
    
    End Function
    
    Private Function CFNumberFormat(Rng As Range) As String
    
        Dim AC As Integer
        AC = ActiveCondition(Rng)
        If AC = 0 Then
            CFNumberFormat = Rng.NumberFormatLocal
        Else
            CFNumberFormat = Rng.FormatConditions(AC).NumberFormat
        End If
    
    End Function


  [1]: https://i.stack.imgur.com/CJyrD.png
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64403866

复制
相关文章
单元格格式/条件格式的妙用
▽▼▽ 这个技巧在绩效管理、成绩考评以及其他设计考核的工作中都会经常用到。首先上图,大家先观察一下! 大家可以看到,以上三组效果,规则都是一样的: 红色(成绩<60) 黄色(成绩=60) 绿色(成
数据小磨坊
2018/04/10
4.9K0
单元格格式/条件格式的妙用
条件格式单元格图表
今天跟大家分享条件格式单元格图表! ▼ 这类图表比较特殊,不是通过excel的内置图标库制作,而是通过excel的条件格式工具制作的存放在单元格中的图表。这种图表可以很好的与单元格的其他数据信息融合在
数据小磨坊
2018/04/10
2K0
条件格式单元格图表
VBA专题10-1:使用VBA操控Excel界面之设置单元格格式
本文主要讲解设置工作表单元格或单元格区域格式的VBA代码,包括设置字体、数字格式、文本对齐、填充单元格背景色、设置单元格边框等。
fanjy
2020/06/24
7.2K0
三角符号凸显数据的盈亏趋势
今天要跟大家分享的技巧是用三角符号来凸显数据表中的盈亏趋势! ▽▼▽ 通常一张带有数据以及增长趋势表格,需要读者反复浏览才能明白其中的趋势和增减情况,可是如果你能在数字的旁边加上形象涨跌的标记,那么读
数据小磨坊
2018/04/10
2.5K0
三角符号凸显数据的盈亏趋势
Excel公式技巧27: 在条件格式中使用公式来突出显示单元格
条件格式与公式相配合,往往能够发挥很大的威力,其中之一就是用来突出显示单元格。如下图1所示,在“新建格式规则”对话框中:
fanjy
2020/04/14
3.3K0
Excel公式技巧27: 在条件格式中使用公式来突出显示单元格
xlwings库基本使用
首先,xlwing免费开源,功能强大;pro版本商业收费,个人免费。 但是也有缺点,xlwing必须配合Excel来使用。 如果想在linux上使用,我还是推荐使用pandas或者openpyxl xlwing配合jupyter可以交互式操作excel文档。xlwing可以像VBA宏一样操作Excel文档。可以很好的适配pandas和matplotlib
Crayon鑫
2023/10/10
7180
ElasticSearch[v6.2] 在实际项目中的应用
 摘要:本文所讲述的内容,为ElasticSearch(以下简称ES)全文搜索引擎在实际大数据项目的应用;ES的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。ES 是 Lucene 的封装,Java开发,提供了 REST API 的操作接口,开箱即用,是目前全文搜索的首选;
星哥玩云
2022/07/24
8060
VB.NET 第三方 EPPLUS 操作类库应用笔记
  EPPlus 是使用 Open Office XML 格式(xlsx)读写 Excel 2007 / 2010 文件的.net 开发库。
办公魔盒
2021/11/02
6K1
VBA: 获取单元格内超链接文件的绝对路径
文章背景:在工作中,有时为了内容跳转的方便,会在单元格内设置超链接,通过Hyperlinks(1).Address,得到的是超链接文件的相对路径。有时为了VBA代码的编写方便,需要使用的是链接文件的绝对路径。下面通过编写VBA函数,获取单元格内超链接文件的绝对路径。
Exploring
2022/09/20
3.5K0
VBA: 获取单元格内超链接文件的绝对路径
Runtime在iOS开发中的实际应用
运行时的文章一直被同学们热炒,当然现在面试中也都喜欢问道,当大伙说的头头是道时候,可到真正的项目中几乎局限只会关联对象或者MethodSwizzling奉为神剑到处挥砍,开发毕竟不能纸上谈兵,实践出真知,介绍目前在项目中runtime的具体使用,真切希望和各位同学探讨。
羊羽shine
2019/05/30
1K0
特征工程在实际业务中的应用!
知乎|https://www.zhihu.com/people/xu-xiu-jian-33
Datawhale
2022/02/17
5420
特征工程在实际业务中的应用!
模拟数据在实际场景中的应用
我们在做数据统计类的测试时,往往需要准备各种源数据,如果是本系统的内部产生的数据,还好处理,但如果是一些对接第三方的数据报表测试,该如何展开呢?本文通过两种常见的场景来做一些分享。
CKL的思考
2023/02/01
1.2K0
在Excel中创建条件格式图表
问题:希望图表中对于比率为90或以上的呈现绿色,70至90的呈现黄色,低于70的呈现红色。可以在图表中设置条件格式吗?如下图1所示。
fanjy
2023/09/15
4460
在Excel中创建条件格式图表
Excel:文件打开后已设置的单元格格式全部消失
文章背景: 根据工作的需要,早期内部根据不同需求设置了很多模板文件,都是xls格式,而目前电脑上使用的软件是office365。最近发现,采用这些模板文件(xls格式),拷贝完数据并保存后,下次再打开时,已设置好的单元格格式全部消失,类似记事本上的数据。一开始只是个别文件有问题,后来这样的问题文件逐渐增多。
Exploring
2022/09/20
2.5K0
Excel:文件打开后已设置的单元格格式全部消失
频率计在实际中的应用
在电子技术领域,频率是一个最基本的参数。频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,这时可以选择使用频率计来进行测量。尤其是频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。
时频专家
2020/03/05
9960
回溯算法在项目中的实际应用
大多数同学苦于刷了很多算法却在项目中很少应用,难以加深印象,而且总有同学问着有啥用啊有啥用啊?为了刷题而刷题,带着需求场景去应用算法是最为直接的学习方式。
疯狂的KK
2023/06/30
2130
回溯算法在项目中的实际应用
特征工程在实际业务中的应用!
首先明确一下问题,“特征工程在实际业务中的应用”,也就是领域业务知识和机器学习建模的相互结合。下面会对特征工程简单介绍,并且用自己工作中实际参与的项目给大家分享在银行贷款申请反欺诈场景&零售线上APP推荐场景的机器学习建模里,业务知识是如何帮助特征工程的。
算法进阶
2022/06/02
4660
特征工程在实际业务中的应用!
频率计在实际中的应用
在电子技术领域,频率是一个最基本的参数。频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,这时可以选择使用频率计来进行测量。尤其是频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。
时频专家
2020/09/12
5390
策略模式在实际业务中的应用
策略模式主要由以上三个身份组成,这里我们就不过多及时策略模式的基础知识,默认大家已经对策略模式已经有了一个基础的认识。
一个程序员的成长
2021/11/02
7910
频率计在实际中的应用
在电子技术领域,频率是一个最基本的参数。频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,这时可以选择使用频率计来进行测量。尤其是频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。
时频专家
2020/04/25
5690
频率计在实际中的应用

相似问题

格式化单元格值的Vba Numberformat多个条件

11

ClosedXML -应用条件格式后获取单元格样式

112

使用VBA清除Excel单元格格式而不清除NumberFormat

12

VBA如何使用单元格值应用条件格式?

18

VBA将条件格式应用于单元格

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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