|
▼まさ さん:
とりあえず「頭の体操」をして、式のルールを想像しました。
おそらくM列に3行目からはじまる5行単位のブロックがあって
それに対してB列の3行目からはじまる2行単位のペアを
B列の2つのペアの●組目の1行目 は M列の5行1組の●組目のブロックの先頭行○ を相手にする。
B列の2つのペアの●組目の2行目 は M列の5行1組の●組目のブロックの最終行□ を相手にする。
こんなことでしょうかね?
で、この場合、現在のB列の行からの「相対的」な行の位置より、直接、計算で求めて指定したほうが
わかりやすいと思います。
つまり、このペアは
"=IF(R○C[11]="""","""",MID(R○C[11],1,FIND("" "",R○C[11],1)-1))"
"=IF(R□C[11]="""","""",MID(R□C[11],3,LEN(R□C[11])-2))"
こんな式で、R[n] という相対指定ではなく Rn と 直接指定します。
● = (B列の行 - 3) / 2 の商 + 1 ですね。
そうすると
○ = (● - 1) * 5 + 3
□ = (● - 1) * 5 + 4 + 3
こうなります。(これは、VBAというより算数の問題ですね)
ですから、計算式の○と□をB列の行番号を元に計算した結果で置き換えてセットします。
そうしますと、以下でしょうかね?
Sub Test2()
Dim i As Long
Dim form1 As String
Dim form2 As String
Dim n As Long
form1 = "=IF(R○C[11]="""","""",MID(R○C[11],1,FIND("" "",R○C[11],1)-1))"
form2 = "=IF(R□C[11]="""","""",MID(R□C[11],3,LEN(R□C[11])-2))"
For i = 3 To 999 Step 2
n = (((i - 3) \ 2 + 1) - 1) * 5 + 3
Range("B" & i).FormulaR1C1 = Replace(form1, "○", n)
Range("B" & i + 1).FormulaR1C1 = Replace(form2, "□", n + 4)
Next
End Sub
|
|