こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでセルの値を名前定義連続

いつもお世話になってます。
エクセルVBA2013で質問です。

データ シートのC3から順次行方向にD3,E3と名前が入っています。
行方向に入る数は、下記のコードで取得できる数が上限になります。

i = Range("B4:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count + 2

そのC3から順次行方向のセルの値を名VBAで名前を定義したいと思っています。
参照範囲は、C3ならC列全体、D3ならD列全体・・・としていきたいです。

各セルに入る値は変化することがあります。C3に「あいう」と入力したり「AAA」と入力したりと変化します。その度に名前の定義を変更したいです。(イベントでなく普通にボタンを押して変更する)
名前が変わるので、同じ範囲で名前が違うものがいくつもできないようにしたいです。

すいません、色々条件ありますがどうぞよろしくお願いいたします。

投稿日時 - 2014-12-27 22:03:50

QNo.8872237

困ってます

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

こんばんは!

>参照範囲は、C3ならC列全体、D3ならD列全体・・・としていきたいです。
というコトですので、列全体を対象としています。

まずすべての「名前定義」を削除し、新たに「名前定義」するようにしています。

Sub Sample1()
Dim j As Long, myName As Name
For Each myName In ActiveWorkbook.Names
myName.Delete
Next myName
For j = 3 To Cells(3, Columns.Count).End(xlToLeft).Column
If Cells(3, j) <> "" Then '←念のため
ActiveSheet.Columns(j).Name = Cells(3, j)
End If
Next j
End Sub

※ i = Range("B4:B" & Cells(Rows.Count, "B").End(xlUp).Row).Count + 2
の部分が何をしたいのか判りませんので
無視して列全体としています。m(_ _)m

投稿日時 - 2014-12-27 22:47:26

お礼

どうもありがとうございました。問題なくできました。
列全体で指定してもIf Cells(3, j) <> "" Then があるので特に支障はありません。

投稿日時 - 2014-12-28 10:49:17

ANo.1

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

簡易版:
sub macro1()
 dim n as name
 dim h as range

 for each n in activeworkbook.names
 ’if n.referstorange.rows.count = rows.count then '適宜応用の事
  n.delete
 ’end if
 next
 for each n in activesheet.names
  n.delete
 next

 for each h in range(range("C3"), cells(3, columns.count).end(xltoleft))
 activeworkbook.names.add name:=h.value, refersto:=h.entirecolumn
 next
end sub

投稿日時 - 2014-12-27 22:49:01

お礼

ありがとうございました。
動作確認問題ありませんでした。
最初は空白でエラーが発生していたようなので、No.1さんのを参考に
If h <> "" Then
を入れると解決しました。

投稿日時 - 2014-12-28 10:51:29

あなたにオススメの質問