Excel VBA ElseIf Loop



我是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)

以下是它的工作原理,以便您可以对其进行修改,以更好地满足您的需求。

  1. MATCH函数在此数组中查找G5中的值:{"Bank Op","MDS","MM"," "},并返回找到它的元素编号。例如,空格位于第4个位置,MATCH函数返回4
  2. INDEX({"F&C","Credit Op","Deposit","Bankwide"}保持替换。在第四位置是";Bankwide";并且如果G5保持一个空间,则该空间将被返回
  3. 如果G5持有一个不在MATCH数组中的值,则会导致错误。如果出现错误,公式将返回G5中的原始值

不幸的是,您的两个代码并不能涵盖所有可能性。例如";支付";没有对应的。因此,我的公式将保持原样。如果您想要另一个结果,请将其添加到第5位{"Bank Op","MDS","MM"," ","Pay"}的MATCH数组中,并将对应的结果添加到第五位{"F&C","Credit Op","Deposit","Bankwide","Card"}的INDEX数组中。

现在,如果您更喜欢使用VBA来完成所有这些操作,则可以使用相同的逻辑。您将创建两个数组,而不是一系列IF,比如将它们命名为OriginalReplacement。您可以在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的工作表中

返回卡
查找
存款
CLCL
RERE
银行运营F&C
MDS信贷操作
MM存款
=">全银行

最新更新