• ベストアンサー

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

いつもお世話になります。よろしくご指導お願いします。 VBA初心者です。最近随分皆様に助けていただいています。尚、業務の関係でお助けください。 エクセルで名簿形式のデータベースシートがあります。 (山田太郎 ○○市○○町 911-1234 ・・・) 例えば、この山田さんが解約したり死亡されたりすると「行削除」をします。そのとき、別シート(シート名「解約者台帳」)に自動的に削除した行の全データをもっていきたいのです。 ★解約者台帳のフィールドは、元シートと基本的に同じですが、A~AG列のデータが必要。AH列以降のデータは不要です。 解約者台帳に追加していく(新しい行=何も入力されていない行への自動入力)等のVBAのイメージを含めて、私の力ではやはりさっぱりです。どうかまたまたお助けください。お待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> マクロの実行ボタン等を押さず、『行削除を実行することで、自動で解約者台帳に退避(データ移行)する』イメージの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

yastaro
質問者

お礼

merlionXXさん、何度もお手間を頂き、解決策をご回答をいただきまして、感謝いたします。要望内容に対して充分に動作でした。本当にありがとうございます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

よくわかっておられる方の回答の後に、非力の小生が書くのは気が引けますが、 エクセルVBAで、行削除を行われたとき、それを察知して、飛んできてくれる、、イベントにWorkSheet_Lines_Delete のようなものが設けられていないとできないのではないですか。 やるとすると、コマンドボタンを1つ削除専用に設け、そのクリックイベントに Private Sub CommandButton1_Click() Selection.EntireRow.Copy Worksheets("sheet10").Activate d = ActiveSheet.Range("a65536").End(xlUp).Row ActiveSheet.Cells(d + 1, 1).Select ActiveSheet.Paste Worksheets("sheet2").Activate Selection.EntireRow.Delete End Sub でとりあえずどうでしょうか。 少数例ではテスト済み。 Sheet2が元シートで、削除分の累積がSheet10の例です。 だめでしょうかね?

yastaro
質問者

お礼

imogasiさん、いつもありがとうございます。ご回答を感謝いたします。

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.5

>このエクセルファイルの作業をする担当の者がエクセル >そのもの初心者であること等から、・・・ 相手が素人となると、簡単な方法では何をやっても難しいかと・・・ Wendy02さんのおっしゃる方法が、確実な方法となるんでしょうが、そこそこちゃんとVBAがかけるスキルが必要ですよね(すべての削除機能を殺すとかはそれなりの実務経験がないと難しいと思う)。 わたしなら、この場合削除自体をさせません。 間違って、他のデータを消されたら取り返しがつかなくなることがあるからです。 実際にはフラグを立てておくだけと言う運用をします。具体的には、一列「解約・死亡」とでも列を作っておいて、そこに1とか入力してもらうだけにします。 データは残したままでもいいし、一定の期間で、フラグの立っている行をまとめて別シートに移してもいい(これは自分でやる)。 いちばん簡単で安全な解決策と思いますがどうでしょう?

yastaro
質問者

お礼

ご回答ありがとうございます。Wendy02さんとbanker_Uさんのアドバイスを受けて慎重に検討させていただくつもりです。確かに解約者のデータを残したままという方法も安全であり、オートフィルタ等さえ担当者が使えばクリアできる問題かもしれません。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 >『行削除を実行することで、自動で解約者台帳に退避(データ移行)する』イメージのVBAは可能でしょうか?イベント? 書いても無駄になってしまうかもしれませんので、ヒントだけ書いておきます。 行の削除ボタンは、いくつかある上に、ワークシートの淵(行番号の灰色の場所)からの削除もありますから、通常のイベントでは役に立ちません。WithEvents で、行の削除ボタンのいくつかに、インスタンスを設けます。 ただ、私個人は、そういう方式のマクロは作りません。あくまでも、シート上のどこかに、例えば、メニューに削除ボタンを別につけます。他の人が使う場合は、本来の機能のある行の削除ボタン全てを、使えないようにしておきます。

yastaro
質問者

お礼

Wendy02さん、いつもご指導ありがとうございます。 初心者の私にはご指導内容が難しくて消化不良気味ですが、いつもやさしいご回答を感謝申し上げます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

