• 締切済み

Excelで行挿入イベントをハンドルしたい

Excelで行・列の挿入や削除をしたときの処理をしたいのですが Changeイベントでフックしてくれません。 何かうまい方法はないものでしょうか。 あるいは、Excelの挿入、削除メニューを無効にしたりカスタマイズしたりする方法でも良いです。 ご存知の方教えてください。

みんなの回答

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

小生素人で、#1でおしゃっているレベルのことに及びませんが、 小生も色んなエクセルの操作をイベントとして捉えてくれると良いなと思いますが、現状では十分できません。 (例)列・行の挿入・削除、列幅の拡大・縮小、書式の変更 シート削除 現状のイベントはマウスの動作ー目的操作単位ー業務のうち、マウスの操作が中心のように思います(特にコントロール類は)。 またシートのセルのエリアに関したものが多い。ツールバー部・メニューバー部などはない。 WorkbookのOpenなどあるのに、と思います。 ここにはMSの下した選択の問題があり、個人的には、その体系が見えない(どういう風に体系的に選んだか)。 エクセルのInsideな構成とか処理方式を知らないとダメなので そういうことを議論することは普通の人には不可能でしょうが。 ーー 普通のVBAの知識ではそれは不可能でしょう。 そのレベルを越えて、クラスの扱いや、内容的にAPIのレベルまで踏み込んで理解しないと無理ではないかと思います。 それとか下記URLの回答のように実質は同じ効果を挙げる他の方法を検討するとか。例えばメニューの一項目を使用できないようにする・削除するとか。 (例 下記) ーー 多分質問の操作を禁止したいというようなことかと思いますが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2252522に似た質問あり ました。 禁止も、上記で言った、個別の目的(が決まった)操作レベルの 禁止の仕組みは無い。 現状あるのはシートの保護程度です。 開発者ー使用者という対立レベルで起こりそうな点からの問題発想が あまり体系的に無いよう。 ーーー つまらぬ感想ばかり述べてしまったので、お詫びに、編集の削除をEnabledするコードを載せます。 Sub Sample() Dim ct As Object Dim ct1 As Object Application.ScreenUpdating = False For Each ct In CommandBars("Worksheet menu bar").Controls ' MsgBox ct.Caption If ct.Caption = "編集(&E)" Then For Each ct1 In ct.Controls 'MsgBox ct1.Caption If ct1.Caption = "削除(&D)..." Then MsgBox ct1.Caption & "Enabled" ct1.Enabled = True 'False End If Next End If Next Application.ScreenUpdating = True End Sub

catecholamine
質問者

お礼

回答ありがとうございます。お礼が遅くなって申し訳有りません。 No.1の方へも書きましたが、いちおう目的を達成することができました。 貴重なご意見ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 ご質問の意図が明確ではありませんが、ふたつの方法があります。 ひとつは、自分でイベントを作る方法です。ただし、他のマクロが動かなくなることがあります。元来は、こちらのほうが主なのですが、私は、ほとんどやったことがありません。PCの負担が多くなるからです。 もうひとつは、クラスで、行・列の挿入・削除のボタンにインスタンスを設け、クリックでイベントにすることですね。 少しややこしくて CommandBars("Row") CommandBars("Worksheet Menu Bar") この中のControls に、ボタンがあります。それと、行全体・列全体を選択した時に出てくる特殊なメニューがあるはずです。 これらを全部、クラスとして保持(=変数)していれば、制御できます。 しかし、内部で、Enabled プロパティを切り替えられているので、機能を完全に無効にすることは不可能ですから、無効にする場合、コマンドメニューの場合は、以下のようにして、見えないようにしないと、無効に出来ません。他のメニューは、Enabled プロパティでも可能です。 CommandBars.FindControl(, 297).Visible = False CommandBars.FindControl(, 296).Visible = False 分かりにくいようでしたら、またお聞きください。 以前のように、回答が出ないから、すぐに閉めてしまうというようなことはしないでくださいね。特に、今回のようなプログラム上の一般論というのは、VBAの中でも難しい質問だと思います。他の掲示板で、ためしにお聞きになっても構いません。実際は、具体的な目的や意図はあるのかもしれませんが、多くの質問というのは、それは明らかにされません。その中で、回答をするというのは、必ずしも、質問が理解出来ているわけではないからです。もしかしたら、VBAは必要がないのかもしれないのですから。また、その場合は、Excelのバージョンにも影響してきます。

catecholamine
質問者

お礼

回答ありがとうございます。 家庭の事情でお礼が遅くなりました。申し訳有りません。 シート保護と右クリックメニューのカスタマイズで目的を達成することができました。ご意見も参考にしたいと思います。

