複数のセルの値を別のセルにコピーする

セル値を別のセルへコピー Excel-VBA
スポンサーリンク

こんにちは、とりっぷぼうるです。

元々エクセルとは全く縁のない生活をしていましたが、人員不足などで少しでもデータ入力作業や集計作業を効率化するしか方法が無く、仕方がなくエクセルに取り組み始まました。

なぜならば、大きな会社ならば専用ソフトやクラウド上でデータ集計や管理を行うのでしょうけど、小さなところではそのようなお金もないのでエクセルで解決するしか方法が無いのですよね。

このような理由からエクセルに取り組み始めましたので、当然ながらエクセルの専門知識もなく、学校に通うこともできずにただ単にエクセルの書籍とにらめっこしながら取り組んでいます。

波乗りアヒル
波乗りアヒル

でも書籍のままだと実用的でないことが多く、VBAコードを組み合わせてみたら動いた!という実用例・体験談を書いています。

Excel-VBAの専門学校通学や・資格があるわけではありませんので、あくまでエラーにならずに動いてくれているVBAコードになりますので、掲載のVBAコードが同じように動く保証はできません。
実際に動いているエクセルは2009と2016です。

VLOOKUPでは数式の値は検索不能?

ボウリングのリーグ戦の成績表をエクセルで作っていて、リーグ戦では一般的に初回はレーン抽選によって対戦相手が決まり、2週目以降は対戦表に従って総当たり戦を行います。

波乗りアヒル
波乗りアヒル

レーン抽選したら番号入れたら成績表から個人データを読み取ってレコードシートすぐに印刷できないものかな?

エクセルで作っているリーグ成績表スタンディングに、ボウリングレーン抽選機能を付け加えるまでは、初回リーグ戦が終わった後にエクセルで作っている成績表に抽選番号順に選手登録をして、同時に初回の成績を入力していました。

「ボウリングレーン抽選機能」って勝手に読んでいますが、これができたことにより、あらかじめ選手登録をエクセルに入力しておいて、当日レーン抽選を行って練習ボールをしている間に、レーン番号を入力するだけで勝手に並び変わってレコードシートが印刷されるのです。

ボウリングASで入力している感覚ね

この「ボウリングレーン抽選機能」を既存のエクセルに付け加えるのは、非常に難しい。

なぜなら、レーン抽選によりエクセルでの選手登録順が並び変わる事が当然発生するのです。

その辺の話はまた別の機会に書くとして、レーン抽選をするにあたって検索に使うエクセル関数のVLOOKUP関数を使うのですが、検査値が計算式で求められた数値だと(見た目)エラー【#N/A】になっちゃいました。

直接数字を入力すると、正しくVLOKUP関数が働いてくれて検索してくれました。

そこで、レーンと投球順を表すセルを値だけにしてコピーすれば解決できるので、エクセルVBAで複数のセルの値を別の複数のセルへコピーというか、値を転記するって事をしました。

VBAでセルを別のセルへ転記方法

普段使いませんが、基本です。

VLOOKUP検査値が数式

この図は、実際にボウリング成績表でレーン抽選機能の一部のワークシートですが、セルBD103の値をセルAX103に値だけコピー(転記)するVBAコードは、シンプルです。

Private Sub CommandButton1_Click()
Range(“AX103”).Value = Range(“BD103”).Value
End Sub
  1. 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
  2. セルAX103の値はセルBD103の値にする
  3. マクロの記述終了

とてもシンプルで簡単ですね。

これで数式の入っている値も単なる数字になって転記されます。

VBAで2つのセルを別の2つのセルへ転記方法

こんどは2つの場合です。

セルBD103の値をセルAX103に、セルBD104の値をセルAX104に、値だけコピー(転記)するVBAコードです。

Private Sub CommandButton1_Click()
Range(“AX103”).Value = Range(“BD103”).Value
Range(“AX104”).Value = Range(“BD104”).Value
End Sub
  1. 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
  2. セルAX103の値はセルBD103の値にする
  3. セルAX103の値はセルBD103の値にする
  4. マクロの記述終了

2つ並べるだけなので簡単ですね。

3つ以上の複数のセルの値を連続して転記する

先ほどの図のようにここでは選手は最大40名までで作っているので、コピーするのは40回。

VBAでひとつのセルの値を別のセルに転記する方法で40回続けて書くも良し、ただ面倒なので、指定した回数繰り返し処理を行ってくれるFor~Nextステートメントを使いましょう。

書き写したいセルは、BD103~BD142の値をAX103~AX42へそれぞれ転記します。

Private Sub CommandButton1_Click()
For i = 103 To 142
Cells(i, 50).Value = Cells(i, 56).Value
Next i
End Sub
  1. 「コマンドボタン1をクリックしたら実行する」というマクロの記述を開始
  2. 繰り返し処理の変数「i」を宣言し、変数「i」は103~142とする(転記したいセル行番号)
  3. セル行番号iの50列目の値(AX列)はセル行番号iの56列目の値(BD列)を転記する
  4. 指定分(103~142)を繰り返して行う
  5. マクロの記述終了
こうすることで、計算された数式の表示された数字(文字列)が数字に置き換わるので、VLOOKUP関数が働くようになり、検査値として認識されます。

各コントロールまとめて転記シリーズ

ユーザーフォームを使うと配置したコントロール(テキストボックスやラベルなど)とセルとの間で値のやり取りが多くなります。

よく使うのでまとめてみました。

値の場所転記したい場所説明ページ
セルの値ラベル名VBAコード
セルの値テキストボックスの値VBAコード
セルの値コマンドボタンの表示名VBAコード
セルの値セルの値VBAコード
テキストボックス入力値セルの値VBAコード
波乗りアヒル
波乗りアヒル

成績表作成には知っておきたいExcel-VBAもくじ

ボウリングハンデキャップのつけ方
HDCPの種類はリーグのルールにより複雑に ボウリングの成績表(リーグ戦)で必ず必要になるのが、ハンデキャップ(HDCP)です。 ボウリングご予約の時に一番多く使われているのが、女性にだけハンデキャップをつけてあげることが多いですね。 だいだい何点ぐらいのハンデキャップが多いの?
ボウリングリーグ対戦表の数字を名前に自動変換する方法
リーグ戦の対戦表をエクセルで作る時、数字で表されている番号を名前に自動的に変換できると作業時間が短くなり効率的ですね。たった2つのエクセル関数を使うだけで、簡単にできるんです。今回の回戦数を入力するだけで一発変換完了。もちろんお客様にスケジュール対戦表として渡すことも簡単ですよ。
人数に応じてリーグ対戦表を自動選択する方法
複数の表があり、条件に合った表を選んで、さらにセルの値を選んで数字を名前に自動変換できると、とても便利なエクセルができますよね。ボウリングのリーグ対戦表も人数により表が異なるので、参加人数が決まったら、自動的に表を選んで対戦番号がこれも自動的に参加者名に変換されると便利で作業効率がアップして時間短縮になりますよ。
波乗りアヒル
波乗りアヒル

エクセルの勉強お疲れ様です。ちょっとひと休みしませんか?

コメント