
エクセルで、横(列)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
IF関数などを使って条件に合った「行」を削除するような機能はありますでしょうか?
Excel(エクセル)
-
8
エクセル:参照しているセルが削除されても数式の参照セル値を変えない。
Excel(エクセル)
-
9
Excelに自動で行の増減をしたいです。
Excel(エクセル)
-
10
エクセルのオートフィル機能を使ったときにINDIRECT関数の引数がうまく自動参照になりません
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
【エクセル】シートのロックで...
-
表示倍率を変更させない方法
-
エクセルの担当者別にシートを...
-
エクセル、日々の集計整理方法。
-
マクロボタンを押すと、ファイ...
-
「24日の0時」って・・・
-
エクセルで最高値、最低値の日...
-
「時間」、「期日」、「日付」...
-
エクセルのチェックボックスを...
-
日付の大小の表現
-
差し込み印刷に当日の日付が入...
-
エクセル マクロ 名前を付けて...
-
Excelについて
-
回覧板の日付について質問です...
-
Excel関数 「日付を入力...
-
会社や役所などに提出する書類...
-
エクセル関数で…
-
EXCELで日付を****年上期、****...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
表示倍率を変更させない方法
-
【エクセル】シートのロックで...
-
エクセルの担当者別にシートを...
-
エクセルで、2つのシートにある...
-
エクセルで別シート、または別...
-
VBAで1つのブックに転記する方...
-
エクセルVBAでデータ検索について
-
エクセル◎○の人は、一つ昇格し...
-
エクセルでデータを簡単に登録...
-
エクセルVBAで65536レコードを...
-
エクセルのマクロ。 お世話にな...
-
教えてください!エクセルのシ...
-
シートを串刺しで抽出したいの...
-
マクロを業務で生かしたい!
-
エクセル表作成についてお分か...
-
エクセルVBAの文字列の部分一致...
-
エクセルで商品ごとのリストフ...
おすすめ情報