我是VBA的新手,希望能得到一些帮助。我有一张工作表,下面两列从单元格G:5和H:5开始。我需要根据G中的值更新H列,但遇到了问题。我需要浏览G和H.的整个专栏
pH | 程序(新逻辑( |
---|---|
存款 | |
存款 | |
存款 | |
存款 | |
支付 | |
卡 | |
支付 |
这个公式能达到你的目的吗?在G5中输入,并根据需要向下复制。
=IFERROR(INDEX({"F&C","Credit Op","Deposit","Bankwide"},MATCH(G5,{"Bank Op","MDS","MM"," "},0)),G5)
以下是它的工作原理,以便您可以对其进行修改,以更好地满足您的需求。
- MATCH函数在此数组中查找G5中的值:
{"Bank Op","MDS","MM"," "}
,并返回找到它的元素编号。例如,空格位于第4个位置,MATCH函数返回4 INDEX({"F&C","Credit Op","Deposit","Bankwide"}
保持替换。在第四位置是";Bankwide";并且如果G5保持一个空间,则该空间将被返回- 如果G5持有一个不在MATCH数组中的值,则会导致错误。如果出现错误,公式将返回G5中的原始值
不幸的是,您的两个代码并不能涵盖所有可能性。例如";支付";没有对应的。因此,我的公式将保持原样。如果您想要另一个结果,请将其添加到第5位{"Bank Op","MDS","MM"," ","Pay"}
的MATCH数组中,并将对应的结果添加到第五位{"F&C","Credit Op","Deposit","Bankwide","Card"}
的INDEX数组中。
现在,如果您更喜欢使用VBA来完成所有这些操作,则可以使用相同的逻辑。您将创建两个数组,而不是一系列IF,比如将它们命名为Original
和Replacement
。您可以在Original
数组的G5中查找该项,然后从Replacement
中选择相同的元素。你会在一个循环中这样做,比如
For R = 5 To Cells(Rows.Count, "G").End(xlUp).Row
Cells(R, "H").Value = 0 ' do the conversion here
Next R
不混合编程逻辑和数据被认为是一种很好的做法。
如果你像下面这样将数据写入代码(数据是指哪个值与另一个值匹配(,这意味着每次必须更改这些值时,你都必须再次接触代码。
If pH = "Deposit" Then
Program = "Deposit"
ElseIf pH = "Card" Then
Program = "Card"
ElseIf pH = "CL" Then
Program = "CL"
' …
这就是为什么这是一种糟糕的做法。良好的做法是将代码与任何数据分离,因此代码逻辑是通用的,可以很容易地重复使用。如果数据发生变化,则不需要程序员。此外,这可以保持代码的精简和更好的可维护性,因为它不会被大量数据搞砸。
解决方案是将数据写入工作表(这可能是一个隐藏的工作表,因此没有人看到它并感到困惑(。
因此,如果你把它放在一个名为MatchTable
的工作表中
查找 | 返回|
---|---|
存款 | |
卡 | |
CL | CL |
RE | RE |
银行运营 | F&C |
MDS | 信贷操作 |
MM | 存款 |
="> | 全银行 |