- ベストアンサー
VBAでRangeをCellsに変更する際の実行時エラー1004について
- VBAでRangeをCellsに変更する際に、実行時エラー1004が発生することがあります。
- Rangeの場合、セミコロン(;)を使用して範囲を指定しますが、Cellsの場合はカンマ(,)を使用します。
- つまり、Range(Cells(1, 1) & ";" & Cells(10, 1))とするとエラーになりますが、Range(Cells(1, 1), Cells(10, 1))とすると正常に動作します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、「;」(セミコロン)じゃなく「:」(コロン)なので、間違えないようにしてください。 また言わずもがなですが「、」(読点)じゃなく「,」(カンマ)を使います。 致命的に勘違いをしているのは、この部分です(セミコロンはコロンに修正済み) >Range(Cells(1, 1) & ":" & Cells(10, 1)) この「Cells(1, 1) & ":" & Cells(10, 1)」の書き振りは、cells(1, 1)に記入されている内容と、コロンと、cells(10, 1)に記入されている内容を、文字列結合しているだけです。 実例でトレースしてみます。 cells(1, 1)に「123」と記入してあるとしましょうか。 cells(10, 1)は空っぽだったとしましょうか。 「Cells(1, 1) & ":" & Cells(10, 1)」は単なる文字列結合で、「123:」という文字列を計算するだけだということです。 従ってあなたの命令は range("123:") を計算させていることとなり、間違った指定となってエラーになります。 敢えてその書き振りを採用するとすれば、range()の中に意図通り「A1:A10」という文字列を計算させてやらないとなりません。 例: range(cells(1, 1).address & ":" & cells(10, 1).address) rangeは次の2通りの使い方をすることができます。 使い方その1: range("A1").select range("A1:A2").select range("A1,A5").select range("A1,A4,A6").select range("A1:A10,C1:C10").select range("B1:D10 A3:E4").select これらの書き振りは、結果して1つのセルや1つのセル範囲、複数のセル範囲を取得しますが、rangeの使い方としては全く共通です。 結果の如何によらず、この書き振りでは「””で囲われた一つの文字列」をrangeの中にいれて利用します。 使い方その2: range(range("A1"), range("A10")).select range("A1", "D1").select range(cells(1,1), cells(10, 1)).select range(cells(1, 1), range("C10:D12")).select これらの書き振りは、「range(セルその1, セルその2)」という構文で2つのセル(セル範囲)を与えることで、結果して「与えられた2つのセル範囲を対角とする1つのセル範囲」を取得します。 「セルその1」や「セルその2」の部分で使う「セルの指定の仕方」は、cellsを使ってもrangeを使っても何を使っても関係ありません。
お礼
ありがとうございました。