Excelを勉強しましょう EnjoyExcel

アイコンの機能や関数の説明、VBA初心者向けの勉強方法について情報掲載しています。関数、VBAともに理解が進むように出来るだけ事例を交えて説明しています。

VBA⑦ いろんなものが入る箱。変数を使いましょう。

f:id:EnjoyExcel:20210627110504p:plain

 

前回は最終行と最終列を取得する方法を紹介しました。

enjoyexcel.hatenablog.com

 

では取得した最終行と最終列ってどうやってコードに展開するの?というところを説明させていただきます。

 

Range("A1:E5")に情報が居るとしてE5のところを取得した行と列に変えたいと思います。

 

行 = cells(rows.count,1).end(xlup).row

列 = cells(1,columns.count).end(xltoleft).column

 

これで行も列も5が返ってきますよね。

 

ではRange("A1:E5") = "おはようございます”

 

これを Range("A1:55") = ”おはようございます” にしたらどうなるか・・・NGです。

f:id:EnjoyExcel:20210627112403p:plain

こうなります。ちなみに「実行時エラー1004」は何か?

実行時エラー1004はいろんな要因がありますが今回のエラーをざっくり言うと「そんな情報は無い」と言ってます。書き方が違います。コンパイルエラーだと思ってください。

 

Range("A1") = "おはようございます" はOKなので A1までは使えそうです。

やっぱりE5の表現の仕方が違っているかもしれないと思えてきます。

 

数回前の記事でこんな書き方したの覚えてますか?

Range("A1","E5")という書き方も出来ます。

enjoyexcel.hatenablog.com

 

ってことはRange("A1","E5")のA1とE5だけダブルクォーテーションで挟んでいる書き方をしているので分けて書けそうな気がしませんか?

 

で行、列は番号しかわかってないので前回勉強した Cells(行,列)の形なら番号だけでセルを表現できそうですよね。A1はそのままでE5だけ書き換えてみましょう。

 

Range("A1",cells(5,5)) = "おはようございます"

 

これ 行けそうでは?

 

私はエラー出ませんでしたがいかがでしょうか?

 

出来たかもしれませんが Cells(5,5) って書いてるから出来るわけでコードの中で取得した行、列をCellsに展開しないといけないからまだこれではダメです。

 

ここでやっと表題欄でお知らせした 変数 という優秀な万能社員の登場です。

 

いろんな値を収納したり次の工程に送ったりしてくれる情報のつなぎ役をしてくれます。

 

例えば・・・

 

r = cells(rows.count,1).end(xlup).row

c = cells(1,columns.count).end(xltoleft).column

 

r と c が変数です。

上記のコードはいろんな情報が入る「rという箱」と「cという箱」に行番号や列番号をセットする。というコードだと思ってください。

 

取得出来たのが5行目、5列目だったら r=5、c=5 という事なのでRangeのコードに置き換えるとRange("A1",cells(r,c)) という書き方が出来ます。

 

これだったら取得された行、列がどんな数字であっても変数が受けて次のコードに値を転用するのでどんな値が来ても対応できますね。一通りコードを書いてみます。

 

↓ここからコードです

Sub day20210626_1()

 

'変数の定義

Dim r As Long

Dim c As Long

 

’表の最終行と最終列を取得する

r = cells(rows.count,1).end(xlup).row

c = cells(1,columns.count).end(xltoleft).column

 

’表全体に おはようございます を入力

Range("A1",Cells(r,c)) = "おはようございます"

 

End sub

↑ここでコードは終わりです。

 

このコードを実行すると

r も c も5だったらA1からE5までおはようございますが入力されます。

 

上記のようなRangeの中で”A1”のような書き方とcellsを併記するようなコードの書き方はあまりやらないのですが範囲指定する際にRangeの後のかっこにはどんな情報を取れば良いのか勉強する為にやっています。もう少し後の記事でRange(Cells(1,1),cells(2,2))のようなコードの書き方を提供していきます。

 

話をコードの内容に戻します。 また新しいコードをさらっと入れましたね。 Dim ってなんぞや?

 

次回説明します。