名簿形式のデータベースシートで削除する行全体を選択し、下記のマクロを実行します。 Sub TEST() With Sheets("契約者台帳") R = .Range("A65536").End(xlUp).Row + 1 MsgBox "契約者台帳" & R & "行に移動します。" .Rows(R).Value = Selection.Value End With Selection.Delete Shift:=xlUp End Sub

yastaro
質問者

補足

ありがとうございます。動作の確認ができました。 ただ、このエクセルファイルの作業をする担当の者がエクセルそのもの初心者であること等から、マクロの実行ボタン等を押さず、『行削除を実行することで、自動で解約者台帳に退避(データ移行)する』イメージのVBAは可能でしょうか?イベント?というものでしょうか?ご指導お願いいたします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Sheets("Sheet1").Select Rows(1).Cut '切り取る行番号(行削除) Sheets("Sheet2").Select Rows(2).Insert Shift:=xlDown '挿入する行番号 Range("AH2:AG2").Clear Range("AH2")=Date '削除日 とすると、最新の削除データを上の行に置くことが出来ます。

yastaro
質問者

お礼

hana-hana3さん、ご回答をありがとうございます。お礼が遅くなって申し訳ありませんでした。

関連するQ&A

  • エクセルのシートを同時に行削除、行挿入させて自動連動させたい

    エクセルで、横(列)256列以上のデータを入力したいため、シートを分けざるをえません。その場合、次のようなことがしたいとき、どのようにすればよろしいでしょうか?(やりたいことの結論下記(3)になります。) エクセルのシートが2つ以上あるとします。 (1)「sheet1」には、基本データ(名簿録のようなもの・氏名ふりがなアイウエオ順配列) (2)ふたつめ以降のシートには、毎月変更するデータを入力し、「sheet1」の名簿の個々のIDに対応したそれぞれ同じ行番号に入力することになります。 (3)「sheet1」で行削除(名簿対象者解約)や行挿入(新規契約者)を任意の場所で行いたい。それに連動して、2つ目以降のシートでも同じ列で行削除・行挿入を自動でしたい。 ★この簡易システムを作成するのはマクロ初心者の私であり、日々の入力作業するのはエクセルそのものが初心者である他者となります。 ★行挿入、行削除のときだけシートの同時選択を手作業でしてもらうことは想定していません。そのあたりをも含めた自動化の智恵がでてこないのです。 以上、よろしくお願いします。

  • エクセルで重複行を削除

    エクセルで重複行を削除したいのですが、 どうすればいいでしょうか? たとえば名前が1列に並んでいて ××○○ 山田太郎 △田□□ 山田太郎 こんなとき、山田太郎を1行だけに、 まとめたいのですが・・・ データが多いのでソートして 1件1件削除していくのも時間がかかります。 何かいい方法がありましたら よろしくお願いします。

  • エクセルVBAでご教示ください

    シート1のB5にNo、C5に住所、D5に電話・・・・・CXまで入力したものをコピーして シート2のB列の同じNoの行に貼り付けるVBAをご教示ください。 おこないたいことは、シート2に1500ほどある台帳で、修正をのある行データをシート1に No入力で呼び出し、修正して、修正したデータを元台帳に戻すということを行いたいのです。 No入力で呼び出すVBAは何とか出来ていますが、シート2の同じNoの行に貼り付けるVBAが わかりません。 どなたか、よろしくお願いいたします。

  • VBA 特定の行を別シートへコピー・削除

    下記のように、VBAで特定の行を抽出して別シートへコピーし、コピーした行については元リストデータを削除したいです。 具体的には、【出荷sheet】(C列注文番号は、出荷があった時に入力済)へ、注文番号に対応する行を【リストsheet】から抜き出してコピーし、コピー後は、【リストsheet】から該当行を削除したいです。 検索により調べてもうまく合致する回答が見当たらず困っています。 VBAの理解度は未熟ですが、何卒ご教授いただけると幸いです。 【リストsheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1   A111   鉛筆  ・ ・ ・ ・ ←コピー後、削除  2   1/2   B222   ペン  ・ ・ ・ ・ 3    1/5  C555 消しゴム・ ・ ・ ・ ←コピー後、削除  ・ ・   ⇓ 【出荷Sheet】 A列 B列  C列   D列 ・ ・ ・ J列 No. 日付 注文番号  品名 ・ ・ ・ ・ 1  1/1 A111   鉛筆   ・ ・ ・ ・ 3   1/5   C555 消しゴム・ ・ ・ ・

  • エクセル 関数を自動的に入力するVBAで困っています

    VBA初心者です。 エクセルの入力シートで行ごとにデータを下記のように入力しています。      A      B       C 1   日付    品番     商品 2   10/25    10     りんご 3   10/26    20     みかん 4 5 6 2行目から順にデータを入力すると自動的にC列にVBAで VLOOKUP関数をセットして商品を検索したいのですが 上手くできませんでした。 教えてください。よろしくお願いします。

  • EXCELで分かれたシート間の同一データ行を自動削除して結合したい

    EXCELで、シート1、シート2に分かれたデータがあります。 それぞれのシート間でC列~F列の値が重複している行、シート1側のG列の数値がマイナス になっている行を自動で削除してからデータを1つのシートに結合する方法を探しています。 条件は、シート1側の重複データ行のみを削除し、シート2側のデータが必ず残る方法であ る必要があります。G列のマイナス行を削除するのはシート1側のみです。 シート1がA列~I列、約3万行、シート2がA列~K列、約1千行くらいです。 シート2側のみJ列~K列(数値データが入っています)が存在しますが、シート1側は空欄です。 列の数は変わりませんが、行数が都度変動しますのでマクロでコピー先のセル位置を決め打ちする 事が出来ません。 1つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • Excelで条件別にシートを振り分ける方法

    初心者です。よろしくお願いします。 Excelで条件別にシートを振り分ける方法を教えてください。 名簿の管理をしています。 シート1にNoや名前を入力し、条件ごとに別シートに行ごと自動で振り分ける方法がありますか? 情報を入力するのは、シート1のみで、 シート2~6を自動で振り分けたクラス名簿という形にしたいです。 現在、以下のようにシート1を作成してます。     列A   列B   列C   行1  No  氏名   クラス  行2  1   花子    A 行3  2   太郎    C 行4  3   二朗    B 行5  4   京子    B 行6  5   史郎    B 行7  6   典子    C 行8  7   公子    A ・ ・ これを、シート2はAクラス、シート3はBクラスという具合に、Noと氏名を振り分けたいです。 よろしくお願いいたします。

  • エクセル データーベース 削除したレコードを自動で別シートにどんどん追加していく方法は?

    いつも大変お世話になっております。 エクセルのデータベースで、社員名簿を作りました。 名前、住所、職階級など、様々なデータが横1列に入力してあります。 入力しているシート名は「名簿」です。 H列に、社員、契約社員、派遣、パート、退職 といった情報を入れています。 この中で、 退職 とある人の分の情報を別シート(シート名 退職者 )に移して、削除したいのです。 今までは手作業でしておりましたが、これを自動でする方法はないでしょうか? 「名簿」シートで削除したものが、「退職者」シートの一番上、もしくは一番下にどんどん追加されるようにしたいのです。 どうぞよろしくお願いします。

  • エクセル:マクロでこんなことはできますか?

    【シート1】に名簿があります。 1 山田太郎 | ○○市○○町 | 電話 ・・・・ 2 山田花子 | ○△市  |・・・ といった一般的なものです。 【シート2】は、データ入力用としています。 A2~A4の3つを結合し、シート1から”山田太郎”を参照(INDIRECT関数使用) A5~A7の3つを結合し、同様に山田花子を参照 B2,B3.B4、C2,C3,C4は必要データを入力しています。 ★やりたいこと 【シート1】の山田太郎(1行すべて)を削除したときに、 【シート2】の2~4行に入っている山田太郎さんに関するシートを自動的に削除したい。 以上です、よろしくお願いします。

  • セルに入力があったら別のシートに自動で入力させたい

    似たような質問もあり自分でもいろいろ調べたのですが、 解決できなかったのでお願いします。 エクセルは2011で少し使える程度、あまり詳しくはありません。 シート1に「名前」「一回目」「二回目」という列があります。 そこの「一回目」の列に入力があった場合のみ別のシート2に自動で入力(抽出)されるようにしたいです。 例としてはこんなかんじです。↓ シート1 名前  一回目  二回目 佐藤  1         山田       1    鈴木       1 田中  2           とあったら、「一回目」に入力があった行からシート2に シート2 名前  点数 佐藤  50 田中  100 こんなかんじでシート2には「名前」と「一回目」に入力された数値に50掛けたものが自動で表示されるようにしたいのですが、 このようなことは可能でしょうか? 説明がわかりにくいかも知れませんがよろしくお願いします。

専門家に質問してみよう