[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで隣の列の最後のセルまで数式コピー』(みのみんた)
マクロで隣の列の最後のセルまで数式コピーしたい。
隣の列のデータの終端まで数式をコピーしたい場合、どのようにすればいいですか?
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
要は式のコピーでなく、マクロで計算させて結果を書き込む方式です。 コメント行を変更すれば、好きな列に好きな計算結果を書き込みます。
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.