質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • VBA

    1804questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    432questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

  • if

    204questions

    if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

ACCESS VBA ボタンのIF分岐処理について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 571

Iris_777

score 3

フォームに3つのトグルボタン(A,B,C)を設置し、それぞれの出力処理を1つのボタンでコントロールしています。

出力ボタンにVBAで、押されたトグルボタン(A,B,C)でそれぞれの出力処理を書いています。
Aだけ押された場合〜ABC全て押された場合などの網羅した処理を書くにはIF文でしか方法は無いのでしょうか??
また、
出力したものがわかるようにメッセージを吐くようにしていますが、一つ一つ出すのではなく、まとめて出したいと思っております。その時の処理コードをおしえていただきたいです。
よろしくお願いいたします。

追記
Ifの処理記載します

IF A.value = true and A.value = false and A.value = false

DoCmd.openquery “クエリ名” 
module1.mkmkd(保存先フォルダ作成処理)
DoCmd.TransferText(csv出力処理)

msgbox “出力メッセージ”

上記の処理をAだけ、Bだけ、Cだけ、ABだけ、選択されていない等網羅して書いております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sazi

    2018/06/12 15:08

    withを使えば省略可能なのと、動作に不備があるなら尚更問題のコードを質問に追記したほうが良いですね。

    キャンセル

  • Iris_777

    2018/06/12 15:18

    withについて少し調べてみます!

    キャンセル

  • sazi

    2018/06/12 15:24

    コードはマークダウンで括った方が好いですね。それから実際のコード書かないと意味ないですよ。全然長くないし、どこを省略したのかも分かりません。

    キャンセル

回答 3

checkベストアンサー

0

やりたいとこが不明瞭なので、最大限想像して下記のような仕様と仮定して回答します。
ちがう場合は、ロジックを参考にご自身で作成してください。
トグルボタン名は、繰り返し処理しやすいように規則的なものに変更してます。

コマンドボタン「cmdCSVOutput」をクリックしたら、
トグルボタン「tgl1」 が押されているとき、「クエリA」 を出力、ファイル名は「クエリA.csv」
トグルボタン「tgl2」 が押されているとき、「クエリB」 を出力、ファイル名は「クエリB.csv」
トグルボタン「tgl3」 が押されているとき、「クエリC」 を出力、ファイル名は「クエリC.csv」
最後に出力されたクエリ名の一覧をメッセージボックスで表示する。

トグルボタンの標題(Caption)は出力したいクエリ名とします。

Private Sub cmdCSVOutput_Click()
    Dim i As Long, sMsg As String  

    For i = 1 To 3
        With Me("tgl" & i) 
            If .Value Then
                Module1.mkmkd (保存先フォルダ作成処理)
                DoCmd.TransferText acExportDelim, , .Caption, _
                                   "C:\test\" & .Caption & ".csv"
                sMsg = sMsg & .Caption & vbCrLf
            End If
        End With
    Next

    If sMsg = "" Then
        MsgBox "出力するクエリが選択されていません。"
    Else
        MsgBox sMsg & " をCSVで出力しました。"
    End If
End Sub

Forループの使い方、Withステートメントの使いのご参考に。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/13 08:04

    お返事遅くなり申し訳ございません。自身でコード組んでいたのですが、改修が必要となりましたので、こちらのご回答を参考に作成してみます!ありがとうございます!

    キャンセル

0

Private Sub CommandButton1_Click()
    Dim i As Long
    Dim o As MSForms.ToggleButton
    Dim p As String

    For i = 1 To 3
        Set o = Me.Controls("ToggleButton" & i)
        If o Then
            '---ONの時の処理----------
            'ログの記録
            s = s & "・" & o.Caption
        End If
    Next

    'ログの出力
    MsgBox Mid(s, 2) & " を出力しました。"
End Sub

こういうことですかね?
トルグボタンがFalseの時も何かするとか、

AのボタンとCのボタンがTrueの時に特別な処理をするんですか?
つまり、3個のON/OFFだから有り得る状態が
9パターンになると思うんですが、それらに特別な処理を紐づけるのですか?
それとも、
AがONのとき→何かする
BがONのとき→何かする
CがONの時→何かする
と続いて3パターンチェックで
最後だけ結果を合わせて表示出来ればいいのかな?

よくわかんなかったです^^;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/12 18:59

    私もやりたいことは、こっちかなと思いました。
    ちなみに、Accessタグが付いているので、Accessのフォームだと思いますので、
    Dim o As Access.ToggleButton
    かな。

    キャンセル

0

>等網羅して書いております。
あぁ、6パターンでしたね。^^;

Private Sub CommandButton1_Click()
    Dim i As Long
    Dim j As Long
    Dim o As MSForms.ToggleButton
    Dim p As String

    '各ボタンの値チェック
    For i = 1 To 3
        Set o = Me.Controls("ToggleButton" & i)
        If o Then
                j = j + 2 ^ i
        End If
    Next

    '条件分岐
    Select Case j
        Case 0: p = 全部False
        Case 2: p = "1番だけ"
        Case 4: p = "2番だけ"
        Case 8: p = "3番だけ"
        Case 6: p = "1番・2番"
        Case 10: p = "1番・3番"
        Case 12: p = "2番・3番"
        Case 14: p = "全部"
    End Select

    MsgBox p
End Sub

こういうことかなぁ・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1804questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Access

    432questions

    Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

  • if

    204questions

    if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。