フィールドの値ごとに別のシートへ転記する
Sub フィールドの値別にシートへ転記() Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim tmpRS As New ADODB.Recordset Dim myFile As String, myTbl As String, myFld As String '対象となるデータベース、テーブル、フィールド myFile = ThisWorkbook.Path & "\mdb\4-sampleDB.mdb" myTbl = "アルバイト" myFld = "所属" '接続 With myCon .Provider = "Microsoft.Jet.OLEDB.4.0;" .Open myFile End With '指定したテーブルの任意フィールドから重複を取り除いたリストを取得 tmpRS.Open "SELECT DISTINCT " & myFld & " FROM " & myTbl, myCon 'フィールドの見出しとデータリストを転記 With ActiveWorkbook.Worksheets.Add .Name = tmpRS.Fields(0).Name Range("A1").CopyFromRecordset tmpRS End With '取り出し元となるテーブルを取得 With myRS .Source = myTbl .ActiveConnection = myCon .CursorLocation = adUseClient .Open End With 'tmpRSのカーソルを先頭へ戻す tmpRS.MoveFirst '取得したりデータ分だけ「フィルタ→転記」を繰り返す Do Until tmpRS.EOF '取得レコードにフィルタをかける myRS.Filter = myFld & "='" & tmpRS.Fields(0).Value & "'" 'シートを追加、シート名を取得フィールド名にして、データ転記 With ActiveWorkbook.Worksheets.Add .Name = tmpRS.Fields(0).Value .Range("A1").CopyFromRecordset myRS End With '重複を除いたリストのデータを次に進める tmpRS.MoveNext Loop tmpRS.Close: Set tmpRS = Nothing myRS.Close: Set myRS = Nothing myCon.Close: Set myCon = Nothing End Sub
特定フィールドの重複を取り除いた値を返すDISTINCT指定を行ったSELECT命令の結果を受け取るRecordsetオブジェクト(tmpRS)と、任意のテーブル全体を扱うRecordsetオブジェクト(myRS)の2つを用意し、重複を取り除いたリストを元にフィルタをかけ、転記を行う。
データ取得元となる「アルバイト」テーブル
実行結果