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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

if

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

Access

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

Q&A

解決済

3回答

6722閲覧

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

Iris_777

総合スコア11

VBA

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

if

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

Access

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

0グッド

0クリップ

投稿2018/06/12 05:52

編集2018/06/12 06:18

フォームに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だけ、選択されていない等網羅して書いております。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/06/12 05:57

>Aだけ押された場合〜ABC全て押された場合などの網羅した処理を書くにはIF文でしか方法は無いのでしょうか??
sazi

2018/06/12 05:58

上記について、なぜそう思うのか?目的のために不都合な点などがあれば説明を追記して下さい。
Iris_777

2018/06/12 06:03

試しにIF文で書いてみたところ、非常に長い構文になってしまうこと。この点に関しては処理の実現の上妥協するべきだとは思いました。フォームで実際にトグルを選択して、出力しましたが最初の1つのボタンだけ選択した時の処理が反応しないため、他の手段があるのではと思いここに至りました。
sazi

2018/06/12 06:08

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

2018/06/12 06:18

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

2018/06/12 06:24

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

回答3

0

ベストアンサー

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

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

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

vba

1Private Sub cmdCSVOutput_Click() 2 Dim i As Long, sMsg As String 3 4 For i = 1 To 3 5 With Me("tgl" & i) 6 If .Value Then 7 Module1.mkmkd (保存先フォルダ作成処理) 8 DoCmd.TransferText acExportDelim, , .Caption, _ 9 "C:\test\" & .Caption & ".csv" 10 sMsg = sMsg & .Caption & vbCrLf 11 End If 12 End With 13 Next 14 15 If sMsg = "" Then 16 MsgBox "出力するクエリが選択されていません。" 17 Else 18 MsgBox sMsg & " をCSVで出力しました。" 19 End If 20End Sub

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

投稿2018/06/12 06:58

編集2018/06/12 07:08
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Iris_777

2018/07/12 23:04

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

0

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

VBA

1Private Sub CommandButton1_Click() 2 Dim i As Long 3 Dim j As Long 4 Dim o As MSForms.ToggleButton 5 Dim p As String 6 7 '各ボタンの値チェック 8 For i = 1 To 3 9 Set o = Me.Controls("ToggleButton" & i) 10 If o Then 11 j = j + 2 ^ i 12 End If 13 Next 14 15 '条件分岐 16 Select Case j 17 Case 0: p = 全部False 18 Case 2: p = "1番だけ" 19 Case 4: p = "2番だけ" 20 Case 8: p = "3番だけ" 21 Case 6: p = "1番・2番" 22 Case 10: p = "1番・3番" 23 Case 12: p = "2番・3番" 24 Case 14: p = "全部" 25 End Select 26 27 MsgBox p 28End Sub

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

投稿2018/06/12 06:55

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

VBA

1Private Sub CommandButton1_Click() 2 Dim i As Long 3 Dim o As MSForms.ToggleButton 4 Dim p As String 5 6 For i = 1 To 3 7 Set o = Me.Controls("ToggleButton" & i) 8 If o Then 9 '---ONの時の処理---------- 10 'ログの記録 11 s = s & "・" & o.Caption 12 End If 13 Next 14 15 'ログの出力 16 MsgBox Mid(s, 2) & " を出力しました。" 17End Sub

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

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

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

投稿2018/06/12 06:31

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2018/06/12 09:59

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問