GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  ADOレコードセットを操作しよう!2
 
■ ADOレコードセットを操作しよう!2

レコードを検索する

レコードセットから指定した条件のレコードを検索し、カレントレコードにします。
検索したレコードがレコードセットの中に存在しないときは、BOFまたはEOFプロパティがTRUEになり、カレントレコードは未定義になります。

書式: Recordset.Find 検索条件, SkipRows, SearchDirection, Start
 
Recordset 開いているレコードセットオブジェクト
検索条件  比較演算子を用いて検索する列と、検索させる値を文字列で指定します。比較演算子にlikeを使用したり、文字列%を含めると、曖昧検索をすることができます。
SkipRows 検索の実行時に読み飛ばすレコードの数を指定します。この引数を省略すると、カレントレコードから検索を行います。
SearchDirection adSearchBackward 後方検索し、レコードセットの先頭で終了します。一致するレコードが見つからない場合、カーソルはBOFに移動します。(カーソルタイプがadOpenForwardOnlyの場合は使用できません)
adSearchForward 前方検索し、レコードセットの末尾で終了します。一致するレコードが見つからない場合、カーソルはEOFに移動します。
Start 検索開始位置を指定します。省略した場合はカレントレコードから検索を開始します。

例:
次の例ではSyainNAMEが"山田 太郎"のレコードを検索します。
RS.Find "SyainNAME = '山田 太郎'"

次の例ではSyainNAMEが"山田"で始まるレコードを検索します。
RS.Find "SyainNAME Like '山田%'"

比較演算子を用いて検索することも可能です。
RS.Find "Kinzoku < 10"

次の例ではレコードセットの中から"山田"で始まるレコードを全て検索し、出力します。
最初のレコードはSkipRows引数に0を指定して実行しますが、2件目以降のレコードではSkipRows引数に1を指定し、カレントレコードの次から検索させています。

For i=1 To RS.RecordCount
  If i=1 Then
    RS.Find "SyainNAME Like '山田%'", 0, adSearchForward
  Else
    RS.Find "SyainNAME Like '山田%'", 1, adSearchForward
  End If

  If Not RS.EOF Then
    Debug.Print RS.Fields("SyainID") & "/" & RS.Fields("SyainNAME")
  End If
Next i

※ If Not RS.EOF Then を記述しないと、検索して見つからなかった場合に「要求された操作には現在のレコードが必要です」とエラーが表示されます。

※ OLEプロバイダやカーソルの種類がRecordCountをサポートしていない場合には、RecordCountプロパティは"-1"を返します。

※ RecordCountプロパティは、静的カーソルまたはキーセットカーソルでは実際の数を返しますが、前方スクロールタイプのカーソルでは"-1"を返します。

レコードを抽出する

Filterプロパティを設定することで、指定した条件のレコードを抽出することができます。
抽出されたレコード件数は、RecordCountプロパティの値で取得できます。

書式: Recordset.Filter = 抽出条件

Recordset 開いているレコードセットオブジェクト
抽出条件 抽出する条件を表した文字列。比較演算子を用いて抽出する列と、抽出させる値を文字列で指定します。

例:
次の例ではSyainNAMEが"山田 太郎"のレコードを抽出します。
RS.Filter "SyainNAME = '山田 太郎'"

次の例ではSyainNAMEが"山田"で始まるレコードを抽出します。
RS.Filter "SyainNAME Like '山田%'"

比較演算子を用いて抽出することも可能です。
RS.Filter "Kinzoku < 10"

次の例では、勤続年数が10年以上、20年未満のレコードを抽出し、全て出力しています。

RS.Filter = "(Kinzoku >= 10) And (Kinzoku < 20)"
If RS.RecordCount = 0 Then
  MsgBox "該当するレコードは存在しません"
Else
  Do
    Debug.Print RS.Fields("SyainID") & "/" & RS.Fields("SyainNAME")
    RS.MoveNext
  Loop Until RS.EOF
End If

レコードセットのフィルタを解除するには、adFilterNone定数または長さ0の文字列を代入します。
次の例はどちらもレコードセットのフィルタを解除します。
RS.Filter = adFilterNone
RS.Filter = ""

レコードを並べ替える

並べ替えが可能なレコードセットを取得するには、次のようにレコードセットオブジェクトを開く前にCursorLocationプロパティの値を"adUseServer"から"adUseClient"に変更する必要があります。

RS.CursorLocation = adUseClient
RS.Open SQL,CN,adOpenKeyset,adLockOptimistic

書式: Recordset.Sort = 並替条件

Recordset 開いているレコードセットオブジェクト
並替条件 並べ替えるフィールドと並べ替え順序。並べ替えに使用するフィールド名と並べ替え順序を表すキーワードを文字列で指定します。
昇順に並べ替えるときはASCを、降順に並べ替えるときはDESCキーワードを使用します。(デフォルトでASC)
また、複数のフィールドで並べ替えを行うにはフィールドを","で区切って指定します。この場合、先に指定したフィールドが優先されます。

例:
次の例ではレコードセットのレコードを勤続年数の少ない順に並べ替えます。
RS.Sort ="Kinzoku ASC"

次の例ではレコードセットのレコードを勤続年数の少ない順に、さらにSyainIDの順に並べ替えます。
RS.Sort ="Kinzoku ASC,SyainID ASC"

次の例では、行った並べ替えを解除しています。
RS.Sort =""



CloseメソッドとSet 〜 Nothing

最後にレコードセットオブジェクトを閉じるCloseメソッドと、メモリを消去するSet 〜 Nothing を説明します。

Closeメソッドはオブジェクトを閉じます。オブジェクトを閉じてもメモリからは削除されません。再びOpenメソッドで開くことができます。
メモリ上から完全に削除するには、オブジェクト変数にNothing を代入してやる必要があります。Nothingを代入すると、その変数とオブジェクトの関係を無効にし、使用していたメモリ上の領域を開放します。

例:
次の例では、レコードセットを閉じメモリをクリアした後、コネクションを閉じてメモリをクリアしています。
RS.Close
Set RS = Nothing
CN.Close
Set CN = Nothing

以上、ADOオブジェクト操作の代表的なものについて紹介しました。この他にもADOオブジェクトにたいするメソッドは存在しますが、利用頻度の高いものを優先的に解説しました。

SQLステートメントとADOオブジェクト操作をマスターすれば、ExcelVBAからデータベースを自由自在に操作できます。
もちろん、今回ご紹介した内容はAccessVBA、VB6.0でも共通して使用できます。

ぜひ、お役立てください。

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,