2015-01-07 1 views
5

私はこの関数を使用して、クローズドブックから値を取得しています。このコードのこの第8行では、なぜ「A1」が使用されているのか理解できません。その8行全体で何が起こっているのですか?私はxlR1C1引数も混乱しています。VBAのGetValue関数でセル "A1"が使用されているのはなぜですか?

Private Function GetValue(path, file, sheet, ref) 

    Dim arg As String 
    If Right(path, 1) <> "\" Then path = path & "\" 
    If Dir(path & file) = "" Then 
     GetValue = "File Not Found" 
     Exit Function 
    End If 
    arg = "'" & path & "[" & file & "]" & sheet & "'!" & _ 
     Range(ref).Range("A1").Address(, , xlR1C1) 
    GetValue = ExecuteExcel4Macro(arg) 

End Function 
+0

完全にはわかりませんが、 'ref'がセルのコレクションなので、常に値を返します。 – NickSlash

+0

どのような入力が必要なのかを知るには、 'ExecuteExcel4Macro()'コードを見る必要があります。しかし、 '.Address()'の後の構文はこれです:http://msdn.microsoft.com/en-us/library/office/ff821207%28v=office.15%29.aspx – Chrismas007

+0

ExecuteExcel4Macroは - > http:///msdn.microsoft.com/en-us/library/office/ff193589%28v=office.15%29.aspx 今でもExcel 4マクロを使用している場合は...アップグレードする時間がかかるかもしれません。 – Tmdean

答えて

1

xlR1C1式がどのように機能するかを指定するために使用されreference styleです。このスタイルを使用すると、数式は正常に動作し、見た目とはまったく異なります。 R1C1仕様は、基本的には、セルが文字列名の代わりに行&の列のordineを使用して別々に参照されることを意味します。たとえば、xlR1C1を使用する場合は、=R2C2(row2、column 2)を使用してセルB2にアクセスします。別の例では、セルC10は、=R10C3

と呼ぶことができます。これは、次のようなセル参照を構成しています。(セル参照は、ファイルその中にパス)

='[Myfilename.xlsx]Sheet1'!R1C1 

あなたはarg変数に含まれる文字列を表示するためにデバッガを使用することができます。

1

コードにRange("A1")を追加しても何も表示されません。これを即時ウィンドウに入力すると、予期しない結果が生じることがあります。

?Range("B3").Range("A1").Address 
$B$3 

今、私は$A$1を返すようにすることを期待しているだろうが、機能のこの部分はRange(ref)のアドレスを返すことらしいです。

ReferenceStyle引数を使用してRange.Addressを呼び出すと、これらの結果が生成されます。

?Range("B3").Range("A1").Address(,,xlR1C1) 
R3C2 
+0

単一のセル範囲に対しては何も行いませんが、複数のセル範囲(Range( "C3:H99"))では、左上のセルを返します。 – Tmdean

+1

私は実際に@Tmdeanを学んだだけです。 http://stackoverflow.com/a/27828218/3198973 – RubberDuck

4

Range().Range()Documentation here

Rangeオブジェクトに適用する場合、プロパティはRangeオブジェクトに対するものです。たとえば、セルがC3の場合、Selection.Range("B1")はセルD3を返します。これはSelectionプロパティによって返されたRangeオブジェクトからの相対値です。一方、コードActiveSheet.Range("B1")は常にセルB1を返します。

コードは、1つのセルよりも大きいref範囲を持っている場合、それだけで、その範囲の左上のセルを返すことを保証するために、第2 Range("A1")を使用しています。また、別のSubという名前のExecuteExcel4Macro()R1C1タイプのセル参照を必要とするので、arg文字列をSubに渡すためのアドレスがそのタイプに変換されています。

+0

@shampouyaこれで問題は解決しましたか? – Chrismas007

関連する問題