excel - 将包含循环、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 列。
我希望我已经澄清了我的问题和问题。
解决方案
如果在工作表上完成处理大量数据可能会使您的程序繁重,要走的路是用所有数据填充一个数组,然后更改其中的所有内容以最后将其粘贴回工作表。这是如何:
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
推荐阅读
- c# - 在 MVC5 中使用扩展方法上传文件时出现问题
- java - HeaderHttpSessionIdResolver 配置
- amazon-web-services - 基于请求参数的 AWS S3 策略条件访问
- angular - 我在网络选项卡中收到回复,但在控制台中仍然显示错误
- python - 如何使用 selenium 选择 javascript 元素
- cmake - 如何使用 cmake 将 .obj 文件添加到依赖项?
- mysql - 是否有任何功能可以在 sql 中查找具有特殊字符的结果?
- laravel-5.8 - 文件上传时如何在 Laravel 5.8 中禁用通知
- java - 编写具有多个条件的正则表达式模式
- asp.net-core - 标签助手执行顺序