VBA:通过变量循环列单元格

VBA: looping column cells through variable

提问人:Akhilesh Kumar 提问时间:10/18/2023 最后编辑:Akhilesh Kumar 更新时间:10/24/2023 访问量:66

问:

我是这个 VBA 的新手。我想运行一个包含一些条件的循环,但我不想使用 cell() 语法,而是想为不同的列使用变量和不同的变量。 例如,与其使用“if cell(1, i) < cell(2, i-1)”,不如使用“if varA < varB-1”,其中 varA=cell(1, i), varB=cell(2, i) 和 varB-1=cell(2, i-1)。

P.S.:数据集很大,像是上千行30-40列,要反复检查多个条件。所以也请考虑一下。

Dim i As Integer
i = 1
Do While i <= 10
if cell(1, i) < cell(2, i-1)
MsgBox Result
Loop
Excel VBA 循环变量 excel-2010

评论

1赞 taller 10/18/2023
Excel VBA中没有功能;它应该是.VBA 变量可能无法按预期运行。您能否提供条件不符合您要求的原因?Cell()Cells()If Cells(1, i) < Cells(2, i-1)
0赞 Notus_Panda 10/18/2023
使用 like 变量将导致该值被扣除 1,即如果 varB = 50 -> varB-1 = 49。您可以使用的范围变量,并使用比设置范围变量更远的单元格 1 行和 2 列。varB-1.Offset(i,j).Offset(1,2)
0赞 Akhilesh Kumar 10/19/2023
@taller是的,细胞,但不是这里的小鬼。如果 Cells(1, i) < Cells(2, i-1) 是 2 个单元格的比较,我需要对数十张纸上数百行的 14 列使用 5-10 个相似条件来执行此操作。因此,记住每一列都包含每张纸中的值是相当忙碌的。
0赞 Akhilesh Kumar 10/19/2023
@Notus_Panda正是我的想法,如果 varB = 50 -> varB-1 = 49。因此,试图找到如何以最易于阅读的方式做到这一点,因为我不会是唯一一个使用它的人。而且我不认为 Offset 可以帮助我在这里实现我想实现的目标。

答:

0赞 CHill60 10/18/2023 #1

您可以将范围中的值赋值到数组变量中,例如

Sub demo()
    
    'Must be declared as Variant
    Dim arr As Variant
    
    'Use explict range rather than UsedRange - this is a demo only
    arr = ThisWorkbook.Sheets(1).UsedRange.Value
    
    Dim cl As Long, rw As Long
    
    For rw = 1 To UBound(arr, 1)
        For cl = 1 To UBound(arr, 2)
            Debug.Print "Row", rw, "Column", cl, "Value", arr(rw, cl)
        Next
    Next
End Sub

评论

0赞 Akhilesh Kumar 10/19/2023
对简单的数组也有类似的想法,但数组有点慢。因此寻找更好的解决方案。因为我必须在不同的列、行和工作表上执行多个条件。
0赞 Notus_Panda 10/19/2023
数组有点慢?那么我们必须处理不同的数组。
0赞 CHill60 10/19/2023
@AkhileshKumar Arrays 的速度并不慢。使用单元格的速度很慢。相比之下,你正在检查的东西被保存在记忆中的任何东西都会“很快”。到底是什么让你认为数组很慢?
0赞 Akhilesh Kumar 10/24/2023
你们显然没有读过我对我下面的高个子问题的回答。如果你读过它,你就会明白我必须处理大量的数据,因为该评论中提到的值只是一个样本,这需要在更大的数据上实现。因此,请在下次发表评论之前正确了解情况。如果您仍然有疑问,可以尝试对大型数据集进行一些运行时性能比较,并自行检查数组在多个条件下对大型数据集的速度。
0赞 Akhilesh Kumar 10/24/2023
对我的问题进行了编辑,我希望您现在了解我实际上要解决的问题。