2009-03-09 4 views
0

私のスプレッドシートの最初の列はユニークなキーです(データは賢明ですが、Excelとは関係ありません)。もう1つの列には、他の行(その行の一意のキー)へのリンクが含まれています。これらのハイパーリンクを挿入すると、行の順序が時間とともに変化するため、「定義された名前」を指す必要があります。Excelで名前付き参照の作成を自動化するにはどうすればよいですか?私はすべての行の最初のフィールドを参照するようにします

新しい行を挿入するたびに定義された名前を作成する必要はありません。列のテキストを「定義された名前」として自動的に定義する方法はありますか?

これは明らかです。

多くのありがとうございます。

+0

サンプルデータを含む行と列の例が役立ちます。 – shahkalpesh

答えて

0

これが表示されます。 Mike R.私を正しい軌道に乗せてください。ありがとう。

名前には英数字以外の文字を削除する必要があることに注意してください。また、名前を複製すると、古い参照が上書きされます。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If (Target.Column = 1 And Target.Text <> "" And Target.Cells.Count = 1) Then 
     ThisWorkbook.Names.Add _ 
      Name:=StripChar(Target.Text), _ 
      RefersTo:=Target, _ 
      Visible:=True 
    End If 
End Sub 

Function StripChar(s As String) As String 
    With CreateObject("vbscript.regexp") 
     .Global = True 
     .ignorecase = True 
     .Pattern = "[^\dA-Z]" 
     StripChar = .Replace(s, "") 
    End With 
End Function 
2

定義済みの名前をワークシートに限定したい場合は、Workbook.NamesまたはWorksheet.Namesを調べてください。

上記のリンクに示されている例はかなり良いです。あなたの場合、Names.Add()メソッドの 'Name'引数として渡される文字列として使用されるセルにあるRange.ValueまたはRange.Textを使用したいと思うでしょう。

ThisWorkbook.Names.Add _ 
    Name:=Sheet1.Range("A1").Text, _ 
    RefersTo:=Sheet1.Range("A:A"), _ 
    Visible:=True 

上記セットヘッダーセルA1で見つかった値(テキスト)する列Aの定義名:VBAを使用して

それは次のようになります。

希望すると便利です。

マイク

+0

これまでのところ、彼は行を挿入するたびに、または列1の内容を変更するたびに、そのスクリプトをどのように起動させるのですか? – Sparr

+0

ああ、そうです...グリーヴェズ氏は、「列のテキストを「定義された名前」として自動的に定義する方法はありますか?私はそれに答えました。私は、Worksheet_Change()イベントを処理することが問題の一部であることに気づいていませんでした。しかし、彼は次のポストでそれを得たように見える... - マイク –