VBA——一對多查詢,幾行代碼代替複雜公式

如下顧客消費樣表:

Excel | VBA——一對多查詢,幾行代碼代替複雜公式

能不能隨意查詢每個顧客的消費記錄,而且隨著消費記錄的增多,查詢結果也可自動更新?

結果如下:

Excel | VBA——一對多查詢,幾行代碼代替複雜公式

當時,韓老師在 一文中給出了兩個公式:

一個是查詢記錄的INDEX+SMALL數組公式:

=INDEX(B:B,SMALL(IF($B:$B=$G$1,ROW(B:B),ROWS(B:B)),ROW(A1)))&""

<ctrl>三建結束,即得G1單元格指定消費者第一次消費記錄中的姓名,公式向下向右填充,可得該消費者的所有消費記錄。/<ctrl>

Excel | VBA——一對多查詢,幾行代碼代替複雜公式

另一個是給消費記錄添加序號的公式:

=IF(OR($G$1="",G4=""),"",COUNTIF($G$4:G4,$G$1))&"",得所有消費記錄的序號。

Excel | VBA——一對多查詢,幾行代碼代替複雜公式

以上提到的公式方法,有兩個小小的瑕疵:一是如果數據量很大,數據公式執行較慢;二是分兩個公式完成,不如一步完成的好。

今天韓老師給幾行代碼一次完成查詢功能:

<code>Sub xf()
    Dim i%, k%, irow%          '定義整形變量
    irow = Range("a1").CurrentRegion.Rows.Count   'irow為當前數據表數據行數

    k = 4                     '因為查詢數據從F4單元格開始顯示,所以K賦初值4
    Range("f4", "i" & irow).Clear   '清除顯示區域數值,以備顯示下一次查詢結果
    For i = 2 To irow
        If Range("b" & i).Value = Range("g1").Value Then
            Range("f" & k) = k - 3
            Range("g" & k).Value = Range("b" & i).Value
            Range("h" & k).Value = Range("c" & i).Value
            Range("i" & k).Value = Range("d" & i).Value
            k = k + 1
        End If
     Next
End Sub/<code>

當然,如果數據較多,也可使用定義數組的方法。

如圖:

Excel | VBA——一對多查詢,幾行代碼代替複雜公式

查詢結果如下:

Excel | VBA——一對多查詢,幾行代碼代替複雜公式


大家可以收藏這幾行代碼,輕鬆搞定多條記錄查找的問題。

---------------------------------------------

---------------------------------------


分享到:


相關文章: