エクセルで、横(列)256列以上のデータを入力したいため、シートを分けざるをえません。その場合、次のようなことがしたいとき、どのようにすればよろしいでしょうか?(やりたいことの結論下記(3)になります。)
エクセルのシートが2つ以上あるとします。
(1)「sheet1」には、基本データ(名簿録のようなもの・氏名ふりがなアイウエオ順配列)
(2)ふたつめ以降のシートには、毎月変更するデータを入力し、「sheet1」の名簿の個々のIDに対応したそれぞれ同じ行番号に入力することになります。
(3)「sheet1」で行削除(名簿対象者解約)や行挿入(新規契約者)を任意の場所で行いたい。それに連動して、2つ目以降のシートでも同じ列で行削除・行挿入を自動でしたい。
★この簡易システムを作成するのはマクロ初心者の私であり、日々の入力作業するのはエクセルそのものが初心者である他者となります。
★行挿入、行削除のときだけシートの同時選択を手作業でしてもらうことは想定していません。そのあたりをも含めた自動化の智恵がでてこないのです。
以上、よろしくお願いします。
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
この回答への補足
さっそく、ありがとうございます。勤務時間の都合で来週になりますが、試したあとにあらためてお礼申し上げます。(自宅でネットがつながっていないので申し訳ありません)
補足日時:2005/11/11 20:02確認できました。ありがとうございました。
私自身、VBAの可能性を今までの標準モジュールへの記録だけという段階を超えて広がりそうで感謝します。
No.3
- 回答日時:
マクロで行った作業は、「元に戻す」や「Ctrl+Z」で実行前に戻せません、ということです。
<undoがきかないなので、挿入はいいですが、削除の場合注意が必要となります。
それと、多少ヨコ気味ですが、#2さんの補足にある事項ですが、
多少はご自分で調べられましたでしょうか。
インターネットを使われているのですから、下記のようなHPはたくさんありますよ。
参考URL:http://www.sk2.aitai.ne.jp/~happy/
ありがとうございます。小さな質問にまでお答えいただき、感謝します。ネットでVBAを教えてくれるHPがあることさえ知らなかったです。お恥ずかしい限りです。自宅でネットをつなげてなく、職場でもゆっくり見ることができないのであらゆる意味でわからないことだらけでした。ただ、最近教えてGOOと出会って、VBAがかなり奥が深いものだと知りました。先に教えてくださったマクロについてもあらためて感謝申し上げます。私にとって大きな進歩です。
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
この回答への補足
ご回答ありがとうございます。マクロ初心者のため、あつかましくもうかがって申し訳ありませんが、よろしければ教えてください。
私は標準モジュールに記録、修正するVBAしかわかりません。
・イベントに追加
・Inputbox
・右クリックのポップアップ
・WorkbookのSheetBeforeRightClick
等の概念を理解できないのです。
申し訳ありません。もう少し教えていただけないしょうか?
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の基礎を少しは勉強されてから、取り掛かったほうが
いいかもしれません。
この回答への補足
ご回答ありがとうございます。すみません。
(3)の「同じ列で・・・」は「同じ行で・・・」の間違いです。ご回答内容を今から確認してみます。ありがとうございます。
ありがとうございました。できました。
ところで、"undo"とは何でしょう?何はともあれ、まずは御礼まで。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) 単価シートから単価をエクセル関数で自動取得する方法 1 2023/07/02 22:00
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
エクセル 行の挿入すると別シートに行が挿入され、関数も自動更新される方法
Excel(エクセル)
-
エクセルの参照行の挿入による追加と行の削除に対応できる関数を教えてくだ
Excel(エクセル)
-
[エクセル]行の挿入、シート間で連携できますか?
Excel(エクセル)
-
-
4
シートを同期させるには?(行の削除を同期させるのは可能?)
Excel(エクセル)
-
5
Excelで行が挿入したときに、自動的に別シートにも挿入したい
Excel(エクセル)
-
6
行、列の挿入がリンク先に反映できないでしょうか
Excel(エクセル)
-
7
リンク元の行を削除すると♯REF!が表示されます。
Excel(エクセル)
-
8
エクセルでシートにリンクを貼り付けているのですが元シートに行を挿入した
Excel(エクセル)
-
9
エクセル。行を挿入すると、関数が反映されない
Windows 10
-
10
エクセルでの複数シートへの同時行挿入
その他(Microsoft Office)
-
11
行を削除しても関数の参照範囲がずれないようにしたい
Excel(エクセル)
-
12
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
13
別シートのセルを絶対参照にする
その他(Microsoft Office)
-
14
【VBA】複数のシートの指定した列を非表示・表示をさせたい
Excel(エクセル)
-
15
エクセルのVBAで日付を検索し転機したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
同一セルに入力規則のリストと...
-
エクセルで別シート、または別...
-
表示倍率を変更させない方法
-
エクセルのチェックボックスを...
-
「24日の0時」って・・・
-
差し込み印刷に当日の日付が入...
-
エクセル マクロ 名前を付けて...
-
エクセルで最高値、最低値の日...
-
パソコンで購入したデーターが...
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
日付を昇順で並び替えし、空白...
-
ACCESSで日付ごとに自動連番(...
-
エクセルで数字から名前に変...
-
Accessで、定型入力を使って年...
-
Excel:セルに入力されている日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
表示倍率を変更させない方法
-
【エクセル】シートのロックで...
-
エクセル表作成についてお分か...
-
エクセルの担当者別にシートを...
-
エクセルVBAで65536レコードを...
-
Excelのマクロで、開いた時に、...
-
同一セルに入力規則のリストと...
-
エクセルで、2つのシートにある...
-
エクセルシートの統合
-
エクセルで更新日時を表示したい。
-
Excelで、表に小計と合計を入れ...
-
教えてください!エクセルのシ...
-
マクロ>指定した範囲をテキス...
-
STAT VIEWが使えない!!!
-
ワードの差し込み印刷について
-
エクセルVBAの文字列の部分一致...
-
エクセルで別シート、または別...
おすすめ情報