例えばこんな説明の仕方があるでしょう。
■説明例
D4:U9までのセルを、3個ずつグループ番号をつけるとします。
D4:F4 が 第1グループで、G4:I4 が第2グループです。
以下同様にして、S9:U9が第36ブループです。
実行したいのは、N64セル以下の情報をもとに、グループ単位で順序を入れ替えて、
D14からU19の範囲内に転記することです。
N64:S68までのセル範囲に、転記元のグループ番号を入れてあります。
N O P Q R S
63 2 1 4 3 5 6
64 8 7 10 9 11 12
65 14 13 16 15 17 18
66 19 20 21 22 23 24
67 26 25 28 27 29 30
68 32 31 34 33 35 36
例えば、N63の2というのは、第2グループの3セルを、
D14:U19の第1グループに転記してください、と言う意味です。
このようにして、グループ単位でシャッフルしたいと思っています。
どのようにしたらよいでしょうか。
想定結果は次のとおりです。
【D4:U9】(転記元データ)
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 43 44 45 46 47 48 49 50 51 52 53 54
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
【D14:U19】(転記先への転記結果)
4 5 6 1 2 3 10 11 12 7 8 9 13 14 15 16 17 18
22 23 24 19 20 21 28 29 30 25 26 27 31 32 33 34 35 36
40 41 42 37 38 39 46 47 48 43 44 45 49 50 51 52 53 54
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
76 77 78 73 74 75 82 83 84 79 80 81 85 86 87 88 89 90
94 95 96 91 92 93 100 101 102 97 98 99 103 104 105 106 107 108
■コードは以下です。
Sub test()
Dim j&, j2&, k&, k2&, v&, r0&, c0&, r&, c&
For j = 1 To 5
j2 = j + 62
For k = 1 To 6
k2 = k + 13
v = Cells(j2, k2) '転記元index
r0 = Int((v - 1) / 6) + 4 '転記元行番号
'提示例では r0 = j + 3でも可?
c0 = ((v - 1) Mod 6) * 3 + 1'転記元列番号
r = 13 + j '転記先行番号
c = 3 * (k - 1) + 4 '転記先列番号
Cells(r0, c0).Resize(1, 3).Copy Cells(r, c)
Next
Next
End Sub