検索して見つけたセルの入力済み最終右セルを選択や文字を記載
エクセルで一番面倒で時間がかかる作業が文字や値をシートの中から探す作業じゃないですか?
例えば縦軸(行)に47都道府県が並んでいて、横軸に12種類の項目があるとします。
すると47行の中から探したい都道府県を探して、見つけたら12種類の項目に必要な項目のみ入力する作業をしなくては行けなくなったらどうしますか?
単純計算で47都道府県×12種類=564個のセルの入力に、1か所30秒で作業をしても5時間弱かかってしまいます。
ところがユーザーフォームを使えば、1行につき10秒ちょっとでも10分程で作業を終えることができます。仮に1行につき1分かかったとしても47分です。
FindとActiveCellとOffsetを組み合わせる
ここでやりたいことは、上の図のように店舗名(47都道府県名)が縦に並んでいて(行)、支払い可能な取扱い決済が横に(列)追加できるようにします。
ユーザーフォームに記載するVBA
ここでは、このままのVBAコードを記載すると複雑になるので、下記のように絞って記載します。
- リストボックスから都道府県を選択
- テキストボックスに文字入力
- コマンドボタンに選択状態の都道府県と同じ行を見つけて右側のセルに入力文字を記載する
これで、項目追加したい都道府県をリストから選択して、テキストボックスに項目文字を入力後コマンドボタンを押すと、選択した都道府県と同じ行へ移動して右側セル(E列)が空欄ならばE列に入力し、E列がすでに入力済みならばさらに隣の右側セル(入力済の右終端セル)に記載されます。
リストボックスに記載するVBA
先ほどのユーザーフォームに記載したVBAコードには、リストボックスに関するVBAコードの記載をしていません。
検索するセルA2と同じ値こそがリストボックス1で選択された都道府県なので、リストボックスに記載するリストを設定する事と、リストを選択したらセルA2に記載されるようにVBAコードをかくひつようがあります。
リストボックスにリストを表示させる
まずユーザーフォームが表示されたら自動的にリストボックスに都道府県名が表示されないと選択ができないので、ユーザーフォームイニシャライズにVBAコードを書き込みましょう。
ユーザーフォームイニシャライズに関しては下記ページと重複するので、ここでは省略します。
リストを選ぶと自動的にセルに記載させる
最後に表示されたリストボックス内の都道府県名をクリックして選択状態にするだけで、セルA2に自動的に記載させます。
リストボックスのChangeイベントにより、リストを選択状態にするだけで実行できるので、選択後にクリックしたりEnterキーを押したりするちょっとした手間ですが省略できます。
以上、この3つのVBAコードでデータ検索して見つけた項目と同じ行の右側の入力済み最終列のセルに、追加記載できるようになります。