[[20100512144049]] 『コードの意味』(初心者) ページの最後に飛ぶ

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

 

『コードの意味』(初心者)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)

alt様 有り難うございます。

momo様

alt様に指摘されたModがひっかかっていたのですが、コードを実行して解りました。

丁寧な説明有り難うございました。(初心者)


コメント返信:

[ 一覧(最新更新順) ]


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