PcSchool.Club

パソコンを分かりやすく解説することを目指す無料のオンラインパソコン教室

岐阜のパソコン教室「パソコンスクール・テルン」

Excel VBA 基礎講座 マクロ演習

2024年12月24日

今回でExcelVBA基礎講座は最後の単元となります。

今回は質問フォームと回答フォームを作成する演習問題を基に、解答を動画で解説していく流れになります。今までの単元の学習を活用し、演習に取り組んでみましょう。

演習単元

【使用の概要説明】

顧客から、質問とそれに対する回答を入力するシステムを作成する。

以下の指示に従い、システムを完成させてください。

手順1

以下のようなデータシートに入力し、質問フォームを作成してください。

条件

フォームを表示した際にNoが自動的に入力されるようにする(Activecell.rowで行番号が取得できます。)

日時には、現在の日付が入るようにする(マクロ内に 変数名=date で日付を取得できます)

登録ボタンをクリックすると、表にデータが入力されるようにする

手順2

以下の入力フォームを作成してください。

条件

フォームを表示した際、質問総数や未回答数、回答済件数が表示されるようまた、最初の未回答の質問Noと、質問が表示されるようにする

「次の未回答を見る」ボタンをクリックすると、次の未回答の質問がでてくるように処理し、同様に前の未回答ボタンも処理する。

回答するボタンをクリックすると、回答が表に入力されるようにする

解説1(質問回答データベース手順1)

解説2(質問回答データベースの質問フォームのプログラム)

解説3(手順2の解答フォームの作成)

解説4(質問総数と未回答数と回答済数を求める)

解説5(回答フォームより回答を入力する)

解説6(未回答ボタンの処理を記述)

解説7(未回答ボタンの処理を記述 その2)

解説8(ここまでの動作チェックは念入りに)

●ソース

Private Sub UserForm_Activate( ) //ユーザーフォームが起動したときの処理

Range(“a100000”).End(xlUp).Offset(1,0).Select //セルA列の100000行目から上方向に、最後に入力したセルの一行下を選択

gyo=ActiveCell.Row-2 //変数gyoに最後に入力したセルの行数から2引いた数(Noの数字)を入れる

Label6.Caption=gyo //ユーザーフォームのNoの横に来るLabelのCaptionにgyoを入れる

Label7.Caption=Date //ユーザーフォームの日時の横に来るLabelのCaptionにData関数を入れる

End Sub

●ソース2

Private Sub CommandButton1_Click( ) //「登録」ボタンをクリックしたときの処理

Range(“a100000”).End(xlUp).Offset.(1,0).Select //セルA10万行目から最後に入力されたセルの1行下を選択する

ActiveCell.Value=ActiveCell.Row-2 //選択したセルの行番号から2引いた数をNoとして入れていく

ActiveCell.Offset(0,1).Select //上で選択したセルから一列右のセルを選択する

ActiveCell.Value=Date //選択したセルにData関数を入れる

ActiveCell.Offset(0,1).Select

ActiveCell.Value=TextBox1.Value

ActiveCell.Offset(0,1).Select

ActiveCell.Value=TextBox2.Value

no=Label6.Caption+1 //ユーザーフォームのNoの横に来るLabel(6)に1プラスし変数noに入れる

Label6.Caption=no //Label6.Captionの値をnoに入れる

TextBox1.Value=”” //TextBox1の値を空にする

TextBox2.Value=”” //TextBox2の値を空にする

●ソース3

Private Sub UserForm_Activate( ) //ユーザーフォームを開いた時の処理

Range(“a100000”).End(xlUp).Select

‘質問総数の計算

sousu=ActiveCell.Row-2 //選択したセルから-2した値を、変数sousuに入れる

Label6.Caption=sousu //フォーム「質問総数」の隣のラベル(Label6)にsousuを入れる(表示させる)

‘未回答数の計算

Range(“a10000”).End(xlUp).Select

saigo=ActiveCell.Row //アクティブセルの行番号を変数saigoに入れる

range(“e3”).Select

kazu=0

cnt=3

Do While cnt<=saigo //cntがsaigo以下の時は繰り返し下記の処理する

If ActiveCell.Value=”” Then //もしアクティブセルの値が何も入力されていない場合は

kazu=kazu+1 

End If

ActiveCell.Offset(1,0).Select //処理が終わったら次に一行下を選択

cnt=cnt+1

Loop

Label11.Caption=kazu //フォーム「未回答数」の隣のラベル(Label11)にkazuを入れる(表示させる)

‘回答済みの計算

Label13.Caption=Label6.Caption-Label11.Caption //フォーム「回答済数」の隣のラベル(Label13)に(質問総数ー未回答数)の結果を入れる(表示させる)

●ソース4(※ソース3の続きから入力)

’質問Noと質問を表示

Range(“a3”).Select

Label7.Caption=ActiveCell.Value //フォーム「質問No」の隣のラベル(Label7)にセルA列のアクティブセルの値を入れる(表示させる)

ActiveCell.Offset(0,3).Select //3列右のセルを選択

Label8.Caption=ActiveCell.Value //フォーム「質問」の隣のラベル(Label8)に上記で選択したセルの値を入れる(表示させる)

’アクティブセルをE2にする

Range(“e2”).Select

‘最初の未回答の内容をフォームに表示

check_mikaito

End Sub

●ソース5(「回答するボタン」の処理)

Private Sub CommandButton3_Click( )

ActiveCell.Offset(0,1).Select

ActiveCell.Value=TextBox1.Value

TextBox1.Value=”” //ボタンをクリックした後TextBox1の値を空にする

End Sub

●ソース6(「次の未回答を見る」ボタンの処理)

Private Sub CommandButton2_Click( )

check_mikaito //マクロを実行

End Sub

●ソース7

Sub check_mikaito( )

’進み過ぎをブロックする

sousu=Label6.Caption+2

gyo=ActiveCell.Row

If gyo < sousu Then //もしgyoがsousu未満の場合に以下を実行

ActiveCell.Offset(1,0).Select

Do While ActiveCell.Value <> “”  //アクティブセルの値が等しくない・空ではない場合に以下を繰り返し実行

ActiveCell.Offset(1,0).Select

Loop

End If

ActiveCell.Offset(0,-4).Select

Label7.Caption=ActiveCell.Value

Label8.Caption=ActiveCell.Offset(0,3).Value

ActiveCell.Offset(0,4).Select

End Sub

●ソース8

Private Sub CommandButton1_Click( )

gyo=ActiveCell.Row

If gyo > 3 Then

ActiveCell.Offset(-1,0).Select

Do While ActiveCell.Value<>””

ActiveCell.Offset(-1,0).Select

Loop

End If

End Sub

関連サイト

パソコン教室

パソコンスクール・テルン岐阜・穂積・大垣教室 楽しく学ぶ・通うパソコン教室あもる

パソコン修理・販売・買取・サポート

パソコンの修理・販売・買取・サポート