エクセルシート状にActiveXコントロールのチェックボックス、テキストボックスを多数配したアンケートを作成しています。
<イメージ>
問題文
□回答候補1
□回答候補2
□回答候補3
自由記入欄
(テキストボックス)
※四角の部分が複数回答可のチェックボックスになっており、テキストボックスに自由記入をしてもらう形です。
複数人でアンケートを作成、改良しているため、追加や削除を加える必要から、オブジェクト名を任意に設定しています。
たとえば「TextBox11001」「CheckBox22010」といった形なのですが、問1の小問1の選択肢1、問2の小問2の選択肢10という意味であるため、番号は飛び飛びです。
電子データを配布し、回収後、全員分のデータを一覧表にするマクロを作成しています。
設問ごとに、チェックがあれば、1、なければ0、テキストはそのまま転記という形です。
(イメージ)
名前 問1-1-1 問1-1-2 問1-1-3 問1-2-1 問1-2-2 問1自由…
○○ 1 0 1 0 1 コメント
△△ 1 1 0 1 0 コメント
集計表の見出しは設問が割り当てられており、
チェックボックス、テキストボックスがアンケートの順番に全て一行に並ぶように作っています。
開いた記入済みアンケートを次々と開いて(この部分は省略)のデータ(シート1~3がSht1~3、また集計用ブックにある集計シートがShtAと定義してある)を所定のセルへ転記するものです。
ShtA.Range("D14").Value = Sht3.TextBox321001.Text
ShtA.Range("F14").Value = Sht3.TextBox321002.Text
ShtA.Range("H14").Value = Sht3.TextBox321003.Text
ShtA.Range("J14").Value = Sht3.TextBox321004.Text
ShtA.Range("L14").Value = Sht3.TextBox321005.Text
ShtA.Range("N14").Value = Sht3.TextBox321006.Text
ShtA.Range("P14").Value = Sht3.TextBox321007.Text
ShtA.Range("Q14").Value = Sht3.TextBox3210.Text
If Sht1.CheckBox110101.Value = True Then
ShtA.Range("C4").Value = 1
Else
ShtA.Range("C4").Value = 0
End If
If Sht1.CheckBox110102.Value = True Then
ShtA.Range("D4").Value = 1
Else
ShtA.Range("D4").Value = 0
End If
If Sht1.CheckBox110201.Value = True Then
ShtA.Range("G4").Value = 1
Else
ShtA.Range("G4").Value = 0
End If
全問コピー&ペーストなどで、セル番地だけ入れ替えて作ったところ、作業自体はうまくできました。
しかし、設問や選択肢が多いため、同じような記述が300個ほど続いてしまい、非常に煩雑です。
もっと効率的に書く方法はないでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こういった場合は、集計セルとコントロールの対応表を作成しそれを利用するのがベターでしょう。
設問の追加削除、コントロール名の変更などにもVBAコード自体に手を加えることなく簡単に対応できると思いますが。。。
集計ブックに対応表シートを作成する。
例えば、以下のように。
集計セル___コントロールのあるシート名___コントロール名__
_C4_______Sheet1________TextBox1101__
_D4_______Sheet1________CheckBox1102__
_E4_______Sheet2________TextBox2101__
_F4_______Sheet2________TextBox3102__
・・・・・・
・・・・・・
以上。
No.2
- 回答日時:
繰り返しのパターン(規則性)を見つけて、ループすればよいと思います。
>ShtA.Range("D14").Value = Sht3.TextBox321001.Text
>ShtA.Range("F14").Value = Sht3.TextBox321002.Text
>ShtA.Range("H14").Value = Sht3.TextBox321003.Text
この部分、列は1列置きで、TextBoxのインデックスは連続のようですから
Dim i As Long
Dim j As Long
For i = 4 To 18 Step 2
j = j + 1
ShtA.Cells(1, i).Value = Sht3.OLEObjects("TextBox" & 321000 + j).Object.Value
Next
というように出来ると思います。
>If Sht1.CheckBox110101.Value = True Then
>ShtA.Range("C4").Value = 1
>Else
>ShtA.Range("C4").Value = 0
>End If
こちらは、CheckBoxのインデックスは連番のようですが
値の転記先Rangeの列番号にはどのような規則性があるか分かりますか?
セル番地が繰り返されるパターンがどうなっているのか、実際例を提示してみてください。
No.1
- 回答日時:
>同じような記述が300個ほど続いて
とは
「ShtA.Range("D14").Value = Sht3.TextBox321001.Text」
の文中の「Range("D14")」「TextBox321001」 のことですか?
アンケートの種類は何種類くらいですか?
問題文の「回答候補」は3つあるのに、IF文では「TRUE」「ELSE」の2つに絞られている理由は? 「回答候補1」~「回答候補3」 の3つの評価はどこに表示されるのですか?
「問1-1-1 問1-1-2 ~ 」 の欄の個数はいくつですか?
IF文の「ShtA.Range("C4").Value ~ ShtA.Range("G4").Value」 と 「ShtA.Range("D14").Value = Sht3.TextBox321001.Text ~ ShtA.Range("Q14").Value = Sht3.TextBox3210.Text」との関連は?
>所定のセルへ転記
の「所定のセル」はどのセルを指すのですか?
何度読み返しても全体像が見えて来ない(概念は理解できる)のは、私だけですかね?
何も知らない相手に分かるように、具体的にどうしたいのかの説明がなされないと、回答したくてもできませんよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
別シートのセルを絶対参照にする
-
エクセルで1月0日と表示される!!
-
EXCELマクロで、シート間でのコ...
-
エクセルの文字
-
エクセルで別シートからの最大...
-
エクセルで条件に一致したセル...
-
日付が未入力の際はゼロか、空...
-
パスをセルから取得し保存 VBA
-
エクセルVBA「リストボックスで...
-
エクセルで複写のように自動入...
-
Excelで連勤の氏名を抽出する
-
Rangeメソッドは失敗しました。...
-
ExcelでTODAY関数を更新させな...
-
マクロ 新しいシートにデータ...
-
[Excel]セル選択時の合計値をク...
-
エクセルでシート保護をかける...
-
エクセルのルビがついたセルを...
-
セルの値と同じ名前のシートを...
-
Excel シートをPDF保存し任意の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの「0」だけ非表示、小数...
-
日付が未入力の際はゼロか、空...
-
Excelで複数シートの選択セルを...
-
エクセルで1月0日と表示される!!
-
エクセルで条件に一致したセル...
-
Rangeメソッドは失敗しました。...
-
別シートのセルを絶対参照にする
-
シート参照で変数を使いたい(EX...
-
Excelシートの保護時にデータの...
-
複数シートの同じセル内容を1シ...
-
エクセルで複写のように自動入...
-
エクセルの文字
-
Excelでスクロールすると文字が...
-
(Excel)あるセルに文字を入力...
-
Excelのファイル容量が減らない...
-
マクロ 新しいシートにデータ...
-
エクセルで別シートからの最大...
-
ExcelでTODAY関数を更新させな...
-
エクセルのセルに、マウスで選...
-
EXCELマクロで、シート間でのコ...
おすすめ情報