如何找到具有特定条件的最后一个值?

时间:2013-03-25 13:00:55

标签: vba excel-vba excel

表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代码

如果在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代码是什么?

1 个答案:

答案 0 :(得分:1)

建议跳过简介不需要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,"")(获取单元格的完整内容)
    2. 两者都会显示最高值。然后你可以自动过滤该列,隐藏空白并瞧瞧:)。

      或者

      =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魔术技巧的更多信息,请参阅How to delete multiple rows without a loop in Excel VBA