2017-01-22 9 views
1

Range.Cellsプロパティで混乱します。 MSNのドキュメントによると:Range.Cellsプロパティの構文

Range.Cells Property (Excel)

構文はさらに、コードの下の例では、まだexpression .Cells

ことになっていることは、この構文は以下のが、関数としてCells使用しているようですされていません。

Worksheets("Sheet1").Activate 
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True 

答えて

3

ドット.がまたはRangeに先行する場合、これはunquali fied範囲参照; ExcelのVBAは、現在アクティブなシートに自動的にラップします。

Cells(1, 1) <==> Activesheet.Cells(1, 1) 
Range("A1") <==> Activesheet.Range("A1") 

しかし、これは悪い習慣とみなされ、それがランダムな問題とバグにつながるため、それは避けるべきです。コードの動作は、ユーザーが現在ExcelのGUI上にどのシートがあるかによって異なります。経験豊富な開発者は常にそれをできるだけ避け、修飾範囲を使用してください。すなわち

Worksheets("someSheetName").Cells(1, 1)です。

+0

'Cells'は実際にはメソッドではなく、与えられた例では' Range'プロパティです。アクティブな 'Range'はどれですか? 'Range'はちょうどアクセスしようとしているので、そうではないようです。アクティブな' Range'がない場合、 'Cells'プロパティを使用するのはどういう意味ですか? – Roland

+1

プロパティは特別なタイプのメソッドであり、後者は一般にクラスのすべてのコール可能なもの(VBAサブ、関数、プロパティなど)を指定するためにOOPで使用されます。 2番目の質問では、あなたの例では、 'Range'と' Cells'の両方がExcel VBAの*グローバル変数*とみなされる 'ActiveSheet'を参照しています。 –

+0

。それでもリンクされたMSNのドキュメントは、コードスニペットの 'Cells'プロパティが実際に' Range'ではなく 'ActiveSheet'を参照しているので混乱します。 – Roland

関連する問題