エクセルで、横(列)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
エクセルの参照元ブックで行の挿入を
Excel(エクセル)
-
10
別シートのセルを絶対参照にする
その他(Microsoft Office)
-
11
エクセルでの複数シートへの同時行挿入
その他(Microsoft Office)
-
12
ある列のセルに特定の文字が入っていたら他のセルに決まった文字を入れる
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
筆王への住所録データ取り込み...
-
エクセルの担当者別にシートを...
-
【エクセル】シートのロックで...
-
エクセル スクロールバー
-
エクセルのシートを同時に行削...
-
表の値を別の表にコピー
-
エクセルVBAで65536レコードを...
-
「時間」、「期日」、「日付」...
-
「24日の0時」って・・・
-
エクセルのチェックボックスを...
-
差し込み印刷に当日の日付が入...
-
エクセルで最高値、最低値の日...
-
パソコンで購入したデーターが...
-
回覧板の日付について質問です...
-
日付の大小の表現
-
エクセルの列が左右逆に・・・・
-
コンピューターで2進法が採用...
-
Excel関数 「日付を入力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでエクセルシートを更新...
-
excelで、セル内に文字が入力さ...
-
エクセルのシートを同時に行削...
-
【エクセル】シートのロックで...
-
表示倍率を変更させない方法
-
エクセルの担当者別にシートを...
-
エクセルで、2つのシートにある...
-
エクセルで別シート、または別...
-
エクセルのマクロ。 お世話にな...
-
エクセルVBAでデータ検索について
-
同一セルに入力規則のリストと...
-
エクセルシートの統合
-
STAT VIEWが使えない!!!
-
旬ごとの集計方法
-
エクセルで、作った年間カレン...
-
ファイナンシャルプランナーの...
-
エクセル◎○の人は、一つ昇格し...
-
エクセルVBAで65536レコードを...
-
教えてください!エクセルのシ...
-
シートを串刺しで抽出したいの...
おすすめ情報