人に聞けない痔の悩み、これでスッキリ >>

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

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

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

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

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

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

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

このQ&Aに関連する最新のQ&A

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
    • 1
この回答へのお礼

確認できました。ありがとうございました。
私自身、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に関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q[エクセル]行の挿入、シート間で連携できますか?

こんにちわ。

販売管理をエクセルで行っております。
その際にちょっと出来ないかな??と思うことが出てきましたので書き込みました。

たとえば、新規作成のBookでSheet1~3があります。
やりたいことは、
Sheet1の4行目と5行目の間に2行を挿入した場合、連携してSheet2やSheet3の4行目と5行目のように同じ箇所に同じ追加した行数分、挿入されて欲しいわけです。

ちょっと説明が難しいな・・・、言いたいこと伝わってますかね??
これが出来たらすっごい効率Upなんですが・・・出来ませんか??

Aベストアンサー

変更したいシートのタブ(下のsheet1)を変更したいシートのところだけ、Ctrlを押しながら選択し、どのシートでもかまいませんから行なり、列なりを挿入する。これで、選択したシートも同じ部分だけ変更されます。

Qエクセルでの複数シートへの同時行挿入

エクセルで某使用料金の集計表を作成しており、
シート1で実数値を入力し、シート2で単位千円の提出用資料を作成しております。
単純に、シート1で入力された数値を、シート2で同じフォーマットで、INT関数を使用しているだけなのですが、
シート1で新規に行を挿入した場合、シート2でも同様に行を挿入し、数式をコピーして対応しております。

しかしながら、毎月、新規で行を挿入するケースが増え、油断するとシート2への行挿入を忘れるなどの事態が発生しております。

もっと簡易な方法で、シート1で作成した表の、千円単位に変換した表を作成することはできないのでしょうか?

できるだけ易しい方法を教えて下さい。

Aベストアンサー

>シート2A1セルに上記数式をコピーしたのですが、NAMEの表示が出てうまくいきません。

考えられる理由1)
ご利用のシートが添付図左のように「A1」になっていないで,添付図の右側のように行も列も123表示になっているときに回答の式をコピーして入れると#NAME?エラーになります。
行も列も123表示で使っていたときは,数式は1行1列のセルに
=IF(INDEX(Sheet1!C,ROW())="","",INT(INDEX(Sheet1!C,ROW())/1000))
のように入れてコピーします。


考えられる理由2)
コピーして入れたのではなくご自分で数式を記入していて,誤記があると#NAME?エラーになります。
記入した式をよく再確認してください。
何が悪いのかご自分で見つけられないときは,あなたがご自分のエクセルに入れて実際にエラーが出ている「その数式」を実際のエクセルからコピーして掲示し教えてください。


考えられる理由3)
実は出ているエラーが#NAME?ではなく#REF!だった場合は,シート名が実際にあなたが使っているモノと違っています。
実際のシート名に数式を直さなければいけません。

>シート2A1セルに上記数式をコピーしたのですが、NAMEの表示が出てうまくいきません。

考えられる理由1)
ご利用のシートが添付図左のように「A1」になっていないで,添付図の右側のように行も列も123表示になっているときに回答の式をコピーして入れると#NAME?エラーになります。
行も列も123表示で使っていたときは,数式は1行1列のセルに
=IF(INDEX(Sheet1!C,ROW())="","",INT(INDEX(Sheet1!C,ROW())/1000))
のように入れてコピーします。


考えられる理由2)
コピーして入れたのではなく...続きを読む

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

QExcelで行が挿入したときに、自動的に別シートにも挿入したい

お世話になります。

例えばシート1の11行目に行が挿入された場合、
シート2の11行目にも自動的に行が追加されるような
マクロを作りたいのですが、どうも検索で情報が
見つかりませんでした。

ご存知のかたがおられましたら、よろしく
お願いいたします。

Aベストアンサー

こんにちは。

ご質問は、簡単そうにみえて、あまり簡単ではありませんね。イベントには違いはないのですが、通常のイベントとは違います。インスタンスが必要です。

