見出し画像

Lesson 7 別々のシートのデータを取り込む

前回は同じシートのデータを取り込み、計算結果を自動表示させるという内容でしたが、今回は、「別々のシート」のデータを対象とした計算結果の自動表示をさせるためのマクロを作る方法について解説します。

まず今回は、

「[Sheet2]のセルA10の数値データから[sheet3]のセルB15の数値データを引いた結果を、[Sheet1]のセルC20に表示させたい。」

という命題があったとします。

1⃣
この命題に沿って、いつものように「マクロの記録」を使って
簡単なマクロを作ってみます。
――――――――――――――――――――――――――――+
1.まずはエクセルを起動させます。(空のエクセルを立ち上げて
 ください)

 ※予めもう2つ([Sheet2]と[Sheet3]を)新規作成して
 おいてから 次へ進んでください。

2.[Sheet1]を開いた状態で、
 [開発]タブの[コード]で [マクロの記録] をクリック →
「マクロの記録」画面が出るので、そのまま[OK]をクリック。

3.次に、シート[Sheet2]を開き、A10のセルに 111 と打ちます。

4.同様に、シート[Sheet3]を開き、B15のセルに 222 と打ちます。

5.最後に、シート[Sheet1]を開き、C20のセルに 333 と打ちます。

6.打ち終わったら一度[Enter]キーを押してから、
 [開発]タブの[コード]で [■記録終了] をクリックして、
 マクロの記録を終了させます。
――――――――――――――――――――――――――――+

これで、上の命題のマクロプログラムを作るための「準備段階のマクロ」が
記録できました。

もうお分かりかと思いますが、ここで打った 111 とか 222 とか 333 という数字は、この後でプログラムを修正する際の目じるしにするという意味があります。

2⃣
次に、今回もまず実行してみる前に、ちょっとマクロプログラム
の中身をのぞいてみることにします。
――――――――――――――――――――――――――――+
1.[開発]タブの[コード]で [Visual Basic]をクリック。
 すると、マクロプログラムの画面が表示されたと思います。

2.この画面の左上半分の[+標準モジュール]という所の+の部分
 をクリックすると、そのすぐ下に[Module1]と表示されるので、
 その[Module1]をダブルクリックします。
――――――――――――――――――――――――――――+

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet2").Select
    Range("A10").Select
    ActiveCell.FormulaR1C1 = "111"
    Sheets("Sheet3").Select
    Range("B15").Select
    ActiveCell.FormulaR1C1 = "222"
    Sheets("Sheet1").Select
    Range("C20").Select
    ActiveCell.FormulaR1C1 = "333"
    Range("C21").Select
End Sub

これがいま作った「準備段階のマクロ」のプログラムということになります。

前回も同じようなマクロを記録したことはみなさん記憶に新しいと思います
が、今回のポイントとしては、シートの移動も一緒に「マクロの記録」で記録させた、というところにあります。

ここで注意していただきたいのは、マクロを記録する際に、最初に打ちこむシートが[Sheet2]だからといって、[Sheet2]を開いた状態で「マクロの記録」を開始してしまわないことです。

別のシートをあえて開いておくことで、マクロを実行する際に、どのシートを開いた状態にでも確実にターゲットとするシートのセルからデータを取得できるようにしています。

3⃣
それでは次に、このプログラムにちょっと手を加えてみたいと
思います。
――――――――――――――――――――――――――――+
1.まず、
   ActiveCell.FormulaR1C1 = "111"
 と書いてある行を
   a = ActiveCell.Value
 と書き改めてください。(大文字と小文字の区別は気にする
 必要はありませんが、必ず全部半角文字で打ってください。
 以下も同様です。打ち間違えを防ぐ為に、コピー&ペースト
 を使うのが良いと思います。)

2.同様に、
   ActiveCell.FormulaR1C1 = "222"
 と書いてある行を
   b = ActiveCell.Value
 と書き改めます。

3.最後に、
   ActiveCell.FormulaR1C1 = "333"
 と書いてある行を
   ActiveCell.FormulaR1C1 = a - b
 と書き改めます。
――――――――――――――――――――――――――――+

書き変えた後のプログラムはつぎの様になります。

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet2").Select
    Range("A10").Select
    a = ActiveCell.Value
    Sheets("Sheet3").Select
    Range("B15").Select
    b = ActiveCell.Value
    Sheets("Sheet1").Select
    Range("C20").Select
    ActiveCell.FormulaR1C1 = a - b
    Range("C21").Select
End Sub

4⃣
それでは、実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、実行する前に開いておくシートは
 何でも構いませんので、

 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るのでそのまま[実行]をクリック。
――――――――――――――――――――――――――――+

[Sheet1]のセルC20に 111 から 222 を引いた値である -111 と表示されれば
OKということになります。

これで一応、今回の命題だった

「[Sheet2]のセルA10の数値データから[sheet3]のセルB15の数値データを引いた結果を、[Sheet1]のセルC20に表示させたい。」

ということを実現する自動マクロが完成したことになります。

最近たびたびお話していますが、プログラムの基本動作「入力・処理・出力」でいうところでは、この場合の

 「入力」とは・・・[Sheet2]のセルA10と[sheet3]のセルB15からデータを
          取得すること
 「処理」とは・・・その2つのデータで引き算をすること
 「出力」とは・・・答えを[Sheet1]のセルC20に表示させること

となるわけです。

「入力・処理・出力」について最近たびたびお話しているわけは、このことが例えばビジネス用語の5W(2H)といったものとよく似ているからです。
何か仕事を進める場合でも、マクロプログラムを作る場合でも、まずはこの
「いつ・どこで・だれが・なにを・どうする」といったようなことを明確にしておくことが大切なことです。

それがプログラムの場合には、「入力・処理・出力」ということになります。マクロを作る際には自分がマクロプログラムでさせたいこと「入力」は何か?「処理」は何か?「出力」は何か?
ということを、まずはじめに明確にしておくことが一番大切なことなのです。

今回はこれで終了です。

今日作ったマクロは、特にこの講座では以後使用することはありませんが、自分が作ったものは復習や今後の参考のためにも、なるべく分かりやすい名前をつけて("gogo07.xlsm")保存しておく習慣をつけておくことをお勧めします。

【今日のポイント】
シートの移動も「マクロの記録」をしておけば、別シート間の計算でも難なくできる


この記事が気に入ったらサポートをしてみませんか?