VLOOKUPでは数式の値は検索不能?
ボウリングのリーグ戦の成績表をエクセルで作っていて、リーグ戦では一般的に初回はレーン抽選によって対戦相手が決まり、2週目以降は対戦表に従って総当たり戦を行います。
レーン抽選したら番号入れたら成績表から個人データを読み取ってレコードシートすぐに印刷できないものかな?
エクセルで作っているリーグ成績表スタンディングに、ボウリングレーン抽選機能を付け加えるまでは、初回リーグ戦が終わった後にエクセルで作っている成績表に抽選番号順に選手登録をして、同時に初回の成績を入力していました。
「ボウリングレーン抽選機能」って勝手に読んでいますが、これができたことにより、あらかじめ選手登録をエクセルに入力しておいて、当日レーン抽選を行って練習ボールをしている間に、レーン番号を入力するだけで勝手に並び変わってレコードシートが印刷されるのです。
ボウリングASで入力している感覚ね
この「ボウリングレーン抽選機能」を既存のエクセルに付け加えるのは、非常に難しい。
なぜなら、レーン抽選によりエクセルでの選手登録順が並び変わる事が当然発生するのです。
その辺の話はまた別の機会に書くとして、レーン抽選をするにあたって検索に使うエクセル関数のVLOOKUP関数を使うのですが、検査値が計算式で求められた数値だと(見た目)エラー【#N/A】になっちゃいました。
直接数字を入力すると、正しくVLOKUP関数が働いてくれて検索してくれました。
そこで、レーンと投球順を表すセルを値だけにしてコピーすれば解決できるので、エクセルVBAで複数のセルの値を別の複数のセルへコピーというか、値を転記するって事をしました。
VBAでセルを別のセルへ転記方法
普段使いませんが、基本です。
この図は、実際にボウリング成績表でレーン抽選機能の一部のワークシートですが、セルBD103の値をセルAX103に値だけコピー(転記)するVBAコードは、シンプルです。
Range(“AX103”).Value = Range(“BD103”).Value
End Sub
- 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
- セルAX103の値はセルBD103の値にする
- マクロの記述終了
とてもシンプルで簡単ですね。
これで数式の入っている値も単なる数字になって転記されます。
VBAで2つのセルを別の2つのセルへ転記方法
こんどは2つの場合です。
セルBD103の値をセルAX103に、セルBD104の値をセルAX104に、値だけコピー(転記)するVBAコードです。
Range(“AX103”).Value = Range(“BD103”).Value
Range(“AX104”).Value = Range(“BD104”).Value
End Sub
- 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
- セルAX103の値はセルBD103の値にする
- セルAX103の値はセルBD103の値にする
- マクロの記述終了
2つ並べるだけなので簡単ですね。
3つ以上の複数のセルの値を連続して転記する
先ほどの図のようにここでは選手は最大40名までで作っているので、コピーするのは40回。
VBAでひとつのセルの値を別のセルに転記する方法で40回続けて書くも良し、ただ面倒なので、指定した回数繰り返し処理を行ってくれるFor~Nextステートメントを使いましょう。
書き写したいセルは、BD103~BD142の値をAX103~AX42へそれぞれ転記します。
For i = 103 To 142
Cells(i, 50).Value = Cells(i, 56).Value
Next i
End Sub
- 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
- 繰り返し処理の変数「i」を宣言し、変数「i」は103~142とする(転記したいセル行番号)
- セル行番号iの50列目の値(AX列)はセル行番号iの56列目の値(BD列)を転記する
- 指定分(103~142)を繰り返して行う
- マクロの記述終了
[temp id=19]