Translate

Post Date:2009年9月10日 

Excel VBA でアンケートデータ入力フォーム【その3】

【その3】では、アンケートフォームにプログラムを組み込んでいきます。

プログラミングといってもアンケートデータ入力フォーム上に入力された内容をExcelに取り込むだけです。素人が作ったものなので間違いがあればご指摘願います。

※入力データの格納をSheet2に固定にしているので、実行時にはBookにSheet2がなければいけません。

Excel VBAでアンケートデータ入力フォーム
Excel VBAでアンケートデータ入力フォーム【その2】

からの続きです。

参考にしたのは下記の書籍です。

仕事に役立つExcelVBA業務活用編 (Excel徹底活用シリーズ)
著者: 西沢 夢路
出版社:  ソフトバンククリエイティブ
発売日: 2008/8/27
価格: 2,604円(税込み)

CHAPTER 06 「ユーザーフォーム」のテクニックに今回作成したいことの内容が掲載されていました。サンプルを見ても何をやっているかわからない部分については、コードから逆引きをして調べました。





コードの表示

ユーザーフォームを選択して、右クリックして「コードの表示」をクリックします。



初期処理

左側の窓に「UserForm」を、右側は「Initialize」を選択します。
すると、下記のようなコードが表示されます。
Private Sub UserForm_Initialize()

End Sub

「Initialize」は、ユーザーフォームを開いたときに実行される初期処理です。
初期処理で3種類の処理を定義します。

コンボボックスの値を設定

・コンボボックスのリストに値を設定するにはAddItemメソッドを使います。
・フォームを開いたときに何も選択されていないようにQ3.ListIndex = -1とします。

後はおまじないです。詳細は書籍やヘルプを参照してください。

ID No.を付与するための番号を取得する

・A列の空白セルを探して、そこからひとつ上の値を返してくれます。
先頭行には項目名があるので、最初はA列の空白セルは2、そのひとつ前なので1となります。

フォームを開いたときにフォーカスをQ1にする

Private Sub UserForm_Initialize()
    '****************************************************
    ' コンボボックスの初期値設定
    '****************************************************
    Q3.Style = fmStyleDropDownCombo
    Q3.RowSource = ""
    Q3.Clear
    Q3.AddItem "選択肢1"
    Q3.AddItem "選択肢2"
    Q3.AddItem "選択肢3"
    Q3.ListIndex = -1       'コンボボックスを未選択にする
    '****************************************************
    ' ID Noに最終行列の値を挿入(データ未入力時は1)
    '****************************************************
    ID_No.Value = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
    '****************************************************
    ' Q1_1(MAサンプル 選択肢1)にフォーカス
    '****************************************************
    Q1_1.SetFocus End Sub

登録処理

登録ボタンがクリックされたときに実行されます。

