• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:命令を変数に応じて変化させるには?)

命令を変数に応じて変化させるには?

itohhの回答

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 配列にするのではいけないのでしょうか? Dim Data(10) As String Count = 0 Do Until RS.EOF  DATA(Count) = RS!データ  RS.MoveNext  Count = Count + 1 Loop 配列がダメなときは。 Count = 1 Do Until RS.EOF  Select Case Count  Case 1   DATA01 = RS!データ  Case 2   DATA02 = RS!データ   :   :   :  End Select  RS.MoveNext  Count = Count + 1 Loop では、如何でしょうか?

neo_gigantes
質問者

お礼

すばやいご回答ありがとうございます!!! 配列を使った方法があるとは知りませんでした! あの、ついでにお聞きしてよろしいでしょうか? 例としてあげましたのは、変数に読みこむフィールドを「データ」に固定し、レコードを順々に変えていましたが、今度はレコードは固定で、フィールドを変化させたいのです データ1、データ2、データ3と複数フィールドがあったとして、それを変数に順々に入れていきたいのです。それをCaseなどを使わないで変化させるにはどうすれば良いのでしょうか? ソースまで例示して頂かなくても、ヒントとなるキーワードを教えて頂ければどうにかなるかもしれません。 よろしくお願いします。m(_ _)m

