テキストボックスでワークシートの特定の行まで入力したら2行飛ばすには?

Question 50.4   Previous Next
ユーザーフォームを利用して、データ入力マクロを作成中です。
データ入力の途中で2行飛ばしてデータ入力を再開したいのですが、その方法が分かりません 。

作りたいものは、データを入れたいワークシートの表の
  1行目から2
3行目までを 1Pとして、
  5行目からユーザーフォームでテキストボックスで入力した値を、
  20行目まできたら、21.22行目を合計欄(関数)として、値を入れずに
  23行目からを 2P目として、テキストボックスで入力した値を入れたいのです。
2P目はユーザーフォームのコマンドボタンクリックで作るようにしてあります。
宜しくお願いします。
Answer   Copyright (C) 2001.11.28 永井善王
「2P目は…コマンドボタンクリックで作る…」ということがはっきり分かりませんので、ワークシートの 1~22行目を 1ページ目、23~38行目を 2ページ目ということで進めます。
入力用ユーザーフォーム
あなたが作られているユーザーフォームを質問の文章から復元すると、右図のように簡単なものかなと思います。
テキストボックスはデータ入力用、コマンドボタンはページの切り替え用、左下のラベルは必ずしも必要な訳ではありませんが案内用です。

質問のポイントは 「入力途中で 2行飛ばして再開する」、つまり、20行目まで入力し終ったら次を 23行目にするということのようですから、それについて回答します。

1. [TAB]または[Enter]キーが押されたときの処理
テキストボックスでの入力は、通常、値のキーを押下した後に[TAB]または[Enter]キーを押します。そうすると、そのときに Exitイベントが発生するので、イベントマクロが作成されていると Excelは、それを実行してくれます。
質問のケースでは、Exitイベントが発生するたびに行数をカウントアップしておいて、20行に達したときだけ 2 余分にアップすれば良いので、例えば次のようになります。
'------------------------------------------------------------------------------
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
11  If 行数 = 20 Then                       'もし変数「行数」の値が 20なら
12      行数 = 行数 + 2                     '「行数」に 2加える
13  End If
14  行数 = 行数 + 1                         '「行数」に 1加える
End Sub
'------------------------------------------------------------------------------
11行の If 文で判定している変数「行数」は、ゼロからカウントし始めていることに気付かれていますね。質問文では「5行目から……20行目まで」ということなので、20から 5を引いて If 行数 = 15 Then とした方が良いのかもしれませんが . . .

2. ユーザーフォームの Initialezeイベントマクロ
ブックが開かれてユーザーフォームが表示される直前に Initialezeイベントが発生します。これを利用して 変数「行数」に 5 をセットすることが可能です。
'------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
21  行数 = 5                                '変数「行数」に 5をセットする
End Sub
'------------------------------------------------------------------------------
こうしておけば、5行目から開始することが可能になります。

3. テキストボックスの値をワークシートのセルにセットするマクロ
次のマクロについては、質問されている訳ではありませんが、変数「行数」をどう使うかのサンプルです。このマクロは、テキストボックスの Changeイベントを利用しています。このイベントはテキストボックスの値が変ったときに発生します。
'------------------------------------------------------------------------------
Private Sub TextBox1_Change()
30  Range(Cells(行数, 2), Cells(行数, 2)).Value = TextBox1.Value '値をセルにセット
End Sub
'------------------------------------------------------------------------------
以上で質問に対する回答としては、終りになります。
サンプルブックのダウンロードは ここをクリック  (YNxv9g0260_TextBox.xls 51KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro