1 ね
2 うし
3 とら
4 う
5 たつ
6 み
7 いぬ
8 ひつじ
9 さる
10 とり
11 いぬ
12 い
とデータがありまして、ひとつ飛ばし(例)1-3-5-7-9
はできたのですが、これを下記のようにソートすることはできるでしょうか。
1-3-5-6-8-10-11-12
つまり三番目と4番目、7番目と8番目のみがくっついているように、別の列に抽出するマクロが書きたいのです。
よろしくお願いいたします。
こんな感じでしょうか?
以下では、1列目の内容から、3-4番目、7-8番目、11-12番目・・・は連続した要素を抜き出し、その他は1つおきに抜き出して、2列目に出力します。
Dim steps(1 To 3) As Integer steps(1) = 1 steps(2) = 0 steps(3) = 1 s = 0 For i = 1 To 100 s = s + steps((i Mod 3) + 1) Cells(i, 2).FormulaR1C1 = "=R[" & s & "]C[-1]" Next
一つ確認ですが、回答の
1-3-5-6-8-10-11-12
の最後は12でよいのでしょうか?順序的には13を出力する箇所かと思うのですが、13は存在しないので、上記マクロでは空欄になります。
質問中の出力を再現するには、ちょっと強引ですが、次の感じでしょうか。
Dim steps(1 To 3) As Integer steps(1) = 1 steps(2) = 0 steps(3) = 1 s = 0 For i = 1 To 100 d = steps((i Mod 3) + 1) s = s + d If Cells(i + s, 1).Value = Empty And d > 0 Then Cells(i, 2).FormulaR1C1 = "=R[" & s - d & "]C[-1]" GoTo END_OF_MACRO Else Cells(i, 2).FormulaR1C1 = "=R[" & s & "]C[-1]" End If Next END_OF_MACRO: End Sub
何かの参考になれば。
すみません。
ご指摘の通り最後が間違えていました。
>>1-3-5-6-8-10-11-12
ではなく、
1-3-5-6-8-10-12-13
です。
Mod をこんな風に使うとできるんですね。
ありがとうございました。