実は、今回、私は、いろんなところを手抜きをしているし、おまけにクラスモジュールを使わなかったのですが、たぶん、以下で可能なはずです。ボタン自体は、本来は1つで足りるはずですが、これも手抜きです。(もし、クラス・インスタンスが必要なら、作り直します。そのほうが安全性は高いです。)

行全体と、セル単独の挿入があり、また、右クリックメニューと、標準メニューの挿入の行からの命令がありますから、それらのコマンドバーボタンにイベントをつけてあげればよいわけです。

SettingInsertButton() が、設定用ですが、後は、ThisWorkbook_Openで、自動的に設定するようにしてありますから、起動と同時に設定されます。ブックの区別はしてありませんので、必要なら、ThisWorkbook.Sheet1 というようにしてください。なお、Sheet1はオブジェクト・ネームで、シート名ではありませんから、お間違えないように。このコードは、シートモジュールや、標準モジュールに書くことはできません。(一部を除いて)

'<ThisWorkbook のみ>
Option Explicit

Private WithEvents myBtn As Office.CommandBarButton
Private WithEvents myBtn2 As Office.CommandBarButton
Private WithEvents myBtn3 As Office.CommandBarButton

Sub SettingInsertButton()
'ボタンの設定
  With Application
   Set myBtn = .CommandBars("Cell") _
   .FindControl(, 3181)
   Set myBtn2 = .CommandBars("Row") _
   .FindControl(, 3183)
   Set myBtn3 = .CommandBars("Worksheet Menu Bar") _
   .Controls("挿入(&I)").Controls("行(&R)")
  End With
End Sub


Private Sub myBtn_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Dim myRng As Range
 'セルの挿入のイベント/コマンドバーを含む
 Set myRng = Selection
 Application.EnableEvents = False
 Call myProcedure(myRng)
 Application.EnableEvents = True
End Sub
Private Sub myBtn2_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 Dim myRng As Range
 '行全体の挿入のイベント
 Set myRng = Selection
 Application.EnableEvents = False
 Call myProcedure(myRng)
 Application.EnableEvents = True
End Sub
Private Sub myBtn3_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
 Dim myRng As Range
 'メニューの挿入の行からのイベント
 Set myRng = Selection
 Application.EnableEvents = False
 Call myProcedure(myRng)
 Application.EnableEvents = True
End Sub


Private Sub myProcedure(arg As Range)
Dim myRngAdd As String
 'シート1でない場合は、除外
 If ActiveSheet.Name <> Sheet1.Name Then Exit Sub
 myRngAdd = arg.Address(0, 0)
 '行挿入
 If arg.Address(0, 0) = arg.EntireRow.Address(0, 0) Then
 '行全体
   Sheet2.Range(myRngAdd).EntireRow.Insert
 Else
 'セルの範囲
   Sheet2.Range(myRngAdd).Insert
 End If
End Sub
Private Sub Workbook_Open()
'起動時の設定
  Call ThisWorkbook.SettingInsertButton
End Sub

こんにちは。

ご質問は、簡単そうにみえて、あまり簡単ではありませんね。イベントには違いはないのですが、通常のイベントとは違います。インスタンスが必要です。

実は、今回、私は、いろんなところを手抜きをしているし、おまけにクラスモジュールを使わなかったのですが、たぶん、以下で可能なはずです。ボタン自体は、本来は1つで足りるはずですが、これも手抜きです。(もし、クラス・インスタンスが必要なら、作り直します。そのほうが安全性は高いです。)

行全体と、セル単独の挿入があり、また...続きを読む

QExcelで入力したデータを他のシートにも反映したいです

Excelでシートに入力したデータだけを他のシートに表示させたいです・・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。

シート1
 Å列    B列 C列    
キャベツ     玉   1
りんご     個   2
オレンジ    個
バナナ     本   10
きゅうり    本
ニラ     Kg  20.5

シート2
 Å列    B列 C列
