[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『cellsにつき、少々混乱しています。』(snb1001)
おはようございます。いつもお世話になっております。 さて、今日の質問は二つです。
Sub cellsにつき()
Dim r As Range Dim adr1 As String '※1 Set r = Range("b6:e9") adr1 = r.Cells(0, 1).Address(False, False) '※2 End Sub
※1 定義につき:なぜ、adr1は「Range」にすると走らないのに、文字列「String」にすると走るのか?
イミディエイトウィンドウで「adr1」をみると「b5」なので 「範囲」だと思うのですが・・・。
※2 cellsのカッコ内の順番;cells(0,1)をcells(1,0)に変えてイミディエイトウィンドウで「adr1」をみると「A6」でした。このことよりcellsのカッコ内は(列、行)の順番となる、と思ったのですがマニュアルなどで見るとcells(行、列)とあります。
少々混乱しています。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
※1 addressプロパティがstring型を返すから
※2 Msgbox Range("A1").cells(1,1).address(false,false)が"A1"だから。
cellsプロパティはoffsetとは違う。
( 佳 ) 2016/09/22(木) 11:27
最初の質問※1について
「adr1」には最初の定義で「文字列」としか教えていないので
イミディエイトウィンドウで見る「b5」はあくまでも文字列ですよね。
ところが「adr1 = r.Cells(0, 1).Address(False, False)」のところの
「.Address(False, False)」(これがプロパティーですか?)を読み取って
内部で「アドレス」に読み替えている、ということでしょうか。
もう一つの質問の※2について
cellsとoffsetの違いがあることは理解できました。
まだよくわかっていないのは
「adr1 = r.Cells(0, 1).Address(False, False)」とすると行を一つ上がった「B5」
を指しますが、「adr1 = r.Cells(1, 0).Address(False, False)」とすると列が一つ
左に動きました。
このことから、自分は「r,cells(△、○)とあったら△は列方向、○は行方向だな」
と理解したつもりでいました。つまり、列、行の順番だな、と。
ところがマニュアルには「cells(○、△) で、○は行、△は列 の順番になっていました。
実物のマクロが先に書いたものです。マニュアルと実際のマクロの動きが違っている・・・?
(snb1001) 2016/09/22(木) 12:17
>内部で「アドレス」に読み替えている、ということでしょうか。
そうです。
アドレス文字列 です。
・型はあくまで形式(この場合、文字列)を示したものです。
・それがどんなものを意味するか(アドレスを示す文字列だとか)は関係がありません。
後半。
余りむずかしく考えずに、
Cells(2,3) は、C2セルのことだ、ということから意味を読み取ってください。
>「adr1 = r.Cells(1, 0).Address(False, False)」とすると列が一つ 左に動きました。
指摘がありましたようにCells(m,n)のm,nはいずれも 1 が起点を示します。
0 = 1 +(-1) と考えれば、列が左に動く意味がわかるでしょう。
(γ) 2016/09/22(木) 12:37
なお、今回、自分の誤りの原因がやっとつかめました。
cells(0,1)とあったとき
「0(ゼロ)」が「移動しない方向」だとばかり思っていましたが
実は
「1」が「移動しない方向」だったんですね。
「cellsプロパティはoffsetとは違う。」の意味もようやく解りました。
思えば「offset」のときに
ActiveCell.Offset(1, 0).Select
はアクティブセルから行方向に1、つまり1つ下のセルを選択
(移動しない方向については省略可能、つまり「ゼロ」)
でしたから、このことと混同していました。
初めて知りました(^_^;)
佳さま
γさま
ありがとうございました。
(snb1001) 2016/09/22(木) 13:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.