- ベストアンサー
(Excel2003)すぐ左の最後の行までコピーするマクロを教えてください
マクロ初心者です。 表記の件に就き、何卒ご教授の程、宜しくお願いします。 ・エクセルで以下のような表があるとします。 __A__B__C__D→ 1_数量_単価_金額 2_4,000_100_=B3*C3 3_5,000_200_ 4_3,000_120_ 5_5,000_160_ ↓ ・そしてこのAとB列が毎回下に増えるとして、C2セルの数式を B列の最後の行までコピーするマクロを教えて下さい。 (実際は、C2セルにVLOOK関数が入っており、最終行は何千行まであります) 何卒ご教授の程、宜しくお願い申し上げます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 単に、 オートフィル 四角の右下の■ をダブルクリックすればよいのではないでしょうか。 ------------------------------ マクロの場合は、ちょっと難しいですね。人間が判断していることを、マクロにやらせるようになります。 ・数式があるかないかの判定をします。 ・数式の最後の行を探さなくてはなりません。もちろん、C2 を基点にしてしまってもよいのですが、工夫がありません。 ・すでに数式が入ってしまっている場合には、マクロは実行しない。 以下のコードは、コマンドボタンにすると良いと思います。 本来は、シートモジュール用に作られ、コントロールツールのコマンドボタンの中のコードとして使うように考えらましたが、別のシートでも可能なような、フォームツールにしてもかまいません。 i = 3 'ここを取り去れば、1列目以外のすべての列で可能になります。 なお、一部を削除するなりすれば、特に、3列目にしなくても可能になります。 --------------------------------------- Sub Test1() Dim r As Range Dim rng As Range On Error Resume Next If StrComp(TypeName(Selection), "range", 1) = 0 Then i = Selection.Column If i = 1 Then Exit Sub If Application.CountA(ActiveSheet.Columns(i - 1)) = 0 Then Exit Sub End If '3列目* i = 3 'ここを取り去れば、1列目以外のすべての列で可能になります。 Set rng = ActiveSheet.Columns(i).SpecialCells(xlCellTypeFormulas) On Error GoTo 0 Application.ScreenUpdating = False If Not rng Is Nothing Then With rng Set r = .Cells(.Count) If r.Row >= ActiveSheet.Cells(65536, i - 1).End(xlUp).Offset(, 1).Row Then MsgBox "最下行まで入っているか、数式は必要ないようです。", 64 Else r.Copy ActiveSheet.Range(r, ActiveSheet.Cells(65536, i - 1).End(xlUp).Offset(, 1)) End If End With Else MsgBox i & "列目には「数式」が見当たりません。", 48 End If Application.ScreenUpdating = True Set r = Nothing Set rng = Nothing End Sub
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4の回答者ですが、 #3さんの >ご回答ありがとうございます! >まさに求めていたもの、そのものです ということは、C2の値のコピーを最後までして、それが正解なら、#4の回答は違います。私は、数式コピーだと思いましたから。
お礼
いえすいません。 最後まで確認できていませんでした。 求めていたものは数式コピーでした。 ありがとうございました。
#1です。 質問は「マクロを」ということでしたか・・・。 Sub test() Range(Range("C3"), Range("C" & Range("B65535").End(xlUp).Row)).Value = Range("C2").Value End Sub こんな感じになりますね。
お礼
ご回答ありがとうございます! まさに求めていたもの、そのものです。 問題が解消されました。 他の列で行うときは「C」を「○」列に変えれば大丈夫ですよね? 本当にありがとうございました。
いろいろやり方はありますが、私なら 1)C2を選択 2)[CTRL]+[C](コピー) 3)[←](B2を選択) 4)[CTRL]+[↓](B列の最後まで) 5)[→](C列を選択) 6)[CTRL]+[SHIFT]+[↑](上記セルからB2までの範囲を選択) 7)[CTRL]+[V](ペースト) と操作します。 ちなみにVLOOKUPの範囲指定のセル参照は絶対参照にしておかないと、エラーになってしまいますので気をつけてください。
- hana-hana3
- ベストアンサー率31% (4940/15541)
マクロで行う理由が解りませんが、それだけの機能であればマクロは不要です。 フィルコピーではダメなのですか? http://www.relief.jp/itnote/archives/001648.php http://hamachan.info/excel/o-tof.html
補足
ご回答有難うございます。 記述不十分で申し訳ございません。 上席(年配者)がボタン一つで見れるようなマクロの一部分で、 今まではそこだけ数千行まで先に入れてました。
お礼
ご回答有難うございます。 私、簡単な「自動記録マクロ」しかできませんので、 私には理論は理解できませんが、そのままコピーさせて頂いたところ 素晴らしい反映結果が返ってきました。 本当に凄いです。 我々、皆、この件で困っていましたので、本当に助けられました。 本当にありがとうございました。