首页 > 解决方案 > excel宏的单元格引用更改

问题描述

几个月前,我与该网站上的一些合作者一起完善了以下代码,但是事实证明,尝试重新跟踪我在单元格引用方面的步骤很困难。澄清一下——所有改变的是下面的单元格引用。

本质上:

  1. C 列现已更改为 J 列
  2. R 列现已更改为 O 列
  3. S 列现在已更改为 P 列
  4. 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

标签: excelvbafor-loop

解决方案


所以基本上你想调整宏来改变你的工作表的列布局?

您的问题中缺少一些信息:

  • 哪个工作表改变了?(仅更改相应的引用)

  • 列的顺序改变了吗?(您的数组绝对依赖于固定的列顺序)

您有两个地方可以与 Excel 列进行交互(如下所示)。这是您需要进行更改的地方。

  1. 为数组赋值时:

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
  1. 将值输出到 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

推荐阅读