左側の窓に「登録」を、右側は「Click」を選択します。すると、下記のようなコードが表示されます。(フォームの登録ボタンをダブルクリックしてもコードが表示されます。
Private Sub 登録_Click()

End Sub

「登録処理」では、自動付与項目とフォームの入力値(アンケート回答値)をSheet2の最終行に追加していきます。そして次のデータエントリーに備えるために初期処理を行います。

ポイントとなるのは、下記の2つです。
With Worksheets("Sheet2")

End With

With から End With の間は、Worksheets("Sheet2")が適用されるので、セルに値を代入するのに都度ワークシートの定義をせずに .Range だ行うことができます。
.Range("A" & lRow + 1).Value = ID_No.Value

初期処理で設定したID_Noの値を列Aのn行目(lRowの値+1)に格納するという意味になります。
初めてデータ入力をするときであれば、lRowとID_Noには1が代入されているので、A列2行目に1が格納されることになります。

後は、プログラムを参照してください。わからないところがあれば書籍やヘルプで調べてください。

Private Sub 登録_Click()
    '*************************************************************
    ' 登録ボタンが押されたらSheet2のA列の最終行にデータを入力する
    '*************************************************************
    Dim lRow As Long                                            '変数として使うlROWの定義
    With Worksheets("Sheet2")                               'End WithまですべてSheet2に対しての処理
        lRow = .Range("A" & Rows.Count).End(xlUp).Row     'データの最終行をlRowに代入
        .Range("A" & lRow + 1).Value = ID_No.Value            'ID No.を代入
        .Range("B" & lRow + 1).Value = Now                      '現在時刻を取得
        .Range("C" & lRow + 1).Value = Environ("COMPUTERNAME")  'コンピュータ名を取得
        .Range("D" & lRow + 1).Value = Environ("USERNAME")           'ユーザー名を取得
        '************************
        ' Q1の値を代入 E~G列
        '************************
        If Q1_1 Then .Range("E" & lRow + 1).Value = 1 Else .Range("E" & lRow + 1).Value = 0
        If Q1_2 Then .Range("F" & lRow + 1).Value = 1 Else .Range("F" & lRow + 1).Value = 0
        If Q1_3 Then .Range("G" & lRow + 1).Value = 1 Else .Range("G" & lRow + 1).Value = 0
        '************************
        ' Q2の値を代入 H列
        '************************
        If Q2_1 Then .Range("H" & lRow + 1).Value = 1
        If Q2_2 Then .Range("H" & lRow + 1).Value = 2
        If Q2_3 Then .Range("H" & lRow + 1).Value = 3
        '************************
        ' Q3の値を代入 I列
        '************************
        .Range("I" & lRow).Value = Q3.Value
        '************************
        ' Q4の値を代入 J列
        '************************
        .Range("J" & lRow).Value = Q4.Value
    End With
    '****************************************************
    ' 登録ボタン実行後のイニシャライズ処理
    '****************************************************
    ID_No.Value = Sheet2.Range("A" & Rows.Count).End(xlUp).Row      'ID No.の設定
    Q1_1.Value = False           'チェックを外す
    Q1_2.Value = False           'チェックを外す
    Q1_3.Value = False           'チェックを外す
    Q2_1.Value = False           'チェックを外す
    Q2_2.Value = False           'チェックを外す
    Q2_3.Value = False           'チェックを外す
    Q3.ListIndex = -1            'コンボボックスを未選択にする
    Q4.Value = ""                '値をクリアする
    Q1_1.SetFocus               'フォーカスをQ1_1に戻す
End Sub

終了処理

終了ボタンはクリックされたらフォームを閉じます。
Private Sub 終了_Click()
    Unload Me                   ' 終了ボタンが押されたら入力フォームを閉じる
End Sub

以上でコードの入力は終了です。

タブ遷移

マウスを使えば問題にはなりませんが、データ入力の速度をあげるためにキーボードだけで入力できるようにタブの遷移を設定します。(Tabキーで遷移します)

ユーザーフォーム上で右クリックをして「タブ オーダー」を選択して起動します。項目を選択して「上に移動」「下に移動」で順番に移動するように変更してください。


これでプログラムもできあがりです。

次回は、実行方法について記載します。

今日の一曲

Kronos Quarter(クロノス・カルテット)を一躍有名にしたこの一曲です。カルテットという通り弦楽四重奏です。『The Kronos Quartet Plays Sallinen, Glass, Sculthorpe, Hendrix, Nancarrow』というアルバムですが、邦題は『紫のけむり~現代の弦楽四重奏曲/クロノス・クァルテット』。Jimi Hendrix(ジミー・ヘンドリックス)の Purple Haze(パープルヘイズ)です。バイオリンとは思えない音の出し方でとても格好いいです。Kronos Quartetは色々なミュージシャンと共演をしていますので、色々と聴いてみてください。

Kronos Quartet
Plays Sallinen, Glass, Sculthorpe, Hendrix, Nancarrow
Purple Haze





『purple haze』はもう少しテンポの遅いバージョンが『紫のけむり~クロノス・スーパー』に収録されています。こちらもイケてます。しかし、邦題ではどうしても「紫のけむり」と付けたいみたいですね。

Kronos Quartet
Kronos Quartet: Released 1985-1995
Purple Haze

Post Date:2009年9月9日 

Excel VBA でアンケートデータ入力フォーム【その2】

【その2】では実際にExcel2007でフォームを作成していきます。

Excel VBAでアンケートデータ入力フォームからの続きです。



参考にしたのは下記の書籍です。

仕事に役立つExcelVBA業務活用編 (Excel徹底活用シリーズ)
著者: 西沢 夢路
出版社:  ソフトバンククリエイティブ
発売日: 2008/8/27
価格: 2,604円(税込み)

CHAPTER 06 「ユーザーフォーム」のテクニックに今回作成したいことの内容が掲載されていました。サンプルを見ても何をやっているかわからない部分については、コードから逆引きをして調べました。





Visual Basic Editorの起動

[開発] タブの [Visual Basic] をクリックします。

ユーザーフォームの作成

Visual Basic Editor で [挿入] メニューの [ユーザー フォーム] をクリックします。



ユーザーフォームの初期値は、UserForm1となっています。フォームの名前、動作などを変更するには、左下のプロパティ ウィンドウを使用します。

1.Captionはタイトル設定です。『UserForm1』を『データ入力フォーム』に変更します。
2.オブジェクト名を『UserForm1』から『Enquate』に変更します。


後は、必要なパーツをツールボックスから選んでフォーム上に並べていきます。


プロパティを変更するには、配置したオブジェクトを選択して右クリックでプロパティを選択します。


今回作成するアンケートデータ入力フォームに必要なオブジェクトは下記になります。

設問  コントロール  (オブジェクト名)  cpation  その他 
タイトル  ラベル  Label_Title  アンケートデータ入力 
ID No.  ラベル  Label_IdNo  ID No. 
テキスト ボックス  ID_No  -  ※1 Enabled=False 
Q1  ラベル  Label_Q1  Q1 MAサンプル 
チェック ボックス  Q1_1  選択肢1 
チェック ボックス  Q1_2  選択肢2 
チェック ボックス  Q1_3  選択肢3 
Q2  ラベル  Label_Q2  Q2 SAサンプル 
フレーム  Q2_Frame  ※2
オプション ボタン  Q2_1  選択肢1 
オプション ボタン  Q2_2  選択肢2 
オプション ボタン  Q2_3  選択肢3 
Q3  ラベル  Label_Q3  Q3 SA(コンボボックス)サンプル 
コンボ ボックス  Q3  - 
Q4  ラベル  Label_Q4  Q3 FAサンプル 
テキスト ボックス  Q4  -  ※3 IMEMode=4-fmIMEModeHiragana 
登録  コマンド ボタン  登録  登録 
終了  コマンド ボタン  終了  終了 

※1 ID No.は自動的に付与するために手入力を不可にするためにEnabledをFalseに設定します。


※2 フレームの中に複数のオプションボタンを配置すると、ひとつしかチェックできなくなります。


※3 FAの入力を容易にするためにIMEをONにします。

入力フォームの完成



これで入力フォームは完成です。しかしこれだけでは何も動きません。

次回はロジックを追加していきます。

今日の一曲


初めてブルガリアン・ヴォイスを聴いたときは衝撃を受けました。西洋音階と異なる倍音で構成される不協和音。ライブで聴いたときは、全身の毛穴が開き鳥肌がずっと治まりませんでした。Le Mystere Des Voix bulgares(神秘の声)は一番最初に買ったアルバムです。なかなか一曲には絞れませんが、一番最初に聴いたいうこともあり1曲目の『Pilentze pee』をお勧めします。ブルガリアの民族音楽を耳にしたことがない方は是非聴いてみてください。

Le Mystere Des Voix blugares
Pilentze pee
Post Date:2009年9月8日 

Excel VBA でアンケートデータ入力フォーム

紙ものでアンケートをした場合には、データ入力作業が伴います。

友人に自力でアンケートデータを入力するからデータ入力フォームをExcelで作って欲しいと依頼されました。Excel VBAで作成すればいいんだろうぐらいのイメージはありますが、本業ではありません。

書籍を参考にすればなんとかなるだろうと快諾です。

参考にしたのは下記の書籍です。

仕事に役立つExcelVBA業務活用編 (Excel徹底活用シリーズ)
著者: 西沢 夢路
出版社:  ソフトバンククリエイティブ
発売日: 2008/8/27
価格: 2,604円(税込み)

CHAPTER 06 「ユーザーフォーム」のテクニックに今回作成したいことの内容が掲載されていました。サンプルを見ても何をやっているかわからない部分については、コードから逆引きをして調べました。





アンケートデータ入力フォームの仕様

(1)入力したデータは1行毎に展開し、データ解析で利用できるようにする
(2)紙のアンケートと突き合わせができるように自動でIDを付与する
(3)入力作業者がわかるように入力日時、コンピュータ名、ユーザ名を登録する
(4)サンプルで作成するのは、SA(単数選択項目)、MA(複数選択項目)、FA(自由回答)

と、いうような仕様で作成することにしました。



完成したアンケートデータ入力フォーム


完成したものが上記になります。登録されたデータのサンプルは以下になります。

列A 自動付与された1から連番のID
列B 登録日時
列C コンピュータ名
列D ユーザ名
列E Q1 MAサンプルの「選択肢1」がチェックされたら1、オフの場合は0
列F Q1 MAサンプルの「選択肢2」がチェックされたら1、オフの場合は0
列G Q1 MAサンプルの「選択肢3」がチェックされたら1、オフの場合は0
列H Q2 SAサンプルの「選択肢1」=1、「選択肢2」=2、「選択肢3」=3
列I Q3 SA(コンボボックス)サンプルの選択された値を代入
列J Q4 FAサンプルに入力された値を代入


次回以降に実際の作成手順を掲載いたします。

今日の一曲

Norah Jones のCome Away with Meに収録されている『The Long Day Is Over』です。Norah JonesはJazzyではありますが、ベースはカントリーです。ライブに一度行きましたが、裸足の歌姫はとても格好良かったです。この曲もER(緊急救命室)のエンディングで流れていたような気がしますが、よく覚えていません。2分44秒と短い曲ですが、一日の疲れを癒してくれます。就寝の前に聴く一曲としてお勧めです。

Norah Jones
Come Away With Me
The Long Day Is Over

象と散歩:人気の投稿(過去7日間)