次の列見出しを持つ Excel のテーブル (Table1) があります: 従業員名、ライセンス状態、およびライセンス ステータス。テーブルのサンプルは次のようになります。
John Adams NY Active
John Adams PA Active
John Adams NJ Inactive
Ralph Ames MS Active
Ed Turner MS Pending
アクティブなライセンス、保留中のライセンス、および非アクティブなライセンスの列を含む、従業員ごとに 1 つの行を持つ概要タブを設定したいと考えています。これらのセルには、適切な州コードのカンマ区切りのリストが表示されます。例えば:
Name Active Pending Inactive
John Adams NY, PA NJ
Ralph Ames MS
Ed Turner MS
このカスタム リストにアクセスするための最良の方法に興味があります。私は以下の関数を書きましたが、これは正常に動作するようで、予想よりも高速に実行されますが、毎回テーブル全体をループするため効率が悪いようです。この関数を参照する数式を数百のセルに貼り付けました。
Function comma_state_list(the_name As String, the_status As String) As String
Dim ws As Worksheet
Dim oLo As ListObject
Dim oCol As ListColumns
Set ws = Worksheets("State Licenses")
Set oLo = ws.ListObjects("Table1")
Set oCol = oLo.ListColumns
For i = 1 To oLo.ListRows.Count
If oLo.Range(i, 1).Value = the_name And oLo.Range(i, 3) = the_status Then
comma_state_list = comma_state_list & oLo.Range(i, 4) & ", "
End If
Next i
If Len(comma_state_list) = 0 Then
comma_state_list = ""
Else
comma_state_list = Left(comma_state_list, Len(comma_state_list) - 2)
End If
End Function
VBA を使用してテーブルに対して SQL のようなクエリを実行する方法はありますか?そのため、毎回テーブル全体ではなく SQL の結果をループするだけですか? これは、要約リストをアルファベット順に並べるのにも役立つと考えていました。または、私が考えていない他のより良い方法があるかもしれません。