• ベストアンサー

複数選択状態のセルを可変範囲よりひとつずらしてドラッグするVBA

エクセル(2007以前です)のVBAの記述について教えてください。 <状態> A列に、A2から始まってデータが沢山ある。データ数はその都度変わる。 <作業> B列において、A列のデータを1行ずらして2つおきに参照する <VBAで記述したい内容> 1 B5に「=A4」と入力 2 B3:B5を選択 3 2の状態でA列のデータが入っている一つ下の行までドラッグ この内、1と2は判ります。3の記述を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

選択したり、ドラッグしなくてもやりようがあると存じますが、ご質問通りを実現すると、下記の通りで宜しいでしょうか? Range("B3:B5")が都度固定でないとすると、この考え方では面倒な気がします。 Sub test() Range("B3:B5").Select Selection.AutoFill Destination:=Range("B3:B" & Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1), Type:=xlFillDefault End Sub

9abqa6
質問者

お礼

ありがとうございます! 大変助かりました。 言葉足らずで申し訳ありませんでしたが、この方法が知りたかったのです。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1の方がおっしゃるように、他のやり方もありますので、一例を・・・ ご質問の内容でB3、B4は未入力だと仮定すれば、結果は、B5、B8、B11・・・と3行毎に1行前のA列を参照する式が記入されることになります。 この内容をそのままコード化すれば以下のようになりますが、ドラッグという動作を記述するようりも、こちらの方が一般的だと思われます。 For r = 5 To Cells(Rows.Count, 1).End(xlUp).Row + 1 Step 3   Cells(r, 2).Formula = "=A" & Format(r - 1, "#") Next マクロを実行するのですから、セルの参照式を代入しなくても、直接値を参照して記入するという方法も考えられ、この場合は For r = 5 To Cells(Rows.Count, 1).End(xlUp).Row + 1 Step 3   Cells(r, 2).Value = Cells( r-1, 1).value Next となります。 A列のデータ数が可変ということで、その都度マクロを実行するのなら、これで充分ですね。 いらぬお節介ですが、A列の数の変化で現象することがあるとすると、最初にB列をクリアしておかないと、(以前の)式が残ったままで計算結果(0になるはず)が表示されることになります。 また、いつも参照形式が変わらないのであれば、参照式を=IF(A4="","",A4)のようにしておいて、充分下まで最初に設定しておけば、A列の数が変化しても自動的に目的の結果が得られることになりませんか? (その都度マクロを走らせる必要がなくなります)

9abqa6
質問者

お礼

なるほど。とても勉強になりました。 教えていただいた方法はとても有用だと思います。色々と応用して使わせていただきたいと思います。 感激です。大変ありがとうございました。 (B列の件、仰るとおりです)

関連するQ&A