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

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

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

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

Access

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

Q&A

解決済

1回答

7142閲覧

【ACCESS】VBA コントロールソースに入れる[フィールド名&変数]で指定

tera_taro

総合スコア46

VBA

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

Access

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

0グッド

0クリップ

投稿2020/07/30 08:30

前提・実現したいこと

フォーム.テキストボックス1~40のコントロールソースに直接計算式を
記述するのは修正があったときに面倒なので非連結にしたい。

なのでVBAでテキストボックス140のコントロールソースに
for文などで1
40のそれぞれのテキストボックスの値を入れた計算式を追加したい。

現状はテキストボックス1~40までのコントロールソースに
for文で文字列を入れることはできてます。

問題は下記の[txt_g_o_a1]、[txt_o_kara1]、[txt_b_o_a1]の1~40まで
あるフィールドをどうやって参照すればいいのか悩んでいます。

VBA

1For i = 1 To 40 Step 1 2 Me.Controls(txtName_wt_o_a & i).ControlSource = _ 3 "=([txt_g_o_a1]-[txt_o_kara1])*1/1000*[txt_ml_o_a]/1000*100/[txt_smp_g_a]*[txt_b_o_a1]" 4 Next i

イメージ説明
イメージ説明

該当のソースコード

VBA

1'////////////////////////////////////////////////////////// 2' フォーム:描画時処理 3'////////////////////////////////////////////////////////// 4Private Sub Form_Resize() 5On Error GoTo Err_Proc 6 7 ' 初期化処理 8 Call InitialSettigs 9 10Exit_Proc: 11 Exit Sub 12 13Err_Proc: 14 MsgBox Err.Description 15 Resume Exit_Proc 16End Sub 17'////////////////////////////////////////////////////////// 18' 初期設定 19'////////////////////////////////////////////////////////// 20Private Sub InitialSettigs() 21On Error GoTo Err_Proc 22 Dim i As Long '変数 23 Dim txtName_smp_g_a As String: txtName_smp_g_a = "txt_smp_g_a" 'サンプル重量a 24 Dim txtName_smp_g_b As String: txtName_smp_g_b = "txt_smp_g_b" 'サンプル重量b 25 Dim txtName_ml_o_a As String: txtName_ml_o_a = "txt_ml_o_a" '王水液量a 26 Dim txtName_ml_o_b As String: txtName_ml_o_b = "txt_ml_o_b" '王水液量b 27 Dim txtName_o_kara As String: txtName_o_kara = "txt_o_kara" 'カラ 28 Dim txtName_g_o_a As String: txtName_g_o_a = "txt_g_o_a" '重量a 29 Dim txtName_g_o_b As String: txtName_g_o_b = "txt_g_o_b" '重量b 30 Dim txtName_b_o_a As String: txtName_b_o_a = "txt_b_o_a" '希釈倍率a 31 Dim txtName_b_o_b As String: txtName_b_o_b = "txt_b_o_b" '希釈倍率b 32 Dim txtName_wt_o_a As String: txtName_wt_o_a = "txt_wt_o_a" '(wt%)a 33 Dim txtName_wt_o_b As String: txtName_wt_o_b = "txt_wt_o_b" '(wt%)b 34 35 For i = 1 To 40 Step 1 36 Me.Controls(txtName_wt_o_a & i).ControlSource = _ 37 "=([txt_g_o_a1]-[txt_o_kara1])*1/1000*[txt_ml_o_a]/1000*100/[txt_smp_g_a]*[txt_b_o_a1]" 38 Next i 39 40Exit_Proc: 41 Exit Sub 42 43Err_Proc: 44 MsgBox (Err.Number & ", " & Err.Description) 45 Resume Exit_Proc 46End Sub 47

試したこと

下記のように試しましたが、”=文字列"をそのままコントロールソース
に入れている為かうまく参照できませんでした。

VBA

1For i = 1 To 40 Step 1 2 Me.Controls(txtName_wt_o_a & i).ControlSource = _ 3 "=([txtName_g_o_a & i] - [txtName_o_kara & i]) * 1 / 1000 * [txtName_ml_o_a] / 1000 * 100 / [txtName_smp_g_a] * [txtName_b_o_a & i]" 4 Next i

イメージ説明

補足情報(FW/ツールのバージョンなど)

Windows10,ACCESS2016

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記のような感じでどうでしょう。

vba

1For i = 1 To 40 Step 1 2 Me.Controls(txtName_wt_o_a & i).ControlSource = _ 3 "=([txtName_g_o_a" & i & "] - [txtName_o_kara" & i & "]) * 1 / 1000 * [txtName_ml_o_a] / 1000 * 100 / [txtName_smp_g_a] * [txtName_b_o_a" & i & "]" 4Next i

i を "・・・" & i & "・・・" というように "" (文字列)の外に出すようにします。


下記のようにした方が可読性が上がるかも。

vba

1Const CtlSrc = "=([txt_g_o_a#]-[txt_o_kara#])*1/1000*[txt_ml_o_a]/1000*100/[txt_smp_g_a]*[txt_b_o_a#]" 2 3For i = 1 to 40 4 Me.Controls(txtName_wt_o_a & i).ControlSource = Replace(CtlSrc, "#", i) 5Next

投稿2020/07/30 10:33

編集2020/07/30 10:39
hatena19

総合スコア34075

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

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

tera_taro

2020/07/31 01:37

解決しました!ありがとうございます。 理解していない関数については調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問