gpt4 book ai didi

vba - 数组范围和 IsEmpty If Then 语句 VBA。覆盖所有内容而不是选择性地插入

转载 作者:行者123 更新时间:2023-12-04 21:54:42 24 4
gpt4 key购买 nike

我是 VBA 的新手。到目前为止,我已经有大约 4 周的时间了。这是完成报告数据清理和分析的一长串宏的最后一部分。也许这不是最好的方法?我还是新手,所以我愿意接受其他建议。但它必须是一个宏。这基本上是它的样子(突出显示的字段充满了 vlookup,这就是为什么我有两个不同的数组,因为它们不连续):

link to snip of the worksheet

行数因报告而异。有时它有 4000 行,有时它更多,有时它更少。但我确保每一列都是一样的。我们正在尝试尽可能多地自动化它,以便我们能够让一些技术含量较低的人能够完成整个过程。我第一次完成这个过程花了我 6 个小时(虽然我也在做笔记)。对于这里的高级人员,每个人大约需要2个小时,具体取决于。在今年年底之前,我们大约有 300 件这样的事情要做。

无论如何,这段代码有效,但它覆盖了我插入的所有 iferror/vlookup 结果。我猜我的“For Each If Then”声明是罪魁祸首。但我已经为此工作了几天,尝试不同的方法来实现这个目标,这是我得到的最接近的。任何帮助将不胜感激。我敢肯定它的东西 super 简单...

Sub AutomateAllTheThings6()
Dim arr3() As String
Dim arr11() As String
Dim rng3 As Range
Dim rng11 As Range
Dim sourcerng As Range
Dim lastRow As Long
Call OptimizeCode_Begin
lastRow = Range("D1:D" & Range("D1").End(xlDown).Row).Rows.Count
Set rng3 = ActiveSheet.Range("BH2:BJ2" & ":BH" & lastRow)
Set rng11 = ActiveSheet.Range("BL2:BV2" & ":BL" & lastRow)
Set sourcerng = ActiveSheet.Range("BE2:BF2" & ":BE" & lastRow)
arr3() = Split("UNKNOWN,UNKNOWN,UNKNOWN", ",")
arr11() = Split("UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, 00/00/0000, 00/00/0000, 00/00/0000, 00/00/0000, NEEDS REVIEW", ",")
For Each cell In sourcerng
If IsEmpty(cell) Then
rng3.Value = arr3
rng11.Value = arr11
End If
Next
Call OptimizeCode_End
End Sub

最佳答案

您指的是整个范围:

rng3.Value = arr3



因此,当发现任何空白时,将设置整个范围,而不仅仅是该行。我们可以通过使用 Intersect 来完成该行
Intersect(rng3, ActiveSheet.Rows(cell.Row)).Value = arr3

另外,您的范围有误

Set rng3 = ActiveSheet.Range("BH2:BJ2" & ":BH" & lastRow)



将引用范围 BH2:BJ2:BH100
转至:
Set rng3 = ActiveSheet.Range("BH2:BJ" & lastRow)

所以:
Sub AutomateAllTheThings6()
Dim arr3() As String
Dim arr11() As String
Dim rng3 As Range
Dim rng11 As Range
Dim sourcerng As Range
Dim lastRow As Long
Call OptimizeCode_Begin
lastRow = ActiveSheet.Range("D1").End(xlDown).Row
Set rng3 = ActiveSheet.Range("BH2:BJ" & lastRow)
Set rng11 = ActiveSheet.Range("BL2:BV" & lastRow)
Set sourcerng = ActiveSheet.Range("BE2:BF" & lastRow)
arr3() = Split("UNKNOWN,UNKNOWN,UNKNOWN", ",")
arr11() = Split("UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, 00/00/0000, 00/00/0000, 00/00/0000, 00/00/0000, NEEDS REVIEW", ",")
For Each cell In sourcerng
If IsEmpty(cell) Then
Intersect(rng3, ActiveSheet.Rows(cell.Row)).Value = arr3
Intersect(rng11, ActiveSheet.Rows(cell.Row)).Value = arr11
End If
Next
Call OptimizeCode_End
End Sub

关于vba - 数组范围和 IsEmpty If Then 语句 VBA。覆盖所有内容而不是选择性地插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com