印刷範囲をR1C1形式の文字列変数で設定するには?

Question 39.3 Previous Next
はじめまして,Yoshiといいます。いきなりなんですが、教えてください。
印刷の範囲指定で範囲のCol位置をアルファベット指定ではなく、数字で指定することはできないんでしょうか?
印刷指定範囲を  
ActiveSheet.PageSetup.PrintArea = "R4C4:R5C5"  としてもエラーが出るんですが、どうしたらよいのでしょうか? ちなみにColの表記を
    With Application
        .ReferenceStyle = xlR1C1
    End With
にして上の範囲指定をしてもエラーがでました。どうか知恵をお貸しください。お願いします。
Answer   Copyright (C) 2001.2.6 永井善王
印刷範囲を設定した直後に印刷してよいならば、[Macro]-[印刷]のページの[1~2) 印刷、プレビュー]に掲載されている次のマクロが参考になります。
'------------------------------------------------------------------------------
Sub 選択した部分を印刷する()
    部数 = 1                                    '印刷部数を指定する ※1
    Range("A1:B4").Select                       '範囲を選択する ※3
    Selection.PrintOut Copies:=部数             '指定部数を印刷する
End Sub
'------------------------------------------------------------------------------
R1C1形式で範囲指定するためには、3行目のコードを次のように書きかえます。
    Range(Cells(4, 4), Cells(5, 5)).Select
この方法は印刷範囲は設定していませんが、同じ結果が得られます。
印刷範囲を設定するだけで印刷しない場合は、
[Macro]-[印刷]のページの[3) 印刷範囲設定]に掲載されている次のマクロのように書きます。
'------------------------------------------------------------------------------
Sub 印刷範囲を変数で設定する()
    印刷範囲 = "$A$1:$E$30"                     '※1
    ActiveSheet.PageSetup.PrintArea = 印刷範囲
End Sub
'------------------------------------------------------------------------------
2行目で「印刷範囲」という変数に、印刷範囲として設定して欲しいセル範囲をセットしています。3行目のコードが実行されると、実際に印刷範囲が設定されます。
講義 印刷範囲を設定するための PrintAreaプロパティは、Excel VBAの仕様では、A1形式の文字列で記述することになっているようです。
あなたが試された ActiveSheet.PageSetup.PrintArea = "R4C4:R5C5" という書き方は、このルールを守っていないために、Excel95で実行すると「マクロ シートに対する参照を設定してください」のエラーが出ると思います。そして、Excel2000や MaintoshのExcel98では、マクロの実行すらできないでしょう。

では、どうすれば良いかですが、いろいろな方法が考えられます。
ここでは、Addressプロパティによって Rangeオブジェクトの範囲参照を取得する方法で考えてみましょう。
'------------------------------------------------------------------------------
Sub 印刷しないで印刷範囲を設定するだけ_間接指定()
    Worksheets("SSS").Activate
    ActiveSheet.PageSetup.PrintArea = ""
    Range(Cells(4, 4), Cells(5, 5)).Select
    With Selection
        行数 = .Rows.Count
        列数 = .Columns.Count
        印刷範囲 = .Cells(1, 1).Address & ":" & .Cells(行数, 列数).Address
    End With
    ActiveSheet.PageSetup.PrintArea = 印刷範囲
End Sub
'------------------------------------------------------------------------------
4行目: 印刷範囲として設定したいセル範囲を選択する
6行目: 選択されたセル範囲の行数を取得する
7行目: 選択されたセル範囲の列数を取得する
8行目: アクティブセルのアドレスと、取得しておいた行数と列数が示すセルのアドレスを Addressプロパティで取得した値を、変数「印刷範囲」にセットする
10行目: 変数「印刷範囲」の値で印刷範囲を設定する

「一生懸命読んだのに何のことかさっぱりわからない」と思われるかも知れません。ポイントは 8行目です。まずは、上記のマクロを試してみてください。
いずれ暇ができたら、もう少し詳しく解説するつもりです。
なお、こんな難しそうな方法よりも、1をAに変換し、2をBに変換、つまり、数字をアルファベットに変換して文字列を作り出す方法でやりたいと思ったら、この機会にチャレンジしてみると良いでしょう。

Excel VBA Macro