68本目 全テキストボックスの転記

VBA100本ノック

VBA100本ノック 68本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック68本目
フォームの「登録」ボタンをクリックしたら、全てのTextBoxの値をアクティブシートに出力した後にフォームを閉じてください。
シート出力位置
・データ最終行のすぐ下の行
・シートの1行目にあるコントロール名で探した列
・列が見つからない場合は、右端に追加してください
・改行は全て削除する

解答

Private Sub btn登録_Click()
        
    Dim ctl As Control
    Dim col As Long: col = 1
    Dim lastrow As Long: lastrow = Range("A1").CurrentRegion.Rows.Count + 1
    For Each ctl In Me.Controls
        If TypeName(ctl) = "TextBox" Then
            Cells(1, col) = ctl.Name
            Cells(lastrow, col) = ctl.Value
            col = col + 1
        End If
    Next
    Unload Me
End Sub

■考え方・流れ
0:00 冒頭・問題確認
2:08 登録ボタンにマクロを登録する
4:13 全てのコントロール名と種類を取得する
6:46 種類が”TextBox”の場合、値を取得
8:09 シートに値を追加していく

※黄色の条件部分のみの解説となっております!

新人君
新人君

ユーザーフォームが使えると、
できることが格段に増えますよね!

ブチョ
ブチョ

そうか?
俺はそうは思わないけど?

新人君
新人君

出た…アマノジャク部長…

登録ボタンにマクロを登録する

さて!じゃあまずは…
“登録”ってボタンに、マクロを登録(設定)するところからだ!!

サンプルのExcelファイルは神髄さんが用意してくれてるぞ!!
ありがとう神髄さん!!

登録したいボタンを、ダブルクリックすると…

オブジェクト名_Clickってプロシージャが登録されるぞ!!!

処理は最初はなんでもいいけど…
今回の問題で忘れてはいけないのが、Unload Me!!!

フォームを終了させる一文だね!

ユーザーフォームを実行すると…↓

全てのコントロール名と種類を取得する

よし!そしたらお次!
全てのコントロールに対して処理をしていくぞ!!

ちなみにコントロールって言うのは…
これらのことね!↓

全ての…って言うと…
お決まりのFor Eachさんが活躍!!!

ほんで…コントロールの種類(ラベルとか…テキストボックスとか…)を取得したい場合は…!
こんな感じだ!↓

試しに実行してみるぞ!!
※Nameプロパティも取得してみてるよ

種類が”TextBox”の場合、値を取得→シートに転記

よし!最後に!!
コントロールの種類によって条件分岐して、シートに転記して終わっちゃうぞ!

まずは条件分岐!
これは説明するまでもないかな?↓
※Debug.Printのところを、NameとValueに変更してるぞ!

実行結果↓

そして!ここからは取得した値を、シートに転記していくぞ!
イメージとしてはこんな感じだ! 

これをどうするか…!!
一旦、テキストボックスの数に応じて列を変更できるよう、colって変数を作ってるぞ!

実行結果↓

じゃ、最後に…
2行目になっていいたところを、lastrowって変数を作って…
最終行の一つ下のセルに代入するように変更してあげる!!

最終行の一つ下は…CurrentRegion.Rows.Count + 1で求められるよな!

実行結果↓

とま、こんなところかな!

ブチョ
ブチョ

お疲れさままままま!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
68本目、全テキストボックスの値を転記する問題でした…

ユーザーフォームはむずい!!
冬の朝はねむい!!
以上!!

コメント

タイトルとURLをコピーしました