プロが教えるわが家の防犯対策術!

Excel2002ユーザーです。

sheet1上で実行するマクロで、画面を切り替えることなく、
いわば水面下でsheet2の行1に空行を挿入させ、常に最新のデータ(Sheet1上にあるセルの値)を書き込んでいく、
ということをしたいのです。
古いデータは順次、下に送られる形です。

まずデータの書き込み以前に、挿入ができないのです。
sheet1上のマクロで、

Worksheets("sheet2").Rows("1:1").Select
Selection.Insert Shift:=xlDown

と書き込みましたがダメでした。
(実行時エラー'1004': RangeクラスのSelectメソッドが失敗しました)

Sheets("sheet2").Select
Rows("1:1").Select
Selection.Insert Shift:=xlDown

の場合、行挿入はOKですが、sheet2に画面が切り替わってしまいます。

常にsheet1の画面を表示させたままにしてこのようなことを行いたいのですが、
良きアイデア、アドバイスがありましたら御教授ください。

よろしくお願い致します。

A 回答 (3件)

Sheets("sheet2").Range("1:1").Insert Shift:=xlDown



としてください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
あっさり解決しました。。。

が、ユーザー定義関数の中で使うと機能しないのはなぜでしょう?

例えば
---------------------
Function FNC(a As String) As String

FNC = MsgBox(a)

Sheets("sheet2").Range("1:1").Insert Shift:=xlDown

End Function
---------------------
というように使うとダメなんです。

お礼日時:2004/07/02 19:37

>ユーザー定義関数の中で使うと機能しないのはなぜでしょう?


エクセルVBAのFunctionプロセジュアでは、セル値を見て加工することと結果値を関数値として返すことしか認められません。
そういう仕様にしてしまっているのです。
他の言語の関数などを知っていると戸惑うのかも。
画面を変えるような、セル・シート挿入・削除・書式設定・セル値を変える・ソートなど一切出来ないのが、基本原則なのです。
Function aaa()
Cells(1, 1) = "bbb"
aaa = "ccc"
End Function
はD2セルなどにいれると、#VALUEエラー。
Function aaa()

aaa = "ccc"
End Function
はcccです。関数をセットするセルは別として、セルの値さえ触れません。
    • good
    • 0
この回答へのお礼

詳しいご説明ありがとうございます。
ユーザー定義関数ってそういうものなんですね。
大変よくわかりました。m(_ _)m

お礼日時:2004/07/02 20:59

ユーザー定義関数で通常のワークシート関数のように利用した場合、他のセルを参照した場合は、エラーになってしまうので、他のセルへのアクセスはできなくなるようです。



今回の場合、エラーにはなりませんが、そのような事が関連しているのではないかと思います。
    • good
    • 0
この回答へのお礼

度々お手数かけました。
最初のご回答に重ね、お礼申し上げます。m(_ _)m

お礼日時:2004/07/02 21:01

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