• ベストアンサー

AccessVBA ControlSourceのデータについて

こんにちは。 サブフォームを連続表示させているフォームがあって、 Me.RecordSourceに指定したSQLでデータを取ってきています。 Me[テキストボックス]には0か-1のどちらかしか入ってきません。 やりたいことは、0が入ってきた場合は「文字A」を表示し、-1が入ってきた場合は「文字B」を表示する、ということです。 そういったことは出来るのでしょうか?

  • jobvba
  • お礼率60% (166/274)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

コントロールソース =IIF([フィールド名]=0,'文字A','文字B') SQL側で対処する方法 select ・・・,IIF([フィールド名]=0,'文字A','文字B'),・・・ コンボボックスでも簡単な方法がありますね。

jobvba
質問者

お礼

教えていただいた方法でできました! ありがとうございました!

その他の回答 (3)

noname#140971
noname#140971
回答No.4

tab1: ID_fld1 _1____0 _2___-1 _3_____ _4___-1 SELECT  tab1.ID,  IIf(NZ([fld1])=0,"文字A","文字B") AS Xfer_fld1 FROM tab1; SELECT tab1.ID,IIf(fld1,"文字B","文字A") AS Xfer_fld1 FROM tab1; 一つは、サブフォームのレコードソースで翻訳することです。 で、[Xfer_fld1]などの翻訳結果を表示。 ただし、上記サンプルですと空値は"文字A"または"文字B"に翻訳されます。 SELECT  tab1.ID,  IIf(fld1 Is Null,"",IIf(fld1,"文字B","文字A")) AS Xfer_fld1 FROM tab1; で、IIFをネストすれば、3項演算が可能です。 なお、Access では自作関数を組み込めますので CutStr()などで翻訳してもOKです。 SELECT ID, CutStr("文字B/文字A","/",NZ(fld1,-2)+2) AS Xfer_fld1 FROM tab1; [イミディエイト] ? CutStr("文字B/文字A","/",NZ(0,-2)+2) 文字A ? CutStr("文字B/文字A","/",NZ(-1,-2)+2) 文字B ? CutStr("文字B/文字A","/",NZ(Null,-2)+2) _ と、翻訳が複雑化する場合は、こういうやり方もあります。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function

jobvba
質問者

お礼

SQLの段階では考えていませんでした・・・ まだまだ覚えることがたくさんありそうです。 参考になります! 回答ありがとうございました!

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.3

普通、0/-1で言われれば、論理型ではありませんか? 論理型の場合、表示形式 ;Trueの場合;Falseの場合 と、表示形式で対処すると、言うのが一般だと思いますが・・・ 元は、チェックボックスか何か使ってたかな?

jobvba
質問者

お礼

チェックボックスを使用していました。 他の言語とは違う部分もあり、苦労しています。 回答ありがとうございました!

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> Me.RecordSourceに指定したSQLでデータ 更新するつもりが無いなら、クエリの段階で変換しておくのは?

jobvba
質問者

お礼

まだクエリを使ったことがありません・・・ 今後必要になることもあると思うので、覚えたいと思います! 回答ありがとうございました!

