当我有一些单元格地址发生变化而另一些单元格地址没有变化时,如何使循环工作。(Excel,VBA)
所以我有一段代码想要运行一列(BG9:BG500),但我不确定如何让循环函数运行所有单元格以及如何编写它,以便它只更改单元格需要更改的地址,同时保留需要保持静态的地址。
我绝对是 excel 宏和 vba 的初学者,所以我目前所知道的一切都来自于谷歌搜索如何做以及通过反复试验自己解决问题,所以我可能不知道一些关于 vba 的我应该知道的事情。
这是我想要在本专栏中运行的代码。
If Range("B9") = Range("BT28") Then
Range("BR58:CA58").Select
Selection.Copy
Range("BG9").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
需要更改的两个单元地址是(“B9”)和(“BG9”),例如:第一次运行是 9,第二次运行是 10,依此类推。我尝试过使用我在网上找到的循环函数
Dim iCell As Range
Dim iRange1 As String
Dim iRange2 As String
Dim rangeName As String
iRange1 = ActiveCell.Address
iRange2 = ActiveCell.Address
rangeName = iRange1 & ":" & iRange2
For Each iCell In Range(rangeName).Cells
但说实话,我不知道这里发生了什么,并且希望获得有关此问题的任何信息/帮助,这是我目前的完整子内容。
Sub IMPORTTOLIST()
Dim iCell As Range
Dim iRange1 As String
Dim iRange2 As String
Dim rangeName As String
iRange1 = ActiveCell.Address
iRange2 = ActiveCell.Address
rangeName = iRange1 & ":" & iRange2
For Each iCell In Range(rangeName).Cells
If Range(iRange1) = Range("BT28") Then
Range("BR58:CA58").Select
Selection.Copy
Range(iRange2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next iCell
End Sub
不确定我理解是否正确,但如果你想更改该代码:
这样它就会将 (B9, BG9) 更改为 (B10,BG10),然后将 (B11, BG11) 一直更改为 (B500, BG500) 那么也许该代码会让您满意:
这会循环 Range("BG9:BG500") 并更改引用。我改变了你的复制粘贴方法,因为在VBA中你不需要选择东西。您可以在一行中告诉 VBA 复制什么内容以及粘贴到哪里。IMO 选择很容易出错,但没有必要,而且看起来更糟糕。
希望能帮助到你。
如果您想使用同一行,请使用
.Row
单元格中的 ,或者您可以在 for 循环中迭代并使用Range("B" & i)
i 作为该行的迭代。如果您不想使用剪贴板,可以使用以下剪贴板。可能不会注意到性能上的差异,但它当然是可选的:):