[[20180511093514]] 『R1C1形式にする理由』(hiro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『R1C1形式にする理由』(hiro)

お世話になっております。

Range("A3").CurrentRegion.Select
'データベース範囲の選択
ActiveWorkbook.Names.Add Name:="家計簿",RefersToR1C1:=Selection
'データベース範囲に名前を定義

ここでわざわざR1C1形式で定義するのは、何か理由があるのでしょうか。
よろしくお願いします。

< 使用 Excel:unknown、使用 OS:unknown >


もう一つ、失礼します。

この後、Activesheet.PageSetup.PrintArea = "家計簿"です。

PageSetup.PrintArea プロパティのヘルプでは、印刷するセル範囲を A1 形式の文字列で設定するとありますが、これはR1C1形式での定義とバッティングするようなものではないのでしょうか。

関係があるのは、ヘルプの後半でしょうか。値の取得や設定が可能で、文字列型 の値を使用するという内容です。

よろしくお願いします。
(hiro) 2018/05/11(金) 09:58


 こんにちは ^^
じーさん はよくわからないので、A1の絶対参照、よく使います。 RefersTo:="=$A$1"
数えるのに10本の指で足らなくなる。。。。^^;;;
無理にR1C1、使わなくてもよいのでは。
用途に合わせてというか。。。
http://www.moug.net/tech/exvba/0050159.html
PageSetup.PrintArea は ?

 双方とも他の方の回答をお待ちください。
でわ

(隠居じーさん) 2018/05/11(金) 10:59


R1C1形式は、大昔の表計算アプリで慣れた人のための互換機能の意味合いが強いので、特に意味はないと思います。列も数字で指定できるので、列数をマクロで得て指定するような、多数列を指定したいときに利用すると便利です。 表示についてはオプションでモード切替できるので、判りやすい方を使うと良いでしょう。(Excelが覇権を握ることができたのは、A1形式が判りやすかった事が大きいと考えていますので、普段はA1形式をお薦めします) 自動記録で RefersToR1C1 が使われたのでしょうけど、RefersTo でA1形式指定する方が判りやすいでしょう。

PrintAreaについては、ヘルプに書いてある通り、プロパティで指定しようとすると、A1形式しか受け付けてくれません。 Excelがそう作られているから、仕方ないです。 しかしながら、これを実行した結果は名前定義が追加されますが、こちらの表示はどちらの表示形式かで変わってきますよね。 何でR1C1指定できないの?、と思っても、そう作られたからとしか答えようがないです。 デフォルトはA1形式だからでしょうね。 追求しても大して意味はないので、ありのまま受け入れて使えばよいかと思います。
(???) 2018/05/11(金) 11:10


あー、もしかして以下の例を見れば、やりたい事が実現できますかね?

新規:
ActiveWorkbook.Names.Add Name:="Print_Area", RefersToR1C1:="=Sheet1!R1C1:R6C2"

変更:
ActiveWorkbook.Names("Print_Area").RefersToR1C1 = "=Sheet1!R1C1:R8C2"
(???) 2018/05/11(金) 11:22


お二人とも、ありがとうございます。
コードの方は調べる必要があるので後で確認します。
その前に補足です。

1点目は書き忘れです。質問のコードは私の書いたものではなく、引用です。

2点目はPrintareaについて。
たぶん、聞きたいことがうまく伝わっていませんね。

PrintareaがR1C1形式で指定できない理由を知りたかったわけではないのです。
質問文に記載したコードでR1C1形式で定義をしていますよね?
そして、R1C1形式で定義された"家計簿"をPrintAreaに設定しますよね。
ところで、ヘルプには、PrintAreaは A1 形式の文字列で設定するとありますよね。R1C1形式で定義された"家計簿"が、A1形式の文字列で設定できるものに該当するのかどうかがよくわからなかったのです。

色々勘違いしていると思うので、これでも伝わらない質問かもしれませんが。すみません。

(hiro) 2018/05/11(金) 11:40


んー、こう書きたいということですかね?
    ActiveSheet.Range("A3").CurrentRegion.Select
    ActiveWorkbook.Names.Add Name:="家計簿", RefersToR1C1:=Selection
    PageSetup.PrintArea = ActiveWorkbook.Names("家計簿").RefersTo

でもそれは、以下のように書けば、名前定義が1つ不要になるわけで…。 A1形式制限のあるPrintAreaプロパティは使わなくとも良いのではないかと思います。

    ActiveWorkbook.Names.Add Name:="Print_Area", RefersTo:=ActiveSheet.Range("A3").CurrentRegion

(???) 2018/05/11(金) 11:55


ありがとうございます。
まだコードを完全に読めていないので自信がないですが、うまく伝わらなかったみたいですね。

printareaの疑問は晴れていませんが、printareaを使わない例も挙げて下さっているので、ひとまずはそちらを理解の上使いたいと思います(よくわからないままprintareaを使うわけにはいかないので)。

返信にも反応してくださりありがとうございました。
(hiro) 2018/05/11(金) 17:38


 >printareaの疑問は晴れていませんが

名前の定義で設定したセル範囲は、
R1C1形式で設定しようと、A1形式で設定しようと、セル範囲はセル範囲であり、
そのアドレスは、
セル範囲からのプロパティで必要な情報を取り出すだけです。
設定したアドレスは勝手にエクセル君が変換します。

なにを心配しているかよくわかりませんが、
定義されたセル範囲をセル範囲として扱うなら、
どんな方法で指定されたとしても、同じセル範囲です。

(まっつわん) 2018/05/12(土) 08:19


 >ここでわざわざR1C1形式で定義するのは、何か理由があるのでしょうか。 
あ、たまたまマクロの記録ではR1C1形式で記録される仕様になっているだけで、
A1形式でも定義できるようになっています。
詳しくはヘルプを参照してください。

>そして、R1C1形式で定義された"家計簿"をPrintAreaに設定しますよね。
ぼくなら、
PageSetup.PrintArea = Range("A3").CurrentRegion.Address
としますけど。。。
印刷範囲の定義をすることがテーマなら、
名前の定義を意識する必要はないと思います。
ヘルプに書いてある通り、
セル範囲をA1形式のアドレスの文字列で設定するだけです。
(まっつわん) 2018/05/12(土) 14:04


まっつわん様
>設定したアドレスは勝手にエクセル君が変換します。
つまりPageSetup.PrintArea プロパティのヘルプの説明は…
PageSetup.PrintArea プロパティが、「設定したアドレス」を、印刷するセル範囲としてA1 形式の文字列で設定するということなんでしょうか。A1形式の文字列でないと、印刷するセル範囲として設定できないというわけではなくて。
この説明が伝わるかどうかは定かでないですが、とりあえず、印刷範囲の指定はr1c1だろうとa1だろうと問題ないということは承知しました。色々試してみます。

PageSetup.PrintArea = Range("A3").CurrentRegion.Address そういうことですよね。ありがとうございます。

繰り返しになりますが、質問のコードは私の書いたものではなく、引用です。マクロの記録でもありません。念のため…。
(hiro) 2018/05/12(土) 14:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.