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

このQ&Aのポイント
  • エクセルVBAを使用して、セルの値を連続的に名前定義する方法について質問があります。
  • 行方向に順次増えていくセルの値を、VBAを使って名前定義したいと考えています。
  • 名前定義する範囲は、セルの値が変化しても同じ範囲内で重複しないようにしたいです。
回答を見る
  • ベストアンサー

エクセル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」と入力したりと変化します。その度に名前の定義を変更したいです。(イベントでなく普通にボタンを押して変更する) 名前が変わるので、同じ範囲で名前が違うものがいくつもできないようにしたいです。 すいません、色々条件ありますがどうぞよろしくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >参照範囲は、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

hinoki24
質問者

お礼

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

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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

hinoki24
質問者

お礼

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

関連するQ&A

  • セル範囲に名前を定義する

    セル範囲に名前を定義して、計算式の中で使いたいのですが、 例えば、A列全体にAという名前、B列全体にBという名前を付けて、 =Counta(A)と記述すれば、A列にあるデータの個数が出てきます。 =Counta(B)と記述すれば、B列にあるデータの個数が出てきます。 一つの計算式にCounta関数が10個以上あって、AとBを書き換えるのが面倒なのですが、 特定のセルC1にAと入力したらCounta(A)、Bと入力したらCounta(B)になるようには出来ないでしょうか? =Count(C1)と入力してもダメでした。

  • エクセル 名前定義の範囲について

    エクセル 名前定義の範囲について質問です。 始まり・終わりの行を示す特定の文字列を設定し、 それを元に自動で範囲の行数を変化させるようなことはできませんでしょうか。 例)A列に、行範囲を示す文字列を記述。  B列以降が実際の範囲となる。  A 1 この行から 2  3  4  5  6 この行まで 7 というように記述されていた場合、 「この行から」「この行まで」という文字列の位置を元に、 名前定義の範囲が自動で「B1:C6」となるような方法を探しています。 「この行から」の位置をA3に変更した場合、 名前定義された範囲も、自動で「B3:C6」に変化して欲しいのです。 ただし、文字列を元に変化するのは行だけで、列の範囲は固定で構いません。 極力マクロを使用しない方法で、有効なものがございましたら ご指導のほどよろしくお願いします。

  • excel2003の vbaの名前定義について

    excel2003の vbaで、名前定義した範囲から、任意のセルの値を抜き出したいです。 例えば、Aという名前定義した範囲があるとします。 AはA1セル~A10セルの範囲です。 そして、たとえいばA3セルの値を取得したい場合。 名前定義した範囲を使ってどのように表現すればよいでしょうか?

  • セルの値を参照して名前を定義する方法

    A列  B列 a    ああああ b   いいいい b   うううう b   ええええ c   おおおお c   かかかか d   きききき d   くくくく d   けけけけ d   ここここ d   ささささ このような配列でデータが存在します。 A列の文字を名前にしてB列に名前を定義しようとしています。 例えばああああという文字列にaという名前を定義したいのです。 いいいい、うううう、ええええにはbという名前を定義したいのです。 A列の同じデータの数が決まっていないので Dim cnt As Long 'A列の同じ値の数 Dim tName As String 'A列の値 cnt = WorksheetFunction.CountIf(ActiveSheet.Range("A1:B500"), tName) という関数を探してきたので、これでA列の同じ値のセルの数を取得しようと思います。 名前の定義はマクロを記録したところ・・・ ActiveWorkbook.Names.Add Name:="a", RefersToR1C1:="=Sheet1!R2C2:R2C2" を得ました。 この後どのようにしてプログラムを組み立てたらいいでしょうか。 よろしくお願いします。

  • エクセル2003マクロvba名前の定義

    excelエクセル2003のvbaの質問です yy列の最下行をxxとします yy列の名前の定義を馬とします zz列の名前の定義を肉とします 列番号・行番号を用いず、肉2行目から肉xx行目までオートフィル するマクロの構文を教えてください xxの値は変動するのでxxの値を取得する形にしてください dimとか使わず1行で収まる構文でお願いします

  • Excel VBA で条件を満たしたセルの値を別のシートに貼り付けるには?

    VBA初心者です。700行くらいあるリストの中から所属別の名簿を作りたいのですが、マクロを使えば簡単に出来ますか? データは、 A列にNO.、B列に氏名、C列に所属 となっていて、C列の所属ごとにSheet2,Sheet3・・・にB列の氏名だけの名簿を作りたいのです。 例えば、C列が”総務課”の人の氏名(B列)をSheet2のCell("A2")から行方向に、C列が”会計課”の人の氏名はSheet3のCell("A2")から行方向に という感じです。 Do~Loop を使ってみたり、If~Then を使ってみたりするのですがうまく貼り付けられません。 データの最終行が変化するので範囲の指定もよく分かりません。 どなたか教えて下さい。

  • VBAでセルに値が入ったときにイベントを起こしたい

    VBAでタイトルのことをやりたいのですがどうやったらいいのか全く思いつきません。どなたかヒントをいただけないでしょうか? B列の10行目から2000行までの間限定で、5行ごとのセルに値を入れたときに動くようにしたいんです。 例としてB10に値が入ったらA10から下に連番をふります。(1から5) B15に値が入ったらその続きを入れたいんです(6から10) どのようにしたらいいでしょうか?

  • VBAでi行j列ずれたセルの値

    VBAでセルA1にTESTという名前を定義しているとします。 セルA1はRange("TEST")で値を取得できますが、 セルA1からi行j列ずれたセルの値はどうやって取得できるのでしょうか? 今までは、Cells(1+i,1+j)で取得していましたが、 行や列を挿入することもあるので、セルに名前を付けたいと思います。

  • Excel VBA セルの値を変更後にVBA作動

    Excel VBAを活用して、特定のセルの値が変更されたときに、VBA処理を発動させることになりました。 処理といたしましては、C列(3列目)の4行目以下の空白セルに数値を入力するか、セルに入力されている数値を変更した場合にVBAを発動させたいです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row >= 4 Then MsgBox "セルの値が更新されました" End If End Sub 上記のコードを実行してみたところ、3列目(C列)の4行目を選択した段階でVBAが作動してしまいます。 セルの値変更後に作動するようにするには、どう修正すればよろしいでしょうか?

  • Excel VBAでの値の比較

    お世話になります。 Excel VBAでの値の比較方法についてご教授頂きたく存じます。 下記のような値がセルに入っていると仮定しまして、 セルA1とセルG1を比較する セルA2とセルG2を比較する セルB1とセルH1を比較する セルB2とセルH2を比較する 値が違う場合のみ、A列、又は、B列のセルの色を変更したいのですが・・・。 下記例の場合であれば、B1とA2がセルの色が変われば良いです。    A列 B列    G列 H列 1行  1  1     1   2 2行  2  2     3   2 VBAで実現したいと思います。 何卒、宜しくお願い申し上げます。

専門家に質問してみよう