【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

1行目の内容をコピーして、他の場所に指定数分だけ
挿入するマクロを作りました。

そのマクロ自体は、正しく動いたのですが、コピー元の1行目に
他のシートを参照する関数が入っていた場合、想定どおりの
結果を得ることができません。

[SHEET1:データのみを記載]
省略

[SHEET2]
A1セル:   =SHEET1!$A1 ←コピー元の行

[マクロ:一部抜粋]
myR = Application.InputBox("挿入する行数を入れてください", , "1")

For i = 1 To myR
  Rows("1:1").Copy
  Cells(ActiveCell.Row, 1).Select
  Selection.Insert Shift:=xlDown
  Selection.EntireRow.Hidden = False
Next i

どういう結果を求めたいかというと、たとえば、
SHEET2のA10セル上で、このマクロを実行し、 "挿入行 = 3" と指定したら

A10:   =SHEET1!$A10
A11:   =SHEET1!$A11
A12:   =SHEET1!$A12

となってほしかったのですが、結果は、

A10:   =SHEET1!$A10
A11:   =SHEET1!$A10
A12:   =SHEET1!$A10

となってしまいました。

どうにか、求める結果を得られるようにできないでしょうか?

A 回答 (2件)

Active.Cellが同一の位置なのだから相対変位しません。



一例です。(ループは不要なので削除しました)
myR = Application.InputBox("挿入する行数を入れてください", , "1")
Rows("1:1").Copy
Rows(ActiveCell.Row & ":" & ActiveCell.Row + myR - 1).Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False
    • good
    • 5
この回答へのお礼

ありがとうございます。うまくいきました。

お礼日時:2011/09/30 22:52

下記をやって、その際マクロの記録を採って、これで良いかチェックして。


例データ 例示の書き方も勉強して。
Sheet1 A列
a
b
aa
s
d
f
g
A3の式は =Sheet2!A3
他は手で直接入力。
Sheet2 A1:A9
xx
yy
aa
bb
cc
dd
ee
ff
gg
ーーー
Sheet1で
A3をコピー
A6の「f」の行から3行選択
挿入ーコピーしたセルー下方向にシフト
結果 Sheet1
a
b
aa
s
d
dd
ee
ff
f
g
A6:A8は数式は
=Sheet2!A6
=Sheet2!A7
=Sheet2!A8
---
コードは
Sub Macro4()
Range("A3").Select
Selection.Copy
Range("A6:A8").Select
Selection.Insert Shift:=xlDown
End Sub
これをセル指定の点で一般化するコードに改変する。
もしこれで正しいなら、質問者は
(1)エクセルの操作そのものを十分知らないで(やってみないで)VBAをやっている。
VBAはエクセルの操作でやれることをやれるだけ、なので、エクセルを知らないでVBAをやるのは本末転倒。
(2)マクロの記録の有効性を認識してない
ということになる。
    • good
    • 0
この回答へのお礼

残念ですが、なにを回答したかったのかわかりません。

お礼日時:2011/09/30 22:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報