excel公式转换成java_将长If / Then公式转换为Excel宏

本文探讨了如何将一个基于多个条件的复杂Excel公式转换为If / Then VBA宏,以提高计算速度。内容涉及SUMPRODUCT, LOOKUP, LEFT等函数的VBA实现,并展示了如何将这些函数整合到一个宏中,以减少计算时间并优化颜色高亮的条件格式。" 114144402,10535223,WebRTC NS降噪技术详解,"['WebRTC', '音频处理', '降噪算法', '信号处理', '语音通信']
摘要由CSDN通过智能技术生成

我有一个依赖于很多变量的宏 . 我设置它的方式(因为我知道公式比宏更好)是一个 =if(and((etc etc)) 语句的字符串,它可以工作,但是当我运行它时,它需要大约20秒 . 我知道有's a faster way, but I' m坚持将公式转换为If / Then以使其更快 .

它的设置方式是,如果满足所有特定条件,颜色将填充在N列中 . 然后,它使用 ISNUMBER(SEARCH(""Red"",$N1))=TRUE 公式应用条件格式以突出显示基于颜色 .

我的所有条件公式如下 . 我知道可能有一种方法将它们全部串成一个,我只是不知道它 .

F列 - 总和产品: =SUMPRODUCT((A:A=A20)*(E:E=*"N/A"*))

VBA: "=SUMPRODUCT((C[-5]=RC[-5])*(C[-1]=""N/A""))"

(它实际上显示文本“N / A” - 它没有返回错误)

G栏 - 从P列查找美元金额:

=LOOKUP(A20,O:O,P:P)

VBA: "=LOOKUP(RC[-6],C[8],C[9])"

列K - 确定列E是否以5开头:

=IF(LEFT(C20,1)="5","Yes","No")

VBA: "=IF(LEFT(RC[-8],1)=""5"",""Yes"",""No"")"

M栏 - (Count occurances in column A) * (Count Column F > 1) * (Dollar amount in D > 0)) :

=SUMPRODUCT((A:A=A20)*(F:F>1)*(D:D>0))

VBA: "=SUMPRODUCT((C[-12]=RC[-12])*(C[-7]>1)*(C[-9]>0))"

列N - 为每个条件指定颜色值并应用于列N:

=IF(AND((F20>1),(M20=1),(G20>0)),"Yellow",IF(AND((F20>1),(M20=1),(G20=0)),"Red",IF(AND((F20>1),(M20>1),(G20>0)),"Blue",IF(AND((K20="Yes"),(G20>0)),"Blue",IF(AND((K20="No"),(G20>0)),"Red",IF(G20<0,"Orange",IF(G20=0,"Red","Next")))))))

VBA: "=IF(AND((RC[-8]>1),(RC[-1]=1),(RC[-7]>0)),""Yellow""," & _ "IF(AND((RC[-8]>1),(RC[-1]=1),(RC[-7]=0)),""Red""," & _ "IF(AND((RC[-8]>1),(RC[-1]>1),(RC[-7]>0)),""Blue""," & _ "IF(AND((RC[-3]=""Yes""),(RC[-7]>0)),""Blue""," & _ "IF(AND((RC[-3]=""No""),(RC[-7]>0)),""Red""," & _ "IF(RC[-7]<0,""Orange""," & _ "IF(RC[-7]=0,""Red"",""Next"")))))))"

然后为了应用突出显示,我有:

Columns("A:E").Select

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _

"=ISNUMBER(SEARCH(""Blue"",$N1))=TRUE"

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

With Selection.FormatConditions(1).Interior

.Color = 15773696

End With

我知道有一种方法将它们串在一起......我只是不确定如何 . 甚至没有多列......这就是我如何知道如何让它工作 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段脚本的作用是修改/etc/login.defs文件中的密码策略配置。具体解释如下: ```shell if grep -q "PASS_MIN_DAYS" /etc/login.defs then sed -i '/PASS_MIN_DAYS/s/^#//' /etc/login.defs sed -i "s/PASS_MIN_DAYS.*/PASS_MIN_DAYS 6/g" /etc/login.defs fi ``` - 检查/etc/login.defs文件中是否存在"PASS_MIN_DAYS"这一行。 - 如果存在,则使用sed命令将该行的行首的注释符号#去掉,即取消注释。 - 然后使用sed命令将该行的值修改为"PASS_MIN_DAYS 6",即设置最小密码更改天数为6。 ```shell if grep -q "PASS_MIN_LEN" /etc/login.defs then sed -i '/PASS_MIN_LEN/s/^#//' /etc/login.defs sed -i "s/PASS_MIN_LEN.*/PASS_MIN_LEN 8/g" /etc/login.defs fi ``` - 检查/etc/login.defs文件中是否存在"PASS_MIN_LEN"这一行。 - 如果存在,则使用sed命令将该行的行首的注释符号#去掉,即取消注释。 - 然后使用sed命令将该行的值修改为"PASS_MIN_LEN 8",即设置最小密码长度为8。 ```shell if grep -q "PASS_MAX_DAYS" /etc/login.defs then sed -i '/PASS_MAX_DAYS/s/^#//' /etc/login.defs sed -i "s/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/g" /etc/login.defs fi ``` - 检查/etc/login.defs文件中是否存在"PASS_MAX_DAYS"这一行。 - 如果存在,则使用sed命令将该行的行首的注释符号#去掉,即取消注释。 - 然后使用sed命令将该行的值修改为"PASS_MAX_DAYS 90",即设置最大密码有效天数为90。 ```shell if grep -q "PASS_WARN_AGE" /etc/login.defs then sed -i '/PASS_WARN_AGE/s/^#//' /etc/login.defs sed -i "s/PASS_WARN_AGE.*/PASS_WARN_AGE 7/g" /etc/login.defs fi ``` - 检查/etc/login.defs文件中是否存在"PASS_WARN_AGE"这一行。 - 如果存在,则使用sed命令将该行的行首的注释符号#去掉,即取消注释。 - 然后使用sed命令将该行的值修改为"PASS_WARN_AGE 7",即设置密码过期提醒天数为7。 这段脚本的目的是修改/etc/login.defs文件中的密码策略配置,包括设置最小密码更改天数、最小密码长度、最大密码有效天数和密码过期提醒天数等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值