Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
RangeとCellsが解りません
投稿日時: 26/03/14 16:07:49
投稿者: 1946

セルに背景色を付けたいのですが難儀しています。
下記のコードで「アプリケーション定義またはオブジェクト定義のエラーです。」になります。
宜しくお願いします。
  Worksheets("all number").Range(Cells(r1, c1)).Select
      With Selection.Interior
          .Pattern = xlSolid
          .PatternColorIndex = xlAutomatic
          .Color = 65535
          .TintAndShade = 0
          .PatternTintAndShade = 0
      End With

回答
投稿日時: 26/03/14 16:36:24
投稿者: 半平太

>セルに背景色を付けたい

対象セルは、ここで指定しているお積りなのでしょうね。
       ↓ 
      Range(Cells(r1, c1))

でも、指定方式が正しくないのでエラーになった、と言うことだと思います。
 
実際、どのセル(ワンセル? 範囲? 飛び飛び?)が対象なのですか?
それが分からないとアドバイスしようがありません。
(特殊なケースでは、その指定で動くこともありますので)

回答
投稿日時: 26/03/14 20:07:28
投稿者: simple

 既に指摘いただいているところですが、補足させていただきます。
 (1)
  二つのセル範囲を指定することによって、その間のセル範囲を指定する場合は
     Range(Cells(r1, c1),Cells(r2,c2))と書きますが、
  単一のセルの場合は、
     Range(Cells(r1, c1))
  と書くとNGです。
     Cells(r1, c1)
  だけでOKです。
 
  単一セルのケースと考えると、

   With Worksheets("all number").Cells(r1, c1).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
 などと書きます。
  (2)
  Worksheets("all number").Cells(r1, c1).Select と書いた場合、
  Worksheets("all number")がアクティブになっていないとエラーになります。
  シートをアクティブにしてから実行するか、
  むしろSelectは書かない上記のような書き方がよいと思います。
   
  特に、マクロ記録では
  ・・・・.Select
  Selection.・・・・
  と記録されることが多いのですが、これをそのまま採用するのは、次の二つの理由から、
  できるだけ避けたほう(選択しない方法を選ぶ)がよいと思います。
   
  ・コードが冗長になって、可読性が低下します。
     (特に複数の場合、頻繁にシートの選択状態を変えると、
       現在どのシートが選択されているかを常に意識しなければならず、分かりにくさが生じます)
  ・Selectはそれなりに負荷があるので、実行効率の面からも推奨されません。
   
  これから多くのコードを読まれることになると思いますが、Selectしないで書く工夫を
  皆さんされていますので、その点も注目されるとよいと思います。

投稿日時: 26/03/15 13:17:55
投稿者: 1946

早速のご回答を有り難う御座いました。
解決致しました。