【ExcelVBA入門】ここから、ここに 転記編【第8回】

どーも、よみぞうです!
前回に引き続きExcelVBAで出来るすごいことの一つ、「他のエクセルファイルを開いて中身を参照する」第2回目をやるよ!
準備はいいかな?
よみぞう
おー!
えな
動画はこちらから
前回のおさらい
はい、前回はこの「OpenClose1」を見ていきました。これは、
ここにあるdata.xlsxをただ開いて閉じるだけのプログラムでしたが、今回は開いたファイルから、このエクセルファイルに転記して、閉じる。これをやりましょう。一応おさらいとして、
- (1行目)文字列を入れる変数booknameを宣言して
- (2行目)元データフォルダに入っているdata.xlsxというエクセルファイル名をbooknameに代入。
- (3列目)data.xlsxを開く
- (4行目)data.xlsxを保存しないで閉じる
でした。
開いて 転記して 閉じる
では、OpenClose2を見ていきます。
1と違うのは、開く処理と閉じる処理の間のこの1行だけです。
コメントに転記処理って書いてますね。
まずは、実行してみましょう(F5で実行)
はい、A1セルにdata.xlsxのA1セルが転記されました。
一応data.xlsxのファイルを開いて確認してみましょう。
はい、同じA1セルの「番号」と書いてあるのが確認できますね。
コードを見ていこう!
ではコードを見ていきましょう。
Thisworkbook.sheets(1).Range(“A1”)
まず=の左側!これは、もう何回かやってますね。
「このエクセルファイルの1枚目のシートのA1セル」
という意味です。
省略できるんかい!アクティブな場合の省略
続いて=の右側見ていこう!
「Range(“A1”)」って書いてますね。「A1セル」です。前回までの動画をご覧頂いている方はたぶん、
どこのA1セルだよ!
よみぞう
と思うと思います。これですね。実は言っていないことがあるんですよ。
何よ何よ!
えな
いや、期待しすぎだよ、そんなたいした事言わない。
よみぞう
そうなの?
えな
実は、range(“A1”)の前はある条件で省略できるんです。その条件は、
よみぞう
その条件は?
えな
いや、だからせり上げないで。たいした事言わないから。
よみぞう
そうなの?
えな
その条件は、
「そのエクセルファイルがアクティブであり、シートがアクティブであること」
です。エクセルファイルがアクティブっていうのは前回説明したとおり、ウィンドウが一番前面に表示されているエクセルファイルの事。通常は最後に開いたエクセルファイルが前面にくるので、今回はdata.xlsxがアクティブなエクセルファイルです。そして、エクセルファイルが開いてすぐ表示されているのは、通常シートの1枚目です。これがアクティブシートです。
今回はこの条件を満たしているため、普通は
ActiveWorkbook.sheets(1).Range(“A1”)
と書くところを
Range(“A1”)
に省略できるんですね。あ、ActiveWorkbookはアクティブなエクセルファイルという意味です。そのままですね。
まとめると
- Thisworkbook.sheets(1).Range(“A1”)=(※省略ActiveWorkbook.Sheets(1).)Range(“A1”)
- このエクセルファイルのシート1のA1セルにアクティブファイルのシート1のA1セルの値を代入
ただ、省略するかどうかは自由です。
後で見返したときにわかんなくなっちゃう
えな
みたいな人はその内説明するWith構文とか、省略する方法はいくつかあるのでそっちを使ってもいいかもしれません。分かったかな?
なんとなく分かった!
えな
画面更新の停止せよ!
続いてOpenClose3を見てみよう!
さっきと違うところはこの1行です。
コメントに画面の更新の停止と書いてますね?とりあえず実行してどこが違うか見てみましょう。じゃまず、この1行がないバージョンのOpenClose2を実行してみます。(F5で実行)
はいこんな感じですね。
続いてOpenClose3を実行してみましょう。(F5で実行)
はい、こんな感じですね。
違いが分かるかな?
よみぞう
なんかわかった気がする
えな
お!何が違った?
よみぞう
なんかが違うよね
えな
そら、なんかが違うよ!どんな回答だよ!
よみぞう
ありゃー
えな
もういいや、皆さんはもう気づいていると思いますけど、一応確認すると、
OpenClose2は一瞬だけ開いたdata.xlsxのファイルが見えましたよね?対するOpenClose3は全く画面が変わらずにA1セルに静かに転記されました。
これは何かというと、他のExcelファイルを開いたとき等に画面が切り替わるのを停止するプログラムです。画面が停止しているだけなので、バックグラウンドで処理が実行されているのは変わりません。ただ、画面が切り替わるか変わらないかの違いです。これを入れとくことによって、処理スピードが速くなります。今回はあまり実感なかったかもしれませんが、これが、「100個以上のファイルを開いて転記して閉じる」のような大量の処理を行うプログラムだとかなり処理スピードが変わってきます。なので、今後プログラムを書くときには、原則この1行を入れて下さい。
まとめると
- Application.ScreenUpdating = Falseは画面の更新を停止する命令
- 変わるのはあくまでも画面だけの話
- 画面に現れないだけで処理は実行されている
- 処理のスピードが上がるので、原則入れておくべき
入力候補のショートカット(Ctrl + Space)を使ってみよう
では、前回説明した、入力候補のショートカットを使って実際に入力してみよう。前回の技を使うと簡単に入力できます。
Ctrl + Spaceを押して
appを押す。applicationを選択してtabキーを押す。
.(ドット)を入力してscを押す。
ScreenUpdatingを選択し、tabキーを押す。
=(イコール)を入力。また選択肢が出てくるので、Falseを選択してtabキーを押す。↓を押す。
はいすぐ入力できました。
みんなも実際に手を動かして入力してみてね!
よみぞう