• ベストアンサー

エクセルのシートを同時に行削除、行挿入させて自動連動させたい

エクセルで、横(列)256列以上のデータを入力したいため、シートを分けざるをえません。その場合、次のようなことがしたいとき、どのようにすればよろしいでしょうか?(やりたいことの結論下記(3)になります。) エクセルのシートが2つ以上あるとします。 (1)「sheet1」には、基本データ(名簿録のようなもの・氏名ふりがなアイウエオ順配列) (2)ふたつめ以降のシートには、毎月変更するデータを入力し、「sheet1」の名簿の個々のIDに対応したそれぞれ同じ行番号に入力することになります。 (3)「sheet1」で行削除(名簿対象者解約)や行挿入(新規契約者)を任意の場所で行いたい。それに連動して、2つ目以降のシートでも同じ列で行削除・行挿入を自動でしたい。 ★この簡易システムを作成するのはマクロ初心者の私であり、日々の入力作業するのはエクセルそのものが初心者である他者となります。 ★行挿入、行削除のときだけシートの同時選択を手作業でしてもらうことは想定していません。そのあたりをも含めた自動化の智恵がでてこないのです。 以上、よろしくお願いします。

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

  • ベストアンサー
noname#27115
noname#27115
回答No.4

1. ALT+F11でVBA(マクロ)の画面がでます。 2. そして左にThisWorkbookというオブジェクトがあったらダブルクリックします。 3. 右に白い窓が出たらさっきのコードを全部貼り付けてください。 4. その後、ワークシートに戻っててきとうながセルで右クリックしてみてください。 ↓ ちょっと書き換えてみました。 Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Dim RT As Long Dim mySh As Worksheet Dim myRow As Long Cancel = True myRow = Target.Row If Sh.Name <> "Sheet1" Then Exit Sub RT = Val(InputBox("1=挿入" & Chr(10) & Chr(13) & _ "2=削除" & Chr(10) & Chr(13) & _ "3=キャンセル")) If RT <> 3 And RT <> 0 Then For Each mySh In Worksheets mySh.Select Rows(myRow).Select Select Case RT Case 1 Selection.Insert Shift:=xlDown Case 2 Selection.Delete Shift:=xlUp Case 3 End Select Next mySh End If Sh.Select End Sub

yastaro
質問者

お礼

確認できました。ありがとうございました。 私自身、VBAの可能性を今までの標準モジュールへの記録だけという段階を超えて広がりそうで感謝します。

yastaro
質問者

補足

さっそく、ありがとうございます。勤務時間の都合で来週になりますが、試したあとにあらためてお礼申し上げます。(自宅でネットがつながっていないので申し訳ありません)

その他の回答 (3)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.3

マクロで行った作業は、「元に戻す」や「Ctrl+Z」で実行前に戻せません、ということです。<undoがきかない なので、挿入はいいですが、削除の場合注意が必要となります。 それと、多少ヨコ気味ですが、#2さんの補足にある事項ですが、 多少はご自分で調べられましたでしょうか。 インターネットを使われているのですから、下記のようなHPはたくさんありますよ。

参考URL:
http://www.sk2.aitai.ne.jp/~happy/
yastaro
質問者

お礼

ありがとうございます。小さな質問にまでお答えいただき、感謝します。ネットでVBAを教えてくれるHPがあることさえ知らなかったです。お恥ずかしい限りです。自宅でネットをつなげてなく、職場でもゆっくり見ることができないのであらゆる意味でわからないことだらけでした。ただ、最近教えてGOOと出会って、VBAがかなり奥が深いものだと知りました。先に教えてくださったマクロについてもあらためて感謝申し上げます。私にとって大きな進歩です。

noname#27115
noname#27115
回答No.2