関連するQ&A

  • EXCELで行挿入したときのイベントは?

    Excelで、行や列を挿入削除した時に発生するイベントってどうやって作るのか? てんで、思いつきません。 どなたか、詳しい方アドバイスして頂けないでしょうか? 私が持っている本には、書いていないようです。 よろしくお願いいたします。

  • Excelの行挿入で

    Excelのシートにデータがつまっているのですが(これから新しく表を作るということではないということです。)、行の挿入をしたいのです。 このとき、行を選択して、右クリックで「挿入」を選べば挿入自体はできます。 しかし、 既にある表は、行が、A列とB列が結合されているのですが、 単に上記のように挿入すると、 A列B列が分かれている行が挿入されてしまいます。 新しく挿入された行のA列とB列を選択して、「セルの書式設定」の「配置」でセルを結合させてもいいのですが、 いちいちそうしなくても 挿入時点ですでに結合されているようにするにはどうすればよいですか。 (Excel2000)

  • excelで行挿入について

    excel97を使っているのですが、まず下の表を見てください。 行/列   A  B  C   1  メーカ      2  あ           3  い             4  合計           5  う         6  え           7  お              8  か                このような表があるのですが、行1~4で一つのグループなんです。 同じように  行4と行5の間に「メーカ」  行6と行7の間に「合計」 というふうに「メーカ」挿入、2行空けて「合計」挿入、「メーカ」挿入・・・を約千行分繰り返して 行/列  A  B  C  1  メーカ      2  あ      3  い      4  合計      5  メーカ      6  う      7  え      8  合計      9  メーカ     10  お     11  か     12  合計     このようにしたいのですが、簡単な方法は無いでしょうか?

  • MATLABにおける行の挿入方法

    こんにちは,現在データ整理のためにMATLABを用いて以下のようなプログラムを構築しています 1.ファイルを読み,その値を100行7列の行列Aとする 2.Aの10行目と11行目の間に1行7列の行列B1を挿入する (イメージ的にはEXCELの行の挿入です) 3.同様に20行目と21行目の間に1行7列の行列B2を挿入する 4.以降10行ごとに繰り返す となります.ここで2の処理にあたる「行列の特定の列の間に別の行列を挿入する」方法がわかりません いろいろ調べたのですが、このような方法はどこにもありませんでした MATLABに詳しい方,教えていただけないでしょうか?

  • Excelで一行おきに2行の空白行を挿入したい

    400行ほどデータの入ったエクセルシートがあります。 行番号 A列  1  山田  2  鈴木  :   :  400 田中 このシートで、一行おきに2行の空白行を追加したいのですが、  1  山田  2  3  4  鈴木  5    6  :  : マウスで2行選択して右クリックメニューで挿入..を400行分やるのが大変なので 一気にやる方法を教えてください。

  • エクセル VBA で行の右クリックメニューから行の挿入削除を無効にしたい

    お世話になります。 右クリックメニューの行の挿入と削除を無効にしたいのですが、 セルを選択して、右クリックメニューの挿入・削除は Private Sub Workbook_Open() Dim mymenubar1 As CommandBar Set mymenubar1 = Application.CommandBars("Cell") mymenubar1.Controls("挿入(&I)").Enabled = False End Sub で無効にできたのですが、 行を選択→右クリックメニューの挿入削除の無効化の仕方がわかりません。 ※セルに対してではなく、行に対して行いたいのです。 ご教授頂ければと幸いですのでよろしくお願いします。

  • エクセルの行挿入

    エクセル2003で、1行おきに行を挿入したいのですが、一発できる方法はありますか?100行ほどあるので1行づつ挿入すると時間がかかるので効率の良い方法を教えてください。

  • エクセルで1行ごとに空白行を挿入し、挿入した空白行に色をつけたいです

    タイトルの通りです。 エクセル(2000)で、データはシート毎に件数が違います。 各シート毎にそれぞれ1行毎、空白行を挿入し、挿入した空白行のA列~G列までに薄いグレーの色をつけるマクロを入れたいのですが、うまくいきません。 詳しい方、教えて下さい。

  • EXCEL 最終行に行を挿入(追加)する方法

    EXCEL、WORD、PowerPointの行、列どれでも共通です。 行の挿入の際、最終行に挿入することはできないでしょうか? この場合、“挿入”とは言わず、“追加”なのでしょうね。 最終行に追加できないので、割り込まれた行(最終行)の内容をひとつ前の空白の行にコピーし(安全のためです)、後から最終行の内容を削除することで回避しています。 面倒なので、即最終行に新規に行を設ける方法を教えてください

  • EXCELで切り取った行を別シートに挿入

    EXCELである行を選択して切り取り、同一シート内の任意の場所に挿入すると 元の行は自動的に削除されます。 しかし、別シートに挿入した時は、元の行は削除されず、わざわざ その行を削除する、という操作が必要となります。 そこで質問なのですが、別シートへの挿入を一つの操作で行う方法はないでしょうか? また、その方法がない場合、それはEXCELの何らかの仕様を反映しているのだと 思いますが、それはどのようなものでしょうか? よろしくお願いします。

専門家に質問してみよう