首页 > 解决方案 > 将包含循环、if 或 else 的公式转换为 VBA 代码

问题描述

两个公式给我带来了很多麻烦。我曾经在第一行、第一列手动插入公式,然后将其复制并粘贴到所有列中。这里有两个公式

Column A: =(IF(C2="","",IF(LEFT(C2,3)="Bus","BU CRM","CSI ACE")))

Column B:  =IF(C2="","",IF(LEFT(C2,3)="CSI", "",RIGHT(C2,LEN(C2)-14)))

这是我的尝试

A栏:

`FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
For m = 1 To FinalRow
If Cells.Left(m, 3) = Bus Then Cells(m, 1) = "BU CRM" Else Cells(m, 1) = "CSI ACE"
Next m
End If`

B栏:

FinalRow = Cells(Rows.Count, 1).End(xlUp).Row

For J = 1 To FinalRow

If Cells(J, 3) = "" Or Cells.Left(J, 3) = "CSI" _
Then Cells(J, 2) = "" _
Else Cells(J, 2) = Right.(Cells(J, 3) - 14) _

Next J

End If

基本上我的A列代码查看C列,如果C列前3个字母中的单元格是“Bus”,那么A列应该是“BU CRM”,否则应该是“CSI ACE”

而 B 列应该查看 C 列,如果 C 列中的单元格以“CSI”开头,它应该在 B 列“”中返回。如果 C 列不以“CS”开头,则将最后 14 个字母/数字返回到 B 列。

我希望我已经澄清了我的问题和问题。

标签: excelvbaexcel-formula

解决方案


如果在工作表上完成处理大量数据可能会使您的程序繁重,要走的路是用所有数据填充一个数组,然后更改其中的所有内容以最后将其粘贴回工作表。这是如何:

Option Explicit

Sub FillColumns()

    Dim arrData As Variant, LastRow As Long, i As Long, ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1") 'change the name of the sheet to the one you are doing the code

    With ws
        LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
        arrData = .Range("A2", .Cells(LastRow, "C")).Value
        For i = 1 To UBound(arrData)
            If arrData(i, 3) Like "Bus*" Then
                arrData(i, 1) = "BU CRM"
            Else
                arrData(i, 1) = "CSI ACE"
            End If
            If arrData(i, 3) Like "CSI*" Or arrData(i, 3) = vbNullString Then
                arrData(i, 2) = vbNullString
            Else
                arrData(i, 2) = Right(arrData(i, 3), 14)
            End If
        Next i
        .Range("A2", .Cells(LastRow, "C")).Value = arrData
    End With

End Sub

推荐阅读