excel VBA按索引号选择列

6psbrbz9  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(133)

我想在VBA中编写一些代码,通过将给定的表A与其他表B进行比较来检测和突出显示其中的更改。
但不知何故,我总是得到一个错误的数字1004:范围全局失败。
以下是我的部分尝试:

Option Explicit

Sub changeFinder()
...
    For j = 1 To m
    sht.Columns(j + 1).Insert
    sht.Columns(j + 1).Insert
    For i = 2 To n
        sht.Cells(i, j + 1).Value = Application.VLookup(sht.Cells(i, j), sht2.Range("Columns(1):Columns(j)"), j, False)
    Next i
...
    
    
    Next j

End Sub

我的目标是表A:对每一列j进行循环。对于每一列j,我想在右边创建两个临时列j+1和j+2。我想用VLookup填充j+1,覆盖表B中的列1到j。后者似乎失败了。
当我不知道这些列的字母顺序名称,而只知道索引号时,有没有一种“自然”的方法可以从特定的工作表中选择列1到j+1?
提前谢谢你最好的问候朱利安

imzjd6km

imzjd6km1#

我建议您使用Range.EntireColumn,因为将索引号引入.Range属性会更容易。
因此,第二个For循环中的行变为:

sht.Cells(i, j + 1).Value = Application.VLookup(sht.Cells(i, j), sht2.Range("A1:A" & j).EntireColumn, j, False)
6yt4nkrj

6yt4nkrj2#

使用Application.VLookup

  • 替换
sht.Cells(i, j + 1).Value = Application.VLookup(sht.Cells(i, j), sht2.Range("Columns(1):Columns(j)"), j, False)`

与:

sht.Cells(i, j + 1).Value = Application.VLookup( _
    sht.Cells(i, j), sht2.Columns(1).Resize(, j), j, False)
  • 但是我认为使用Application.Match会更好。
  • 另外,请注意,要使其正确工作,需要一个反向循环:
For j = m To 1 Step -1

您不想在插入的列中查找。

相关问题