Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3824 / 13645 ツリー ←次へ | 前へ→

【59967】Rows.Countを用いるには にしもり 09/1/21(水) 18:14 質問[未読]
【59968】Re:Rows.Countを用いるには ponpon 09/1/21(水) 18:19 発言[未読]
【59969】Re:Rows.Countを用いるには にしもり 09/1/21(水) 18:32 お礼[未読]
【59970】Re:Rows.Countを用いるには ponpon 09/1/21(水) 20:13 発言[未読]
【59978】Re:Rows.Countを用いるには Jaka 09/1/22(木) 11:16 発言[未読]
【60017】Re:Rows.Countを用いるには にしもり 09/1/23(金) 17:29 お礼[未読]

【59967】Rows.Countを用いるには
質問  にしもり  - 09/1/21(水) 18:14 -

引用なし
パスワード
   一寸混乱していますので教えてください。
シートsは、
   A列
1行 Title
2行 あああ
3行 いいい
4行 (ブランク)
です。

 (1)Dim v
  
  With Workbooks("sam.xls").Worksheets("s")

    v = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Value

   End With
  vの値として入るのは”いいい”ですか。
 
 (2)Dim v
  
  With Workbooks("sam.xls").Worksheets("s")

    v = .Range("A2", .Cells(.Rows.Count, "A").End(xlDown)).Value

   End With

  vの値として入るのは”いいい”ですか。

  もしそうなら(1)と(2)は無差別でしょうか。

【59968】Re:Rows.Countを用いるには
発言  ponpon  - 09/1/21(水) 18:19 -

引用なし
パスワード
   >シートsは、
>
>   A列
>1行 Title
>2行 あああ
>3行 いいい
>4行 (ブランク)
5行 ううう

で 試してみればどうでしょう?

【59969】Re:Rows.Countを用いるには
お礼  にしもり  - 09/1/21(水) 18:32 -

引用なし
パスワード
   ▼ponpon さん:
考え方ヒントありがとうございます。
わかりました!
A2:A5を取得しているのですね。

いくつかケースを調べたら、
(1)は2行目からしてブランクのとき、Title行を含んでしまいました。
(2)は2行目からしてブランクのときにも、Title行を含まずに済みました。


ありがとうございました。

【59970】Re:Rows.Countを用いるには
発言  ponpon  - 09/1/21(水) 20:13 -

引用なし
パスワード
   解決したならよいのですが・・

(1)の場合
 .Cells(.Rows.Count, "A").End(xlUp)は、最終行から(2003の場合は65536行)から
上に見ていって初めて値が入っているセルを参照しています。

(2)の場合
 .Cells(.Rows.Count, "A").End(xlDown)は、最終行から下に見ていって値の
 入っている最後のセルを参照しています。
ですからA65536のセルになると思います。つまり意味がない。
 普通は、Cells(2, "A").End(xlDown)として、A2から下に見ていって、値の入っているセルを参照するのではないでしょうか?

 私は、こんな風に解釈しているのですが・・・
 範囲指定したセルが全部がブランクの時の挙動は少し違うようですが・・・

【59978】Re:Rows.Countを用いるには
発言  Jaka  - 09/1/22(木) 11:16 -

引用なし
パスワード
   ▼にしもり さん:
>    v = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp)).Value
???

v = .Range(.Range("A2"), .Cells(.Rows.Count, "A").End(xlUp)).Value

v = .Range("A2", .Cells(.Rows.Count, "A").End(xlUp).Address).Value

【60017】Re:Rows.Countを用いるには
お礼  にしもり  - 09/1/23(金) 17:29 -

引用なし
パスワード
   ▼ponponさん、 Jaka さん:

ご指摘ありがとうございます。
ご指摘は納得できましたので、

Dim v
  
  With Workbooks("sam.xls").Worksheets("s")

    v = .Range("A2", .Cells(2, "A").End(xlDown)).Value

   End With

とし、期待通りに作動しました。

ただ、ponponさんのご指摘を反映せずともうまくいくのは何故なのかは、解明できていません。

3824 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free