通し番号を途中で改行してみる
昨日は、ユーザーフォーム上に散らかした42個のコマンドボタンを、じわじわ動かして整列させてみた。
infoment.hatenablog.com
これについて、一工夫行った箇所がある。それは1~42の連番を、6行×7列に並び替えした箇所だ。
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 |
行に関しては、1~7の次に、また1に戻って欲しい。そこで、割り算の余りを活用する。
単純に7で割った余りにすると、7の時に余りが0になって都合が悪い。
そこで予め1を引いておき、7で割った余りを求め、そこに1を足してみる。
これで、1~7がきれいに循環するようになった。
同時に、8番目でカウントアップする仕掛けが必要だ。こちらは、7で割って小数点第一位を切り上げてみた。
これで、行についても準備が整った。
ところで先日、こちらで「多段階配列(ジャグ配列)」の存在を初めて知った。
www.excellovers.com
なんと、配列の中に配列を設定できるという。もともと、特に座標のような値は、例えば原点の場合
- x=0
- y=0
とするより、
- 座標(0)(0,0)
と表したほうがしっくりくる。今回で言えば、このような感じか。
(1,1) | (2,1) | (3,1) | (4,1) | (5,1) | (6,1) | (7,1) |
(1,2) | (2,2) | (3,2) | (4,2) | (5,2) | (6,2) | (7,2) |
(1,3) | (2,3) | (3,3) | (4,3) | (5,3) | (6,3) | (7,3) |
(1,4) | (2,4) | (3,4) | (4,4) | (5,4) | (6,4) | (7,4) |
(1,5) | (2,5) | (3,5) | (4,5) | (5,5) | (6,5) | (7,5) |
(1,6) | (2,6) | (3,6) | (4,6) | (5,6) | (6,6) | (7,6) |
以上を踏まえて昨日は、1~42までの連番を多段階配列に変換し、ボタン設置用の座標指定に利用したわけで。
Private Property Get Locate() As Variant Dim seq(1 To 42) As Variant Dim i As Long For i = 1 To UBound(seq) seq(i) = Array(Left_Start + ButtonSize * ((i - 1) Mod 7), _ Top_Start + ButtonSize * WorksheetFunction.RoundUp(i / 7, 0)) Next Locate = seq End Property
解説というほどの解説ではないけれど、参考まで。