• ベストアンサー

エクセルVBAで質問です。データのセル範囲に名前を順に付けていくには

データベース形式の表にB列にデータがあれば C列~E列の範囲を、B列の会社名を名前にして定義していきたいので すが、教えていただけないでしょうか? リストで使ったり、グラフにする範囲に利用する等、範囲を名前に しておきたいのです。よろしくお願いします。 A列=No. B列=会社名 C列=データ1 D列=データ2 E列=データ3 F列=メモ

質問者が選んだベストアンサー

  • ベストアンサー
  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

シート名をSheet1とします。 Sub Sample() Dim rng_Data As Range Dim i As Long Sheets("Sheet1").Range("C1:E1").Select Set rng_Data = Range(Selection, Selection.End(xlDown)) For i = 1 To rng_Data.Rows.Count ActiveWorkbook.Names.Add _ Name:=Sheets("Sheet1").Cells(i, 2), _ RefersTo:=rng_Data.Rows(i) Next Set rng_Data = Nothing End Sub

wait4u
質問者

お礼

ありがとうございました。大変助かりました。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

こんなのマクロの記録で判ることじゃないの。 例データ A2:F7 番号 会社名 データ1 データ2 データ3 メモ 1 東商事 12 23 45 2 今井建設 13 25 48 3 岡野洋行 14 27 51 4 東京企画 15 29 54 5 カンダ株式」 16 31 57 6 北野販売 17 33 60 B2:F7を範囲指定して、挿入ー名前ー作成ー左端列 Sub Macro1() Range("B2:E7").CreateNames Left:=True End Sub すこし、余分なコードをそぎ落としたが。 これで質問者のニーズに合うのか、合わない場合補足してください。 ーー 本来、上記のような実例を挙げて、多分、名前ボックスで東商事を選択したら、どうなってほしいとか、質問すべきだ。 その先の応用例が書いてないので、上記でよいかどうか判らない。 Sub test01() x = Cells(2, "B") MsgBox x Range(x).Select Selection = "" End Sub のような使い方は出来るなと思ったが、どういう使い方をするのかな。 >リストで使ったり、グラフにする範囲に利用する等、 前者はわかるが後者は、VBAでの話し?

wait4u
質問者

お礼

回答はありがたいのですが、投稿者の気持ちを悪くするような表現が多いように感じます。立場が変わり、私自身得意なことであれば、初心者に同じような感情を抱くこともありますが、そのような言葉遣いはしません。自分自身このように初心者の場合、玄人の考えるところまで考えが及ばないことがあることを分かっているからです。 以後は回答してくださらなくて結構ですのでご承知おきください。

noname#79209
noname#79209
回答No.5

#3です。 B列からE列を選択して、#3と同様に、 「左端列」にチェックを入れればVBAでなくても可能です。 ご参考まで。

wait4u
質問者

お礼

ありがとうございました。一般操作でのやり方はいつも使っていのですが、今回他のマクロと組み合わせたいと考えて投稿させていただきました。またお願いします。

noname#79209
noname#79209
回答No.4

#3です。 早トチリでした。 忘れてください。

noname#79209
noname#79209
回答No.3

1.各列の1行目に、それぞれの列の名前を入力しておきます。 2.A列からF\列までを全て選択します。 3.「挿入」-「名前」-「作成」をクリック。 4.「上端行」にcえっくを入れる。 5.「OK」をクリック。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

こんにちは。 Sub try()   Dim r As Range      With ActiveSheet     For Each r In .Range("B1", .Cells(.Rows.Count, 2).End(xlUp))       If r.Value <> "" Then         r.Offset(, 1).Resize(, 3).Name = r.Value       End If     Next   End With End Sub ...こんな感じです。

wait4u
質問者

お礼

ありがとうございました。分かりやすくてお手本になりました。#1さんとは甲乙付けがたいのですが、その場合最初の方に、と自分の中で決めていますので今回は次点ということでご容赦願います。またお願いしますね。