excel - excel宏的单元格引用更改
问题描述
几个月前,我与该网站上的一些合作者一起完善了以下代码,但是事实证明,尝试重新跟踪我在单元格引用方面的步骤很困难。澄清一下——所有改变的是下面的单元格引用。
本质上:
- C 列现已更改为 J 列
- R 列现已更改为 O 列
- S 列现在已更改为 P 列
- T 列现在已更改为 Q 列
但是对于我的生活,我无法弄清楚这些单元格引用在代码中的哪些位置生效。
Sub Display()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Sheets("DISPLAY")
Set ws2 = ThisWorkbook.Sheets("REPORT_DOWNLOAD")
Dim arr_1 As Variant, arr_2 As Variant, arr_result As Variant
arr_1 = ws1.Range("C2:C" & ws2.Range("L" & ws2.Rows.Count).End(xlUp).Row).Value2
arr_2 = ws2.Range("E2:L" & ws2.Range("E" & ws2.Rows.Count).End(xlUp).Row).Value2
ReDim arr_result(LBound(arr_2) To UBound(arr_2), 1 To 3)
Dim i As Long, j As Long
For i = LBound(arr_1, 1) To UBound(arr_1, 1)
For j = LBound(arr_2, 1) To UBound(arr_2, 1)
If arr_1(i, 1) = arr_2(j, 1) Then
'use this if you're handling numbers
arr_result(i, 1) = arr_result(i, 1) + arr_2(j, 5)
arr_result(i, 2) = arr_result(i, 2) + arr_2(j, 4)
arr_result(i, 3) = arr_result(i, 3) + arr_2(j, 8)
End If
Next j
Next i
ws1.Cells(2, 18).Resize(UBound(arr_result, 1), 3).Value2 = arr_result
End Sub
解决方案
所以基本上你想调整宏来改变你的工作表的列布局?
您的问题中缺少一些信息:
哪个工作表改变了?(仅更改相应的引用)
列的顺序改变了吗?(您的数组绝对依赖于固定的列顺序)
您有两个地方可以与 Excel 列进行交互(如下所示)。这是您需要进行更改的地方。
- 为数组赋值时:
C 到 L列:
(大概这需要你的 C->J 改变,所以"C2:C" => "J2:J")
arr_1 = ws1.Range("C2:C" & ws2.Range("L" & ws2.Rows.Count).End(xlUp).Row).Value2
E 到 L列:
arr_2 = ws2.Range("E2:L" & ws2.Range("E" & ws2.Rows.Count).End(xlUp).Row).Value2
- 将值输出到 ws1 (列 R 到 T - 这是调整大小后的第 18 列和另外 2 列,如果我计数正确的话):
(大概这需要你的 R->O, S->P, T->Q 改变,所以18 => 15)
ws1.Cells(2, 18).Resize(UBound(arr_result, 1), 3).Value2 = arr_result