首页 > 解决方案 > 如何使用 Match 函数并引用它返回的行号?

问题描述

我会尽力解释这一点。我正在处理一个包含大约 150 列和 2,500 行的电子表格。在 D 列中,有一个对该行唯一的标识号。我需要在该列上过滤特定的 ID 号(例如 B5555),然后从该行的 AB、O 和 M 列中的值中减去该行的 AH 列中的值。然后我需要将 AH 列中的值归零。

过滤 ID 号没有问题,但 B5555 可以显示在任何行中。即,一周显示在第 2,300 行,下一周显示在 1,500,所以我不能让公式说从 AB 2300 中减去 AH2300,因为下周将作用于错误的单元格。如何使公式从 B5555 显示的行中专门减去?到目前为止,我的代码只过滤了那个 ID 号,所以它不多,但如下所示。我是 VBA 操作系统的新手,不胜感激。

Sub ManualAdjustments()

Dim wbTarget            As Workbook
Dim wbThis              As Workbook
Dim strName             As String
Dim rownum              As Integer

Set wbTarget = Workbooks("Weekly Data")

wbTarget.Activate

Worksheets("Raw").Activate

rownum = Application.WorksheetFunction.Match("B5555", 
Sheets("Raw").Range("D:D"), 0)

上面的代码是我到目前为止所拥有的。如何在简单的减法公式中引用“rownum”?会不会是:Worksheets("Raw").Range("AHrownum")-Worksheets("Raw").Range("ABrownum")

标签: excelvbafiltersubtraction

解决方案


略有不同的做法:

Sub ManualAdjustments()

    Dim wbTarget            As Workbook
    Dim shtTarget           As Worksheet
    Dim wbThis              As Workbook
    Dim strName             As String
    Dim rownum              As Long '<<< safer never to use Integer...

    Set wbTarget = Workbooks("Weekly Data")
    Set shtTarget = wbTarget.Sheets("Raw")

   'no "worksheetfunction" = no runtime error if no match
    rownum = Application.Match("B5555", shtTarget.Range("D:D"), 0)

    If Not IsError(rowNum) Then '<< test for successful match here
        With shtTarget.Rows(rownum) 

            'Here Range() is *relative to the row*
            .Range("C1").Value = .Range("A1").value = .Range("B1").Value

        End With

    End if
End Sub

推荐阅读