[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コードの意味』(初心者)2007
いつも参考にしています。
[[20100512090827]]『移動の条件』(ごん)さんの 質問で
momo様の回答で
Set myRng = Application.Intersect(Selection.EntireRow, Columns("A:H")) a = myRng.Row Mod 22 Mod 14 b = (myRng.Row + myRng.Rows.Count - 1) Mod 22 Mod 14
a と b が 意味が理解できません。
どなたか、易しく解説お願いします。
Modはわかりますか? a = (myRng.Row Mod 22) Mod 14 b = ((myRng.Row + myRng.Rows.Count - 1) Mod 22) Mod 14 (alt)
myRngには選択したセルの行全体かつA:H列の範囲が入っています。 たとえばC3:C7を選択したとすると、A3:H7がmyRngの範囲です。
aではmyRng.Rowを使っていますが、それはmyRngの範囲の先頭の行です。 例ですと3という数字です。
bはmyRng.RowのほかにmyRng.Rows.Countを使っていますが myRng.Rows.CountとはmyRngの行数の事ですので 例ですと5が返ります。 myRng.Row + myRng.Rows.Count - 1ですので3+5-1=7が返りますね。 つまりmyRngの範囲の最後の行をあらわしています。
aもbもModを使っていますので x Mod 22 はxを22で割った余り さらにその余りを14で割った余りを出しています。 この結果が0になったとき、xは22か14の倍数である事になるので判定に使っています。
たとえば、こんなコードを走らせてみると解りやすいですかね?
Sub test() Range("a1:c1").Value = Array("行", "22の倍数で0", "22の倍数又は14の倍数で0") Range("a2:c2").Value = Array("x", "x Mod 22", "x Mod 22 Mod 14") For i = 1 To 50 Cells(i + 2, 1).Value = i Cells(i + 2, 2).Value = i Mod 22 Cells(i + 2, 3).Value = i Mod 22 Mod 14 Next i Columns.AutoFit End Sub
(momo)
momo様
alt様に指摘されたModがひっかかっていたのですが、コードを実行して解りました。
丁寧な説明有り難うございました。(初心者)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.