- ベストアンサー
Excel 2013を使用したデータ計算式のマクロ
- Excel 2013を使用してデータの最終行まで計算式をコピーするマクロを作成したいです。
- A列2行からとB列2行から始まるデータ行が数百行あります。C列2行に計算式を入力し、セルの右下フィルハンドルをダブルクリックすると、固定範囲内の計算式がコピーされます。
- しかし、データ行の数が変わるため、マクロで最終行を検索し、データの最終行を見つけてからコピーしたいと考えています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>毎回このデータ行数が変わります あなたの意図している「最後のデータ行」というのが、具体的にどういうのかによって適切な方法は変わります。 一番基本的には、 1.A列(やB列)に生データを記入している 2.例えばA列に、一番下の生データが入ってるところが最終行である 3.その更に下のセルは、完全空っぽのセルがずっと続いている という状況になります。 #A列やB列が実際にはよそのどこかからデータを参照して「計算式でデータを表示してる」とかだと、また違う工夫をしなきゃなりません。 また今「コピーしたい」というお話になってますが、コピー元(タネとでも言いますか)が2行目に既に記入済みなのかどうか、いったいどういう使い方を想定してるのかもちょっと曖昧です。 ご相談の直接の回答としては: sub macro1() dim LastRow as long lastrow = range("A65536").end(xlup).row range("C2:C" & lastrow).filldown range("H2:J" & lastrow).filldown range("M2:M" & lastrow).filldown end sub あるいはわざわざタネを用意しておいてそれをコピーとかじゃなく、マクロに最初っから所定の数式を上書き記入させてしまうのも一つの方法です: sub macro2() dim LastRow as long lastrow = cells(rows.count, "A").end(xlup).row range("C2:M65536").clearcontents range("C2:C" & lastrow).formula = "=SUM(A2:B2)" ’例 range("H2:H" & lastrow).formula = "=C2*2" range("I2:I" & lastrow).formula = "=H2+1" range("J2:J" & lastrow).formula = "=I2/3" range("M2:M" & lastrow).formula = "=SUM(C$2:C2)" end sub #ていうか通常のエクセルの使い方としては、所定の列に最初から「たくさんの行」に事前に数式を埋めておき、A列なりB列にデータが入ったら計算結果が現れるように仕込んでおけば、わざわざマクロを持ち出す必要もありませんが。 C2: =IF(B2="","",A2+B2) 以下沢山事前にコピーしておく A2のあとB2にデータを入れると計算結果が現れる みたいな。
その他の回答 (1)
- mk48a
- ベストアンサー率56% (1133/2007)
選択したい範囲の左上を選択して、「Ctrl」 +「 Shift」キーを押しながら矢印キーの右と下を何回か押すとマクロを使わなくても希望の範囲が選択できると思うのですが。 選択範囲が飛びすぎる場合は「Shift」キーのみで1行ずつ追加してみてください。 先に行を選択して必要なだけ列を追加するのが楽かも。
お礼
アドバイスありがとうございます。 ショートカットキーは便利に日常つかっています。 フィルハンドルでダブルクリック貼り付けで対応していますので 最終行やデータ最終行へ戻ることは毎日やっております。 (相談の文章では伝わらないようです) ならなにも問題ないのでは?と言われてしまいそうですね。 ご親切にありがとうございました。
お礼
ご丁寧に回答していただきありがとうございました。 参考になったのは「マクロなし計算式で」というアドバイスです。 担当者が数年で変わったときを考えて手作業の間違いをなくす 目的でマクロで自動化はどうかとはじめてみました。 計算式をたくさん用意しておいてやってきたデータを貼り付ける というのは「まちぶせ式」と名づけさせていただきます。 重ねて御礼申し上げます。