0

表 1 列 A 具有以下值(它有大约 3000 条记录。我给出了以下示例值)。我需要找到特定文本的最后一个值。

RVT-01
RVT-02
RVT-03
RVT-04
RVT-05
RVT-06
RHT-01
RHT-02
RHT-03
RHT-04
RHT-05
ROI-01
ROI-02
ROI-03
SWO-01
SWO-02
SWO-03
SOR-01
SOR-02
SOR-03
SOR-04
SOR-05
SOR-06
SOR-07

使用 VBA 代码

如果输入 short tex sheet1.cells(2,2) = SWO,我需要最后一个值sheet1.cells(2,4)=SWO-03
如果我输入 sheet1.cells(2,2) = RHT,我需要最后一个值sheet1.cells(2,4)=RHT-05
如果我输入 sheet1.cells(2,2) = RVT,我需要最后一个值sheet1.cells(2,4)=RVT-06
如果我输入 sheet1.cells(2,2) = SOR,我需要最后一个值sheet1.cells(2,4)=SOR-07

上述过程的 VBA 代码是什么?

4

1 回答 1

1

正如Skip Intro建议的那样,不需要 VBA:在 B 列中,输入如下公式:

  1. =IF(IF(LEFT(A1,3)=LEFT(A2,3),1,0)=0,RIGHT(TRIM(A:A),2),"")(获得最大数量):

或者

  1. =IF(IF(LEFT(A1,3)=LEFT(A2,3),1,0)=0,A:A,"")(获取单元格的完整内容)

两者都会向您显示最高值。然后你可以自动过滤该列,隐藏空白,瞧 :)

或者

=IF(IF(LEFT($A1,3)=LEFT($A2,3),1,0)=0,NA(),"")

将使您能够在 VBA 中使用 SpecialCells 来获得一个范围,您可以在该范围内查询每个组中的最大值,如下所示:

Sub test()

    Dim rng As Range
    Dim cell

    Range("B1:B" & Range("A65536").End(xlUp).Row).Formula = "=IF(IF(LEFT($A1,3)=LEFT($A2,3),1,0)=0,NA(),"""")"
    Set rng = Range(Range("B1:B" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeFormulas, xlErrors).Offset(0, -1).Address)

    For Each cell In rng
        Debug.Print cell.Address & " =" & cell.Value
        MsgBox cell.Address & " =" & cell.Value
    Next
End Sub

有关 SpecialCells 魔术技巧的更多信息,请参阅如何在 Excel VBA 中删除多行而不使用循环

于 2013-03-25T14:33:38.477 回答