プロが教えるわが家の防犯対策術!

通常、マウスでセル範囲を指定して名前の定義をしますが、
以下のような場合にVBAで自動化できないでしょうか?

例えば以下の様なデータの場合、
------------
C列、D列
中項目、小項目 ←2行目は項目名
A、A-1     ←3行目以降がデータ
A、A-2
B、B-1
B、B-2
B、B-3
B、B-4
B、B-5
C、C-1
C、C-2
C、C-3
        ←空になったら終了。
------------
C列の同じ文字の範囲毎に、C列の値が名前、D列データが参照範囲という処理を値が無くなるまで繰り返す。
みたいな動きは出来ないでしょうか?
途中に空白はないものとし、ABBAのように同じ文字がまたがる事もないものとします。
気にしてるのは、2回目に実行した時、同じ名前設定が重複するので、
同じ名前なら一旦削除するのか修正できるのか、、、まだよく分かってないんですが。
詳しい方、よろしくお願いいたします。

A 回答 (3件)

No2です。



>同じ名前なら一旦削除するのか修正できるのか、
修正するのが正しい方法と思いますが、新たに追加登録しても同じ名前がある場合は上書きされるようです。

以下、ごく簡単な一例です。
・ご提示の条件が必ず成立していると仮定しています。
・値のチェック等は一切行っていませんのでご注意。

Sub Sample()
Dim r As Range, tmp As Range
Const sht = "Sheet1" ' 対象シート名

Set r = Worksheets(sht).Cells(1, 3)
Set tmp = r
While r.Text <> ""
 If r.Offset(1).Text <> tmp.Text Then
  ThisWorkbook.Names.Add Name:=tmp.Text, _
  RefersTo:="=" & sht & "!" & Range(tmp, r).Resize(, 2).Address
  Set tmp = r.Offset(1)
 End If
 Set r = r.Offset(1)
Wend
End Sub
    • good
    • 0

こんばんは



もしも、ご質問が別質問のプルダウンの関連であるのなら・・・
https://oshiete.goo.ne.jp/qa/12597401.html

そちらに名前の定義を使用しない方法を提案しておきました。

※ 違う件でしたなら、ごめんなさい。 無視してくださるようお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます。ご推察の通りです^^;
かなり急いでるので、関数のみで解決する方法、
ついでにVBAで名前の定義をメンテナンスする方法、両側面を同時進行で調べておりました。
関数で実現不可だったら、VBA策に進路変更・・・という猶予がなく恐縮です。
別質問に関わらず、VBAでの方法も知っておけば近い将来役に立ちそうです。

お礼日時:2021/09/28 18:29

「名前定義」作成は、WorkBookオブジェクトまたはWorkSheetオブジェクトのNamesコレクションにNameオブジェクトを追加することで行う。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!