使用ARRAY中的variables声明单元格(行,列)
是否有可能使用数组中的variables来声明单元格的位置?
这是我的旧代码完美的作品,但如果我需要更多的细胞? (我把它缩短)。 该代码通过按下button将所选单元格的值设置为零。
Sub ResetButt01_Click() Cells(12, 5).Value = 0 Cells(12, 13).Value = 0 Cells(12, 21).Value = 0 Cells(19, 4).Value = 0 Cells(19, 6).Value = 0 Cells(19, 12).Value = 0 End Sub
这里是我试图通过使用数组来做到这一点:
Sub ResetButt01_Click() Dim myRow() As Variant Dim myCol() As Variant myRow = Array(12, 12, 12, 19, 19, 19) myCol = Array(5, 13, 21, 4, 6, 12) Cells(myRow, myCol).Value = 0 End Sub
但是这个代码不起作用。 所以我试过这个:
Sub ResetButt01_Click() Dim myRow() As Variant Dim myCol() As Variant Dim r As Integer Dim c As Integer myRow = Array(12, 12, 12, 19, 19, 19) myCol = Array(5, 13, 21, 4, 6, 12) r = myRow c = myCol Cells(r, c).Value = 0 End Sub
但是它又不起作用。 你有任何想法如何把值给数组,这使用这些值作为variables来定义单元格的位置?
当你写入每个单元格时,你使用的数组方法实际上比写入范围要慢得多
你最好定义一个范围,然后写一个单独的文件,代码也更容易阅读。 在我的testing中,这比你select的答案快4倍。
Sub ResetButt02_Click() Dim rng1 As Range Set rng1 = Range("E12,M12,U12,D19,E19,l19") rng1.Value2 = vbNullString End Sub
更新
设置单个范围时,最多有255个字符。 或者像你一样使用两个范围,或者使用Union
将两个范围网格化在一起:
Sub ResetButt01_Kliknút() Dim rng1 As Range Dim rng2 As Range Set rng1 = Range("C33,C40,C67,C74,C88,C95,D19,D53,E12,E26,E33,E40,E47,E60,E67,E74,E81,E88,E95,E102,F19,F53,G33,G40") Set rng2 = Range("G67,G74,G88,G95,K53,K60,L19,L26,L88,M12,M33,M40,M47,M53,M60,M67,M74,M81,M95,M102,N19,N26,N88,O53,O60,T26,T33,T67,T74,T81,T88,U12,U19,U40,U47,U53,U60,U95,U102,V26,V33,V67,V74,V81,V88") Set rng2 = Union(rng1, rng2) rng2.Value2 = 0 End Sub
您可以使用单元格地址创build逗号分隔的string:
Const myCells As String = "A1, B2, C3, D4, E5, F6" Range(myCells).Value = 0
您也可以创build命名范围myCells2
,只需调用:
Range("myCells2").Value = 0
使用数组
Sub ResetButt01_Click() Dim myRow() As Variant Dim myCol() As Variant Dim i As Long, R As Long, C As Long myRow = Array(12, 12, 12, 19, 19, 19) myCol = Array(5, 13, 21, 4, 6, 12) For i = 0 To 5 R = myRow(i) C = myCol(i) Cells(R, C).Value = 0 Next i End Sub
尝试使用循环:
Option Explicit Sub ResetButt01_Click() Dim myRow() As Variant Dim myCol() As Variant Dim i As Integer myRow = Array(12, 12, 12, 19, 19, 19) myCol = Array(5, 13, 21, 4, 6, 12) For i = LBound(myRow) To UBound(myRow) Cells(myRow(i), myCol(i)).Value = 0 Next i End Sub
M.