[[20210831120306]] 『For Each文が一回しかループしない。』(大豆戸太郎) ページの最後に飛ぶ

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

 

『For Each文が一回しかループしない。』(大豆戸太郎)

以下のように範囲に行を指定し、リサイズ後にFor Each文を実行すると1回しかループしません。VBAの仕様でしょうか?

Sub a()
Dim rng As Range, target As Range
Set target = Rows(1).Resize(1, 10)
For Each rng In target

  Debug.Print rng.Address
Next rng
End Sub

< 使用 Excel:Office365、使用 OS:Windows10 >


 仕様と言えば仕様でしょうか
 10セル分回したいのであれば
 Cells(1,1).Resize(1,10)
(qwerty) 2021/08/31(火) 12:35

 >For Each rng In target
 For Each rng In target.Cells
                       ^^^^^^
(seiya) 2021/08/31(火) 12:37

横からですが不思議ですね
TargetがRowsだから行数だけ繰り返す処理になるんでしょうが
TargetのプロパティにRange(もしくはCells)ベースではなくRowsベースですよって情報が入ってるのでしょうか?
(砂糖) 2021/08/31(火) 14:00

 きっとそういうことなんでしょうね

  Debug.Print Rows(1).Resize(1, 10).Count                ' 1
  Debug.Print Range("1:1").Count                         ' 16384
  Debug.Print Range("1:1").Rows(1).Resize(1, 10).Count   ' 1
  Debug.Print Range("A1").Resize(1, 10).Count            ' 10
  Debug.Print Range("A1").Rows(1).Resize(1, 10).Count    ' 1

 セルのループ回すときには、Cellsをちゃんとつけたほうがいいということでしょうか 
(´・ω・`) 2021/08/31(火) 14:27

以下が、参考になるでしょうか。

https://www.relief.jp/docs/excel-vba-single-range-row-range.html
(ハヤシライス) 2021/08/31(火) 14:44


砂糖様、ありがとうございまいた。
VBAの仕様なんですね。Rangeが設定されたプロパティ(Rows)で動作するとは初めて知りました。
ResizeしてもCellでなくRowsなのですね。ちょっと不思議ですが納得しました。
返信が遅れて済みませんでした。
(大豆戸太郎) 2021/09/03(金) 09:30

コメント返信:

[ 一覧(最新更新順) ]


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