[[20040206012018]] 『マクロで隣の列の最後のセルまで数式コピー』(みのみんた) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで隣の列の最後のセルまで数式コピー』(みのみんた)

マクロで隣の列の最後のセルまで数式コピーしたい。

 隣の列のデータの終端まで数式をコピーしたい場合、どのようにすればいいですか?

 A1のセルに1、A2のセルに2、A3に5…と入力していくとして(A列のデータの数は一定じゃなくて、その時々で10個だったり2000個だったりする)
隣のB列には、B1に=A1*2、等の数式を入れるとします。その後、マクロで下まで(A列のデータが終わるまで)数式コピーする方法がわからないのです。

 今はマクロボタンでマクロを作っているので、とりあえず3000行までコピーしたのを作っておいて、元になるA1のデータが3000を超えそうな場合は、コードを表示して4000行までコピーに修正してみたりしてます。でも必ず下の方(A列のデータがないところ)に意図しない結果や、複雑な数式の場合はエラー値がいっぱいでてしまうので困っています。

 基本的にはA列データにはB列に数式、C列データにはD列に数式、というように右となりに数式を入れていますが、時々E列のデータに対してG列に数式を入れたい、とか、離れた列にも使いたいのですが、そういうことって可能でしょうか?


 おはようございます。
 こんなんでどうでっか?
 ご満足ならそれをD列G列に適用できる式を追加してくだはい。
     (弥太郎)
 '-------------------------------

Sub test()

    Range("b1") = "=if(or(a1="""",iserror(a1*2)),"""",a1*2)"
    Range("b1").Copy Destination:=Range("b2:b" & Range("a65536").End(xlUp).Row)
 End Sub


下記ではいかかでしょうか。(なお)
数式をコピーするのではなく、B1に=A1*2の計算を実施しその結果
の値がそこに入るマクロです。
 要は式のコピーでなく、マクロで計算させて結果を書き込む方式です。
コメント行を変更すれば、好きな列に好きな計算結果を書き込みます。 

Sub test()

lastarow = Cells(Rows.Count, 1).End(xlUp).Row

 For i = 1 To lastarow

 Cells(i, 2) = Cells(i, 1) * 2   ' <------  2列(B列)に A*2の計算結果を入れる。いろいろ変更可
 Next

End Sub


 一行目にコピーする数式が入っている場合のマクロです。
 一行目に入力された数式をA列のデータ数にあわせてオートフィルします。
 数式をコピーする列のいずれかのセルを選択して実行してください。
 数式が2行目とかの場合は STARTROW = 1 を STARTROW = 2 とかに変更します。

 Sub TEST_20040206a()
 Dim MYRANGE As Range
 Dim MYROW As Long
 Dim STARTROW As Long
   STARTROW = 1
   MYROW = Range("A65536").End(xlUp).Row
   Set MYRANGE = Range(Cells(STARTROW, Selection.Column), Cells(MYROW, Selection.Column))
   Cells(STARTROW, Selection.Column).AutoFill Destination:=MYRANGE
 End Sub

 (KAMIYA)


みなさん、本当にありがとうございました。(みのみんた)

 弥太郎さん、iserror見た瞬間「なるほど!」と思いました。
 1行目のRange("b1") = の数式を変えれば何にでも使えますよね?

 なおさんの値で書き込まれるのは、今後絶対必要になるので、変更可の部分の書き込み方法を勉強したいと思いました。恥ずかしながら、Cells(i, 1)の意味がわからないので…VLOOKUP等の数式の時には、普通に関数式を入れてもいいのでしょうか?

 KAMIYAさん、数式を入れたい列のセルを選択してマクロかけるのも、すごく便利でありがたいです。作業によってコピーしたい数式が変化することもとても多いので、数式までマクロに組み込むこともないなかぁ…って作業の時に嬉しいです!


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.