プロが教える店舗&オフィスのセキュリティ対策術

エクセルで、横(列)256列以上のデータを入力したいため、シートを分けざるをえません。その場合、次のようなことがしたいとき、どのようにすればよろしいでしょうか?(やりたいことの結論下記(3)になります。)

エクセルのシートが2つ以上あるとします。
(1)「sheet1」には、基本データ(名簿録のようなもの・氏名ふりがなアイウエオ順配列)

(2)ふたつめ以降のシートには、毎月変更するデータを入力し、「sheet1」の名簿の個々のIDに対応したそれぞれ同じ行番号に入力することになります。

(3)「sheet1」で行削除(名簿対象者解約)や行挿入(新規契約者)を任意の場所で行いたい。それに連動して、2つ目以降のシートでも同じ列で行削除・行挿入を自動でしたい。

★この簡易システムを作成するのはマクロ初心者の私であり、日々の入力作業するのはエクセルそのものが初心者である他者となります。

★行挿入、行削除のときだけシートの同時選択を手作業でしてもらうことは想定していません。そのあたりをも含めた自動化の智恵がでてこないのです。

以上、よろしくお願いします。

A 回答 (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

この回答への補足

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

補足日時:2005/11/11 20:02
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/11/14 08:44

マクロで行った作業は、「元に戻す」や「Ctrl+Z」で実行前に戻せません、ということです。

<undoがきかない
なので、挿入はいいですが、削除の場合注意が必要となります。
それと、多少ヨコ気味ですが、#2さんの補足にある事項ですが、
多少はご自分で調べられましたでしょうか。
インターネットを使われているのですから、下記のようなHPはたくさんありますよ。

参考URL:http://www.sk2.aitai.ne.jp/~happy/
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/11 20:15

下のような作業をどこかのイベントに追加すれば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

この回答への補足

ご回答ありがとうございます。マクロ初心者のため、あつかましくもうかがって申し訳ありませんが、よろしければ教えてください。

私は標準モジュールに記録、修正するVBAしかわかりません。
・イベントに追加
・Inputbox
・右クリックのポップアップ
・WorkbookのSheetBeforeRightClick
等の概念を理解できないのです。
申し訳ありません。もう少し教えていただけないしょうか?

補足日時:2005/11/11 16:52
    • good
    • 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の基礎を少しは勉強されてから、取り掛かったほうが
いいかもしれません。

この回答への補足

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

補足日時:2005/11/11 15:45
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/11 16:44

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

このQ&Aを見た人はこんなQ&Aも見ています