下のような作業をどこかのイベントに追加すればOKと思います。Inputboxを使いましたけど、右クリックのポップアップとかに入れてもいいかと思います。 サンプルはWorkbookのSheetBeforeRightClickイベントに入れてみました。 Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Dim RT As Long Dim mySh As Worksheet Dim myRow As Long Cancel = True myRow = Target.Row If Sh.Name <> "Sheet1" Then Exit Sub RT = InputBox("1=挿入" & Chr(10) & Chr(13) & _ "2=削除" & Chr(10) & Chr(13) & _ "3=キャンセル") If RT <> 3 Then For Each mySh In Worksheets mySh.Select Rows(myRow).Select Select Case RT Case 1 Selection.Insert Shift:=xlDown Case 2 Selection.Delete Shift:=xlUp Case 3 End Select Next mySh End If End Sub

yastaro
質問者

補足

ご回答ありがとうございます。マクロ初心者のため、あつかましくもうかがって申し訳ありませんが、よろしければ教えてください。 私は標準モジュールに記録、修正するVBAしかわかりません。 ・イベントに追加 ・Inputbox ・右クリックのポップアップ ・WorkbookのSheetBeforeRightClick 等の概念を理解できないのです。 申し訳ありません。もう少し教えていただけないしょうか?

  • moon00
  • ベストアンサー率44% (315/712)
回答No.1

列で行挿入・行削除?というのが分かりませんが。 作業対象は「行」とします。 もし「列」なら「Rows」を「Columns」として下さい。 ---------------------------------------- Sub Mrowinsert() '複数シートの同位置で行挿入 Dim r As Integer r = ActiveCell.Row Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select '同時に作業するシート名を列記 Rows(r).Select Selection.Insert Shift:=xlTodown Sheets("Sheet1").Select End Sub Sub Mrowdelete() '複数シートの同位置で行削除 Dim r As Integer r = ActiveCell.Row Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).Select '同時に作業するシート名を列記 Rows(r).Select Selection.Delete Shift:=xlTodown Sheets("Sheet1").Select End Sub ------------------------------------------ これを「sheet1」でボタン配置するか、どうかして、 操作するときにそれを使ってもらうようにする、というのでは どうでしょう。 ただ、マクロではundoが使えないので、利用には注意が必要になりそうですが。 VBAの基礎を少しは勉強されてから、取り掛かったほうが いいかもしれません。

yastaro
質問者

お礼

ありがとうございました。できました。 ところで、"undo"とは何でしょう?何はともあれ、まずは御礼まで。ありがとうございます。

yastaro
質問者

補足

ご回答ありがとうございます。すみません。 (3)の「同じ列で・・・」は「同じ行で・・・」の間違いです。ご回答内容を今から確認してみます。ありがとうございます。