キャベツ     玉  1
りんご     個  2
バナナ     本  10
ニラ     Kg  20.5

↑のように。シート1に入力したデータを入力した行ごと表示させたいです。

Aベストアンサー

》 なにぶん初心者なもので…

関数を一切使用しない方法(フィルタオプションの設定)をご紹介します。

Sheet1
1   A    B   C
1 品名   単位 数量
2 キャベツ 玉    1
3 りんご  個    2
4 オレンジ 個
5 バナナ  本   10
6 きゅうり 本
7 ニラ   Kg  20.5
8

添付図は[フィルタオプションの設定]を開始する Sheet2 を示しています。
([データ]→[フィルタ]→[フィルタオプションの設定]の手順を実行します)

QエクセルVBAで、行削除⇒別シートに自動入力をしたい

いつもお世話になります。よろしくご指導お願いします。
VBA初心者です。最近随分皆様に助けていただいています。尚、業務の関係でお助けください。

エクセルで名簿形式のデータベースシートがあります。
(山田太郎 ○○市○○町 911-1234 ・・・)
例えば、この山田さんが解約したり死亡されたりすると「行削除」をします。そのとき、別シート(シート名「解約者台帳」)に自動的に削除した行の全データをもっていきたいのです。

★解約者台帳のフィールドは、元シートと基本的に同じですが、A~AG列のデータが必要。AH列以降のデータは不要です。

解約者台帳に追加していく(新しい行=何も入力されていない行への自動入力)等のVBAのイメージを含めて、私の力ではやはりさっぱりです。どうかまたまたお助けください。お待ちしています。

Aベストアンサー

> マクロの実行ボタン等を押さず、『行削除を実行することで、自動で解約者台帳に退避(データ移行)する』イメージのVBAは可能でしょうか?

では、ご要望の「イベント」で。

データベースシートのモジュールに以下のマクロで可能と思います。
1行全部が選択された場合のみ、メッセージを表示し、確認の上で実行します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Columns.Count = 256 And Selection.Rows.Count = 1 Then
ans = MsgBox("選択した行のデータを契約者台帳に移行し、" _
+ Chr(&HD) + Chr(&HA) + " このシートから削除していいですね?", vbYesNo)
If ans = vbYes Then
With Sheets("契約者台帳")
R = .Range("A65536").End(xlUp).Row + 1
MsgBox "契約者台帳" & R & "行に移動します。"
.Rows(R).Value = Selection.Value
End With
Selection.Delete Shift:=xlUp
End If
End If
End Sub

> マクロの実行ボタン等を押さず、『行削除を実行することで、自動で解約者台帳に退避(データ移行)する』イメージのVBAは可能でしょうか?

では、ご要望の「イベント」で。

データベースシートのモジュールに以下のマクロで可能と思います。
1行全部が選択された場合のみ、メッセージを表示し、確認の上で実行します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Columns.Count = 256 And Selection.Rows.Count = 1 Then
ans = MsgBox("選択した行のデータを契約...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q(Excel)あるセルに文字を入力しただけで、同じブック内のほかのワークシートにも、同じ文字が自動的に入るようにするには?

こんにちは。
質問内容はタイトルのとおりです。

あるワークシートのあるセルに文字を入力すると、ほかのワークシートのセルにも同じ文字が自動的に書き込まれる方法を知りたいです(ブックは同じ)。複数のワークシートを制御するには、やはりマクロを使うのでしょうか?

よろしくお願いします。

Aベストアンサー

clam_chowderさん、こんにちは。

Sheet1のA1にたとえば「100」と入力しますね。
Sheet2のA1に、これと同じ数値を表示するには、
 =Sheet1!A1
でOKです。

数式をいれるのが苦手なら、
Sheet2のA1セルで「=」を入力すると、数式入力状態に入りますから、
ここでSheet1のシートタブをクリックし、
リンクしたいA1セルをクリックしてEnterすると、
自動的にさきほどと同じ式が入ります。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub


人気Q&Aランキング