2016-05-17 7 views
2

それぞれの名前付きセルの値を取得したかったのです。私は以下のコードから始めました。 名前でセルを一覧表示することはできますが、正しい値は表示されません。変数n.valueには=Orders!$G$8のような参照がありますが、$ 25はセルに実際に含まれているものなので$ 25を期待していました。名前付きセルをループして値をリストする方法

質問です:

どのように値を取得するには、forループで「名前」コレクションを使用して含まれていますか?

コード:

Sub ListVarsWithValue() 
    Dim n As Name 
    Dim Count As Integer 
    Dim s As String 
    s="" 
    For Each n In ActiveWorkbook.Names 
     s = s + n.Name + "=" + n.Value + chr(10) '<-- n.value not OK 
    Next n 
    MsgBox s 
End Sub 
+1

は、セルの範囲のセルか、ただ1つのセルですか? – Sorceri

+0

良い質問です。この場合、名前は単一のセルを参照します。しかし、それが範囲を参照しているかどうかを知る方法を知っているのは良いことです。たぶんIF文を追加してRefresToRangeをチェックすることができますか? – NoChance

+0

あなたはActiveWorkBookの代わりにActiveSheetではないと確信していますか? – mhyst

答えて

2

名前は、セル範囲の定義された名前を表します。これをあなたのアクティブワークブックで実行すると、あなたはまだ知りませんでしたPrint_Areasとxlfn.countifsと他の奇妙な名前のオブジェクトを引っ張ります。また、範囲が複数のセルの場合、range(n.value).valueは機能しません。各名前に価値を引き出すためには、未知のものが2つあります。

私はあなたのサブに値があることを確認するテストをスローします。これはすばやく汚れていますが、あなたはそのアイディアを得ます。

Sub sdf() 
On Error Resume Next ''shouldn't use this but demonstrates how to get what you need 
For Each n In ActiveWorkbook.Names 
If Not IsError(Range(n.Value).Value) Then ''just try something like this 
Debug.Print n.Name & n.Value & Range(n.Value).Value 
End If 
Next 
End Sub 
+1

これは本当に良い点です。ありがとう。 – NoChance

+2

あなたの答えは私より優れています。 –

3

名の値は、式の形でその増強アドレスであるため..............次のものが必要です:

Sub ListVarsWithValue() 
    Dim n As Name 
    Dim Count As Integer 
    Dim s As String 
    s = "" 
    For Each n In ActiveWorkbook.Names 
     s = s & n.Name & "=" & n.Value & "-" & Range(n.Value).Value & vbCrLf 
    Next n 
    MsgBox s 
End Sub 

enter image description here

ロジックは次のとおりです。

Range(n.Value).Valueは次のようになります。
Range("Sheet4!$B$4").Valueは次のようになります。
bee実際のセルの内容です!

+0

優秀な答え、ありがとう。私はプロパティ名 "Value"が少し誤解を招くと思います... – NoChance

+0

@NoChance最高の答えとして** EoinS **の答えをマークすることを検討してください。 –

+0

します。彼の答えは本当に重要なポイントを指摘した。あなたの発言は美しいです(私は今、他の説明はありません)。どうも。 – NoChance

関連する問題