Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11672 / 76734 ←次へ | 前へ→

【70594】Re:初心者ですいません
回答  UO3  - 11/12/5(月) 14:22 -

引用なし
パスワード
   ▼まさ さん:

とりあえず「頭の体操」をして、式のルールを想像しました。
おそらく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
3 hits

【70580】初心者ですいません まさ 11/12/4(日) 11:12 質問
【70582】Re:初心者ですいません UO3 11/12/4(日) 13:13 発言
【70590】Re:初心者ですいません まさ 11/12/5(月) 11:56 質問
【70593】Re:初心者ですいません UO3 11/12/5(月) 13:30 発言
【70594】Re:初心者ですいません UO3 11/12/5(月) 14:22 回答
【70598】Re:初心者ですいません まさ 11/12/5(月) 19:27 質問
【70602】Re:初心者ですいません UO3 11/12/6(火) 6:30 発言
【70603】Re:初心者ですいません UO3 11/12/6(火) 6:39 発言
【70604】Re:初心者ですいません まさ 11/12/6(火) 9:12 発言
【70607】Re:初心者ですいません UO3 11/12/6(火) 11:16 回答

11672 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free