スポンサーリンク

【Excel/VBA】セル範囲に名前を付けた場合の扱い方法

エクセルVBA vba
スポンサーリンク
※当サイトは広告を含みます

エクセルでセル範囲(単一セルでもOK)に名前を定義すると、

Range(”名前”)といった様に決めておいたセル範囲を名前で扱うことができるようになります。

ある定型書式のセルに「担当者」欄とか「支店名」欄とか、名前を付けておくと、

書式の変更があってセルをずらした時など、セルがずれたから「Range(”A1”)をRange(B1”)に変更しなきゃ」とかしなくてもよい

定型書式のファイルを操作するマクロでもセルの名前を利用できるし、その定型書式ファイルを集計する別のマクロでもセルの定義された名前を利用し「担当者」欄の値を持ってきて~とか、利用できます。

でも、結合セルに名前を定義したときに、ClearContentsはできるのに、値を入力しようとするとエラーが出てできない、、、ということがあり、あれこれやった結果「配列 もしくは Rangeの範囲として扱えばいいんだ!」という結論にたどり着きました。

備忘録として残しておきます。

1.まず、セル範囲に名前を定義します。

リボン「数式」から「名前の定義」を選択します。

「名前」を入力します。「参照範囲」を適宜変更します。今回はB2:D2の結合セル範囲を指定しました。OKをクリックして終了です。

対象のセルをクリックすると、左上に先ほど定義した名前が表示さていることが確認できます。

※名前の定義の方法はほかにもありますので、これは一例です。

2.名前を定義したセルの操作

さて、この名前を定義された結合セルに

①値のクリア

②値の入力

③値を取得

という三つの操作をしてみます。

コードです。

 ’①名前の定義「セル範囲」の値を消去
 Range(“セル範囲”).ClearContents

 ’②名前の定義「セル範囲」に値を入力
 Range(“セル範囲”).Value = “かきくけこ”

 ’③名前の定義「セル範囲」の値を取得してメッセージボックス表示
 Dim buf As String
 buf = Range(“セル範囲”).Value
 MsgBox buf

①成功。②成功。③でエラーが出てしまいました。

f:id:mwke:20210523105736p:plain

③のコードをこのように変えたらうまくいきました。

 buf = Range(“セル範囲”)(1).Value

「セル範囲の左から一つ目のセルの値」という指定の仕方。

Range(”セル範囲”)の後ろに「範囲の中のどこ」という指定をしてあげます。

そうするとうまくいきました。

3.表などのセル範囲に名前を定義した場合の操作方法

(1)表の範囲に名前を定義する

こんどは、表の範囲に名前を定義してみます。

名前を定義したいセル範囲を選択した状態でエクセルの左上の「名前ボックス」につけたい名前を入力します。これで名前の定義することができました。

今回はセルB4~D6に「セル範囲2」という名前を定義しました。

(2)まずは消去の書き方

範囲の全体の値を消去 

 ’①名前の定義「セル範囲」の値を消去
 Range(“セル範囲2”).ClearContents

名前の定義「セル範囲」の一部分を消去する書き方
一か所指定

 ’②上から2番目、左から2番目の値を消去
 Range(“セル範囲2”)(2, 2).ClearContents

一行指定

 ’②上から1番の行の値を消去
 Range(“セル範囲2”).Rows(1).ClearContents

列指定
 ’②左から3番の列の値を消去
 Range(“セル範囲2”).Columns(3).ClearContents

(3)値の入力の書き方

 ’名前の定義「セル範囲」に値を入力
 Range(“セル範囲2”)(1, 1).Value = “あ”
 Range(“セル範囲2”)(1, 2).Value = “い”
 Range(“セル範囲2”)(1, 3).Value = “う”
 Range(“セル範囲2”)(2, 1).Value = “え”
 Range(“セル範囲2”)(2, 2).Value = “お”
 Range(“セル範囲2”)(2, 3).Value = “か”
 Range(“セル範囲2”)(3, 1).Value = “き”
 Range(“セル範囲2”)(3, 2).Value = “く”
 Range(“セル範囲2”)(3, 3).Value = “け”

f:id:mwke:20210523111317p:plain

(4)値の取得

同様に、範囲の「どの位置のセル」という指定の仕方をします。 

 Dim buf As String
 buf = Range(“セル範囲2”)(2,2).Value
 MsgBox buf

(5)値の取得。配列に入れてみる。

セル範囲の一番上の行の値を配列vに入れます。 

 Dim v As Variant
 v = Range(“セル範囲2”).Rows(1).Value

セル範囲の値をすべて配列v2に入れます。
 Dim v2 As Variant
 v2 = Range(“セル範囲2”).Value

ローカルウインドウで配列の中身を見てみます。

ちゃんと入ってますね。

最後までお読みいただきありがとうございました。

セル範囲についてはこちらでも扱っています。

mwkexcel.hatenablog.com

mwkexcel.hatenablog.com

スポンサーリンク
スポンサーリンク
vba
スポンサーリンク
mwkをフォローする
エクセルがともだち

コメント

タイトルとURLをコピーしました