関連するQ&A

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • ACCESSの SELECT SUM

    SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか?  日付         出金       氏名 2012/12/10      540      安田 2012/12/10      1020      斉藤 2012/12/10       970      TOM 2012/12/11      650      池田  2012/12/11     2010      南 2012/12/12      350      林田 2012/12/12     1200      加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金)  FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .

  • DBの読み込み順について

    VBAでACCESSのテーブルを順番に読んでいきたいのですが、 読み込みの順番が、実際に入っているデータと異なっていてばらばらです。 先頭から順番に読んでいきたいのですが、どうしたらよいのでしょうか。 Public Function DateCheck() On Error GoTo ErrExit Dim db As Database Dim rs As Recordset Set db = CurrentDb() With Application.CurrentDb Set rs = .OpenRecordset("テーブル名", dbOpenSnapshot) rs.MoveFirst Debug.Print rs!STAFFCD Do Until rs.EOF Debug.Print rs!STAFFCD rs.MoveNext Loop rs.Close db.Close End With Exit Function ErrExit:

  • 変数に取得した値をテキストボックスやコンボボックスに表示させた

    アクセスで、変数に取得した値をテキストボックスやコンボボックスに表示させたいと思っています。例えば、まずクエリをひとつ作成します。そのクエリのレコードをループで配列変数に取得していきます。フィールド(IDと名前)レコード(件数は2件とします) public ID(2) as String public 名前(2) as String Sub temp() Dim Db As Database Dim rs As Recordset Dim I As Integer Set Db = CurrentDb Set rs = Db.OpenRecordset("Q_クエリ", dbOpenDynaset) rs.MoveFirst For I = 1 To 2 If IsNull(rs![ID]) = False Then ID(I) = rs![ID] If IsNull(rs![名前]) = False Then 名前(I) = rs![名前] rs.MoveNext Next I rs.Close Db.Close End Sub (この時点で変数に値は入っているようです。) フォームで作成したテキストボックスやコンボボックスに実行ボタンをクリックすると表示するというコードは下記のように記述してみました。 Private Sub 実行_Click() Call temp (標準モジュールを呼び出す) ID = ID(1)     名前 = 名前(1) (2)省略 End Sub すると、かならず「実行時エラー'13'; 型が一致しません。」とエラーが出ます。なにぶんVBA初心者になりますので、ご教授お願い致します。ちなみに同じような方法で、同一フォーム内に2つテキストボックスを用意し、片方に値を入力して実行するともう一方のテキストボックスにその値が表示すると言う実験は成功しています。もっと他に良いコードがあれば教えて下さい。お願いします。

  • フォーム内で複数のレコードを表示

    アクセスで、表形式のサブフォーム(S_フォーム)を作成し、データを入力するとテーブル(T_明細)に追加されるようになっています。これをサブフォームのテキストボックスに入力するのではなく、別のクエリ(Q_クエリ)にあるデータを実行ボタンを押すことでサブフォームのテキストボックスに表示するようにし、テーブルのレコード(何件もある)を入力させていきたいと思っています。下記のようにコードをまず作成してみました。 Public Db As Database Public rs As Recordset Private Sub 実行_Click() Dim Temp_count As Integer Dim I As Integer Set Db = CurrentDb Set rs = Db.OpenRecordset("Q_クエリ", dbOpenDynaset) Temp_count = DCount("ID", "Q_クエリ") For I = 1 To Temp_count If IsNull(rs![氏名]) = False Then 氏名テキスト = rs![氏名] If IsNull(rs![住所]) = False Then 住所テキスト = rs![住所] rs.MoveNext Next I End Sub すると、ループした内容が全て同じテキストボックスに上書きされていき、結局1つのレコードしか追加できない状態です。入力操作でENTERしていくとサブフォーム内で複数のレコードが入力出来るように、出来ないでしょうか??良い記述があれば教えてください。お願い致します。

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • 文字列を連結した後に1つの変数として定義したい

    OpDate1、OpDate2・・・というように変数にデータを割り当てていたとき、テーブル(tbl_Option)に先ほどのデータを変数として更新クエリとして処理を行いたいのですが、文字列の連結後を1つの変数とした場合の定義の仕方がわかりません。ご教授をお願いします。 OpDate1 = #10/10/2013# OpDate2 = #11/10/2013# OpDate3 = #12/10/2013# Set DBH = CurrentDb() sql = " SELECT tbl_Option.* FROM tbl_Option;" Set rs = DBH.OpenRecordset(sql) If rs.RecordCount <> 0 Then rs.MoveLast rs.MoveFirst For iintLoop = 1 To rs.RecordCount With rs Set DBH2 = CurrentDb() →→ sql2 = " UPDATE tbl_Option SET tbl_Option.試用期限 = #" & "OpDate" & iintLoop & "#" _ & " WHERE (((tbl_Option.処理番号)=" & iintLoop & "));" DBH2.Execute sql2 .MoveNext End With Next iintLoop End If

  • VBA REPLACE関数 文字列の置換

    ACCESS VBA REPLACE関数についての質問です。 FAQテーブル(answer列) HENKANテーブル(moji列,tag列)を用意。__すべてメモ型 HENKANテーブルのmoji列の値が、FAQテーブルのanswer列の値にある場合に、HENKANテーブルのtag列の値と入れ替える というコードを現在かいております。 例) Private Sub a_Click() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = CurrentDb.OpenRecordset("SELECT ANSWER FROM FAQ", dbOpenDynaset) Set rs2 = CurrentDb.OpenRecordset("SELECT moji,tag FROM HENKAN", dbOpenDynaset) Do Until rs2.EOF Do Until rs1.EOF rs1.Edit rs1!ANSWER = Replace(rs1!ANSWER, "rs2moji","rs2!tag") rs1.Update rs1.MoveNext Loop rs1.MoveFirst rs2.MoveNext Loop rs1.Close Set rs1 = Nothing rs2.Close Set rs2 = Nothing End Sub 上記コードを一先ずテスト用に作成したのですが、うまく置換されません。 REPLACE関数部分の表記をどのようにしたらよろしいでしょうか? ご面倒おかけしますが、ご教示お願いいたします。

  • dbOpenTableとdbOpenDynaset

    Access2003 で開発をしています。 サブフォームで選択行のある項目の値を取得したいのですが、 下記ロジック(1)で正しく動作するアプリAと、動作しないアプリBが出てきました。 動作しないアプリは、他の行の値を取ってきてしまいます。 【ロジック(1)】 Set db = CurrentDb Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenTable) Cnt = 1 If rs.BOF = True And rs.EOF = True Then Else Do Until Cnt = Forms![メイン]![サブフォーム].Form.CurrentRecord rs.MoveNext Cnt = Cnt + 1 Loop    MsgBox ("項目1の値:" & rs![項目1]) End If 色々調べたところ、正しく動かないアプリでは、ロジックを下記(2)のように変更したら、 正しく動きました。 【ロジック(2)】 Set rs = db.OpenRecordset("サブフォーム用テーブル", dbOpenDynaset)   MsgBox ("項目1の値:" & rs.Fields("項目1").Value) こちらのロジックの方が簡単なのもありますが、 テーブルをopenする際、dbOpenTable と dbOpenDynaset がありますが、 サブフォームのレコードを扱う際には、dbOpenDynaset にするべきなのでしょうか。 ロジック(1)で正しく動作していると思われるアプリAは、現在稼動中のため、 ロジックに間違いがなければそのままにしたいのですが、 ロジック(1)の dbOpenDynaset だと間違いで不具合が起きる可能性があるのでしょうか? ご教授いただければ幸いです。 よろしくお願いいたします。