• ベストアンサー

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

エクセルで、横(列)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)の「同じ列で・・・」は「同じ行で・・・」の間違いです。ご回答内容を今から確認してみます。ありがとうございます。