関連するQ&A

  • エクセルVBAで、行削除⇒別シートに自動入力をしたい

    いつもお世話になります。よろしくご指導お願いします。 VBA初心者です。最近随分皆様に助けていただいています。尚、業務の関係でお助けください。 エクセルで名簿形式のデータベースシートがあります。 (山田太郎 ○○市○○町 911-1234 ・・・) 例えば、この山田さんが解約したり死亡されたりすると「行削除」をします。そのとき、別シート(シート名「解約者台帳」)に自動的に削除した行の全データをもっていきたいのです。 ★解約者台帳のフィールドは、元シートと基本的に同じですが、A~AG列のデータが必要。AH列以降のデータは不要です。 解約者台帳に追加していく(新しい行=何も入力されていない行への自動入力)等のVBAのイメージを含めて、私の力ではやはりさっぱりです。どうかまたまたお助けください。お待ちしています。

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

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

  • EXCELで分かれたシート間の同一データ行を自動削除して結合したい

    EXCELで、シート1、シート2に分かれたデータがあります。 それぞれのシート間でC列~F列の値が重複している行、シート1側のG列の数値がマイナス になっている行を自動で削除してからデータを1つのシートに結合する方法を探しています。 条件は、シート1側の重複データ行のみを削除し、シート2側のデータが必ず残る方法であ る必要があります。G列のマイナス行を削除するのはシート1側のみです。 シート1がA列~I列、約3万行、シート2がA列~K列、約1千行くらいです。 シート2側のみJ列~K列(数値データが入っています)が存在しますが、シート1側は空欄です。 列の数は変わりませんが、行数が都度変動しますのでマクロでコピー先のセル位置を決め打ちする 事が出来ません。 1つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • エクセル データーベース 削除したレコードを自動で別シートにどんどん追加していく方法は?

    いつも大変お世話になっております。 エクセルのデータベースで、社員名簿を作りました。 名前、住所、職階級など、様々なデータが横1列に入力してあります。 入力しているシート名は「名簿」です。 H列に、社員、契約社員、派遣、パート、退職 といった情報を入れています。 この中で、 退職 とある人の分の情報を別シート(シート名 退職者 )に移して、削除したいのです。 今までは手作業でしておりましたが、これを自動でする方法はないでしょうか? 「名簿」シートで削除したものが、「退職者」シートの一番上、もしくは一番下にどんどん追加されるようにしたいのです。 どうぞよろしくお願いします。

  • エクセルのファイル中の空白行を削除する方法

    エクセルのファイルでデータ入力されているものがあるのですが 空白の行があり,それを削除したいのですが たくさんあって手作業では大変です。 マクロなどでうまく自動的に削除できないものでしょうか? 因みにデータはA列にのみ入力されてます。 宜しくお願いします。

  • エクセルで 行の挿入や削除をできなくする方法はありますか?

    こんにちは。いつもお世話になっています。 エクセルのシートなのですが、 行の挿入や削除をできなくさせる方法はないでしょうか? 入力やコピー&ペーストなどは可で、 行の増減だけをできないようにしたいのです。 よろしくお願いします。

  • エクセル ブック内のシート間での行の参照?

    エクセルの同じブック内のシート間で、セルを参照するのではなく、行参照?させたいのですが・・・。 例えば、、  シート1    A    B    C    D     1行目 りんご みかん いちご ぶどう     2行目 赤    オレンジ  赤   紫 と入力すると同じようにシート2にも入力されるようにしたいのと、1行目と2行目の間に行を挿入しても同じようにシート2にも挿入されたり、 さらにはA列・B列のみ入力されたりするようにしたいのですが、(C列D列には別々のデータを入力したい)どのような方法がありますでしょうか?説明がわかりにくく申し訳ないのですが、宜しくお願いします。

  • エクセルでの複数シートへの同時行挿入

    エクセルで某使用料金の集計表を作成しており、 シート1で実数値を入力し、シート2で単位千円の提出用資料を作成しております。 単純に、シート1で入力された数値を、シート2で同じフォーマットで、INT関数を使用しているだけなのですが、 シート1で新規に行を挿入した場合、シート2でも同様に行を挿入し、数式をコピーして対応しております。 しかしながら、毎月、新規で行を挿入するケースが増え、油断するとシート2への行挿入を忘れるなどの事態が発生しております。 もっと簡易な方法で、シート1で作成した表の、千円単位に変換した表を作成することはできないのでしょうか? できるだけ易しい方法を教えて下さい。

  • 行挿入+貼付けと空白行削除を同時に行うには?

    行挿入+貼付けと空白行削除を同時に行うには? VBA初心者です。 仕事でエクセルを使っていますが、 no  工程1 工程2 工程3 1   A   B   C 2   B   _   A 3   C   A   _ 4   _   C   A という表を no  工程 1   A     B     C 2   B     A 3   C     A 4   C というように並び替えたいのですが、 現在は各番号ごとに3行挿入して工程をコピー、行と列を入れ替えて貼付けをしています。 これだと no  工程 1   A     B     C 2   B      A 3   C     A 4     C     A のように空白行ができてしまいます。これをもう一度、マクロで消しているのですが、 データ量が多いため、行挿入と空白行を消す作業を同時に行わないとシート最大行数である 65536行を超えてしまう可能性があります。 同時にやるにはどのようにすればよいのでしょうか? よろしくおねがいします。

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

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

専門家に質問してみよう