- 締切済み
エクセルでマクロで別のセルに
関数を別のセルに貼り付けると自動的にセル番号が変わりますが、 マクロではどうすればいいでしょうか? 例えば、B1で「=a1」とあるのをコピーし、B2に貼り付けると「=a2」となります。 これをB1にあるマクロをコピーしB2に貼り付けてもマクロ内のセル番号は変わりません。 この場合、どうすればいいでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
Set Trng = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) アタマイタクなりそうなので、これがB列セルとどういう関係になるのかは、アマリ考えないとして、 Rangeの範囲指定で、左のパートを変化させる?、それは、右のパート同様、変数を使えばできる。 Dim Trng As Range Dim Hen As Long Hen = Cells(2, "B").Row Set Trng = Range("A" & Hen & ":A" & Range("A" & Rows.Count).End(xlUp).Row) MsgBox (Trng.Offset(0).Resize(1, 1)) こんなんじゃない、、!?
- keithin
- ベストアンサー率66% (5278/7941)
あなたのご質問: >これをB1にあるマクロをコピーしB2に貼り付けてもマクロ内のセル番号は変わりません。 実は言いたかったこと: マクロの中でコピーすると、B1と書かれたマクロの文言がB2と書き換わる そんな方法は、マクロの中ではありません。 ふつーに手で書き換えるとか、置換をするとか、あるいは「マクロの中でそんな書き換えをしなくてもいいような」マクロの書き方を工夫します。 >一部抜粋します そんなデタラメにマクロを持ってきても、「A2にちょこっと書き換えるだけです」というだけのお話になります。 だいたい、そのマクロの内容で「B1では」とか「B2では」なんて具合になるというのから、とても不自然です。 そもそも最初のあなたが「これはB1だ」といってるそのマクロで、既にB2以下にも同じようにする内容になってるのですから。 あなたがホントにヤリタイ事を、具体的に目に見えるようにキチンと状況説明してみてください。するとそれなら「こんな書き振りがあります」といった、具体的に役に立つ回答もすぐに寄せられますよ。 せめてこんな具合に。 質問例: B1に数式を記入する、こんなマクロを書きました sub macro1() range("B1").formula = "=A1" end sub でもこのマクロじゃB1にしか書けないし、B2以下にも同様に数式を記入したいので sub macro2() range("B1").formula = "=A1" range("B2").formula = "=A2" range("B3").formula = "=A3" end sub にしましたが、あまりにセンスがありません。 もうちょっと上手なやりかたはありますか? 回答1: sub macro3() range("B1").formular1c1 = "=RC[-1]" range("B2").formular1c1 = "=RC[-1]" range("B3").formular1c1 = "=RC[-1]" end sub のように作成すると、どこのセルに記入するにも「同じ数式」で出来ます。 回答2: そもそもそういうのは sub macro4() range("B1:B3").formula = "=A1" end sub とだけ書いてやれば一発でOKです。
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 >B1にあるマクロをコピーしB2に貼り付けてもマクロ内のセル番号は変わりません。 B1というセル上にはマクロなどはありません。コード全体をみないと正確なことは言えませんが、何をしようとしているかが大事です。ポイント的に聞かれても、答えようがありません。マクロはExcelとは直接関係のないアプリ*だと思っていただいたほうが良いです。(*本当は言語だけど) >B1では >Set Trng = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) >というマクロを >B2では >Set Trng = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row) その質問の範疇だったら、B2に合うマクロを書き換えたらいかがですか? もう少し、きちんとした質問の文章にしていただかないと、正しい回答はつきません。 こちらの想像で書いてみました。2列目のどこかにカーソルを乗せておいて、マクロを実行すれば、そこから計算させます。A列には数字が入っているものとします。 '// Sub Test2() Dim Trng As Range Dim rng As Range Set rng = Selection.Cells(1) '2列目のどこかにカーソルを置いてください。 If rng.Column <> 2 Then Exit Sub Set Trng = Range(rng.Offset(, -1), Cells(Rows.Count, "A").End(xlUp)) MsgBox Application.Sum(Trng) End Sub
- keithin
- ベストアンサー率66% (5278/7941)
たとえばB1セルに =A1 という数式を記入しておきます。 sub macro1() range("B1").copy destination:=range("B2") end sub のようにマクロを書いて実行します。 マクロに、B1セルをコピーしてB2セルに貼り付けさせると、B2セルには自動的にセルの変わった数式が入ります。
お礼
早速のご回答ありがとうございます。 質問の意図は マクロ内にあるセルを変えたいということです。 他の質問掲示板にあったマクロなので一部抜粋しますと B1では Set Trng = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) というマクロを B2では Set Trng = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row) としたいのです。 何か方法あるでしょうか?