関連するQ&A

  • Access2007のサブフォームのRequeryで悩んでいます。。

    Access2007のサブフォームのRequeryで悩んでいます。。 Aメインフォーム Bサブフォーム埋め込みコントロール Cサブフォーム リストボックスう AにBを貼り付けBのソースオブジェクトにCを指定しています。 Cは帳票形式です リストボックスをクリックしたら、 CのRecordSourceにSQLを挿入し、 CをRequeryしていますが、全くRequery出来ていない模様なのです。。 B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。 B.Form.Requery Me.B.Form.Requery どれも試して駄目でした。 CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、 Requeryが機能していない気がします。 実行結果は、数件対象データはあるのに、Cの中身は空になります。。。 正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

  • Accessのサブフォームから値を参照する方法について

    いつも拝見させて頂いております。 現在、Access97のフォームに以下のようなコントロールを配置しています。 1.フォームにサブフォームAを配置  1-1.サブフォームAにテキストボックスAを配置(入力用) 2.フォームにサブフォームBを配置  2-1.サブフォームBにテキストボックスBを配置(表示用) ※フォームは一つです。 <実現したい事> サブフォームA内のテキストボックスAの値をサブフォームB内の テキストボックスBに表示したいのですが、なかなかうまくいきません。 サブフォームA内のテキストボックスAの値を変更するとサブフォームB内の テキストボックスBも変更するようにしたいので、テキストボックスBの ControlSourceに[Form]![フォーム]![サブフォームA].[Form]![テキストボックスA] としましたが実現できませんでした。 どのような方法をとれば実現できるでしょうか? 宜しくお願いします。

  • AccessVBA RecordSourceのリセットについて

    こんにちは。 フォーム上で、データベースを検索するものを作っています。 SELECT ~ WHERE ~ で条件に合致するレコードを、サブフォームを連続表示しています。 リセットボタンを作成して、検索結果を消したい(カラにしたい)と思うのですが、 Me![subform].Form.RecordSource = "" Me![subform].Requery 上記のVBAを実行すると、1レコードだけ表示され、コントロール上では「#Name?」が出てしまっています。 参照するテーブルが無いためにこういうことが起きているのだと思うのですが、防ぐ方法が分かりません。 教えてください。 宜しくお願いします。

  • ACCESSサブフォームにデータ反映されない

    よろしくお願いします。 Access2010を使っています。 メインフォームにあるテキストボックス2つに条件を入力し、 抽出したデータをサブフォームで表示させたいと思います。 ●メインフォーム名「フォーム1」 テキストボックス2つ「tex1」「tex2」 ●データ元クエリ「q1」 フィールド名「ID1」「ID2」「Name」 ●サブフォームSQL SELECT q1.Name FROM q1 WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And ((q1.ID2) = Forms![フォーム1]!tex2))); フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。 サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。 サブフォームのコントロールソースへSQLを入力するだけでは、 メインフォーム内でのデータは反映されないんでしょうか??

  • Accessのサブフォームつきフォームを使い回しをしたい

    Accessでサブフォームを使っていくつかの表を表示させたいと思っています。 それで表示させたい表はテーブルは違いますがフィールドは似たようなものなので、 1つのフォーム(とサブフォーム)ですべての表を表示させたいと思っています。 つまり前の画面でどのボタンをクリックしたかによってフォームのRecordSource(SQL文)を変更したいのです。 それで色々やってみたのですがどうもうまくいきません。 1.まずどの部分でRecordSource(フォーム、サブフォーム両方とも)の設定をすればよいのかよくわからない。 2.色々試行錯誤して設定して表が表示されるようになったが、なぜかデータが1件もない時にサブフォームが表示されない(サブフォームに表のタイトルが書いてありますがそれが表示されない)。 3.それも試行錯誤してうまく表示させることができるようになったが、そこでも問題がありました、1つの表のデータだけそこで編集できるようにしたいのですがなぜか編集できません(SQL文でRecordSourceを設定していますがそのSQL文はクエリで書くと編集できます)。 もしかしたら根本的に間違っているかもしれませんので、プログラムやプロパティの設定をどのようにしたらよいか最初からご説明していただけますでしょうか?

  • サブフォームでのテキストとコンボ連動について

    ACCESS2002でDBを構築している初心者です。 メインフォームに2つのサブフォーム(サブ1、サブ2)埋め込みを サブフォーム同士を連動させたフォームを作成中です。 2つのサブフォームのうちのサブ1にテキストボックスを基に コンボボックスでSQLを実行して抽出結果を コンボボックスに表示させています。 下記でaの値が変更されるとbにその値を送っています。 Private Sub a_AfterUpdate() DoCmd.Requery "b" Me!a.Requery End Sub その後bの値集合ソースでSQLを実行しております。 SQLの抽出条件「forms!サブ1!a」として、上記で取得した テキストボックスaを使用しております。 サブ1をメインフォームで開き上記を実行すると値を抽出します。 しかしサブフォームで実行した際に、「パラメータの入力」が 出てきて手動で入力しなくてはいけません。 サブフォーム上で実行する際に、イベントプロシージャや SQLの抽出条件を更新しなくてはならないのでしょうか。 お手数おかけいたしますが、ご教授よろしくお願いいたします。

  • 【Access2007】データシートからデータの追加ができない。

    環境  Windows Xp Pro sp3 Access 2007 Accessのフォームにサブフォームがあり、テキストボックスを配置し、 データシート形式で表示しています。 RecordSourceはクエリを使用しています。 このデータシートより新規データを追加したいのですが、新規追加行が表示されません。 他の、正常に動作しているフォームと比較してみましたが、これといった差異はありませんでした。 フォームの更新・追加プロパティは「はい」にしてあり、更新はできています。 何か盲点的な原因はあるのでしょうか? また、上記現象時の確認すべき点を教えてください。 ご教示よろしくお願いします。

  • AccessVBAで入力有無のチェック

    こんにちは。 AccessでVBAを記述していたところわからないことがでてきてしまいましたので 質問させて頂きます。(ネットでいろいろと調べてみたのですが、それでも解決しませんでした・・・) バージョンは2003です。 サブフォームのある親フォームの[閉じる]ボタンを押すとサブフォームにある 指定したテキストボックスの値をチェックするという動作を実施したい意向です。 今回問題になってしまったのは、ある[A]というテキストボックスに値が入力されているか どうかのチェックをしようとしたのですが、記述が間違っているのか [オブジェクトはこのプロパティまたはメソッドをサポートしていません。] というエラーメッセージが表示されてしまいます。 いろいろ調べたとこ、IsNull関数を使用するということはわかったのですが 上手く動作しません。 現在使用している記述は以下に記載しますので宜しければどう記述を 修正すれば上手く動作するのかお教え頂ければと思います。 'Aが空白の場合 If IsNull(Forms![F_親フォーム].[F_サブフォーム].Form.[A].Value) Then '背景をイエローに Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbYellow Else '背景をマゼンダに Forms![F_親フォーム].[F_サブフォーム].Form.[A].BackColor = vbMagenta End If

  • サブフォームのRecordSourceの件数を取得したい

    <環境>access2007、db:sqlserver2005 メインフォームに日付のテキストボックスがあり、その日付に一致したデータをサブフォームに表示しています。 メインフォームのOPEN時処理 Set FM = Forms![FTop] Set FS = Forms![FTop]![FTop_sub].Form FS.RecordSource = "select * from aaa where day = '"& fm!day &"'" この時、RecordSourceにセットしたデータの件数を取得したいのですが、 サブフォームのフォームヘッダーにテキストボックスを配置して、 そのコントロールソースを =Count(*) としました。 しかし、"#エラー"と表示されてしまいます。 サブフォームは"帳票フォーム"です。 どこが悪いのか困っています。どなたかご教授お願いします。

  • サブフォームのサブフォームの値を参照

    Access2007で親フォームAの中にサブフォームBが入っていて、そのサブフォームBの中にサブフォームCが入っているとします。 この場合、親フォームAからサブフォームCの中のテキストボックスの内容等は参照できないのでしょうか? 一応試しに、親フォームから Me!サブフォームB.Form!サブフォームC.From!テキスト.SetFocus と、ソースに書いたのですが「実行エラー:438」が出てしまいます。 どうにかして参照できないでしょうか? ご存じの方がいらっしゃったらご教授お願いします。

専門家に質問してみよう