• ベストアンサー

sheet1上のマクロでsheet2に画面を切り替えずに行を挿入させたい

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の画面を表示させたままにしてこのようなことを行いたいのですが、 良きアイデア、アドバイスがありましたら御教授ください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Sheets("sheet2").Range("1:1").Insert Shift:=xlDown としてください。

macro_de_comatta
質問者

お礼

早速のご回答ありがとうございます。 あっさり解決しました。。。 が、ユーザー定義関数の中で使うと機能しないのはなぜでしょう? 例えば --------------------- Function FNC(a As String) As String FNC = MsgBox(a) Sheets("sheet2").Range("1:1").Insert Shift:=xlDown End Function --------------------- というように使うとダメなんです。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

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

macro_de_comatta
質問者

お礼

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

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

ユーザー定義関数で通常のワークシート関数のように利用した場合、他のセルを参照した場合は、エラーになってしまうので、他のセルへのアクセスはできなくなるようです。 今回の場合、エラーにはなりませんが、そのような事が関連しているのではないかと思います。

macro_de_comatta
質問者

お礼

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

関連するQ&A