Excelで別シートへの条件付コピー方法

このQ&Aのポイント
  • Excelで別シートへの条件付コピー(入出荷データを在庫データへ)の方法を教えてください
  • 入力した時点で、入出庫データ(シート名:In_out)の資産番号が一致するものを検索し、資産データ(シート名:Master)の該当する行へ値を反映させたいです
  • Excel2003でのマクロまたは関数を使用して、手作業でのコピペ作業を効率化したいです
回答を見る
  • ベストアンサー

Excelで、別シートへの条件付コピー(入出荷データを在庫データへ)

こんにちは。Access使いからすると朝飯前の内容かもしれません、、 以下ような内容のリレーショナルをExcelにて行う方法をご存知でしたら教えてください。 テーマ:PC入出庫データを都度資産データへ反映 <例> 1.入力 入出庫データ(シート名:In_out)    A    |B  |C |D    資産番号|日付|status|User Code 10   001 |1/1 |設置 |ABC * * 300  001 |3/31|回収 |ABC 2.反映 資産データ(シート名:master) 上記「入力」の10行目が入力されると    A    |B  |C |D    資産番号|日付|status|User Code * * 100  001 |1/1 |設置 |ABC 300行目が入力されると    A    |B  |C |D    資産番号|日付|status|User Code * * 100  001 |3/31|回収 |ABC となるように、 入出庫データ(シート名:In_out) を入力した時点で 資産シート(Master)の 資産番号が一致するものを検索して、In_outの列BCD 値を Msasterの列BCDへ反映したいのです。 データは入出庫:1万件 資産:三千件程度です 識者の方の知恵がお借りできれば幸いです。 Accessへ乗り換える予定ですが、開発までやや時間がかかるので(来年2月)その間に、手入力でコピペするのも非効率なので、マクロまたは関数で解決できないものかと思い、質問させていただきました。 よろしくお願いします。 ちなみに、Excel2003です。

  • Yepes
  • お礼率94% (1652/1746)

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんなイメージかな? 1.データはシート名 In_out に入力して行く 2.シート名 In_out の最終行のみ更新対象とする(途中行のデータを変えても処理しない) 3.シート名 In_out のA列最終セル値をシート名 master のA列から探し、見つかった場合は上書き、見つからない場合は追加する。 Sub Test() Dim r As Range, tr As Range, myRow With Worksheets("master")  Set r = Worksheets("In_out").Range("A65536").End(xlUp)  On Error GoTo ER:  myRow = Application.WorksheetFunction.Match(r.Value, .Columns(1), 0)  Set tr = .Range("A" & myRow)  If MsgBox("マスターシートの " & myRow & "行目に転記します。" & _    vbCrLf & "よろしいですか?", vbExclamation + vbOKCancel, _    "データ修正") <> vbOK Then Exit Sub  r.Offset(0, 1).Resize(1, 4).Copy _       Destination:=tr.Offset(0, 1).Resize(1, 4) End With  Exit Sub ER:  If MsgBox("新規データですのでマスターシートに追加しますか?", _      vbQuestion + vbYesNo, "データ追加") <> vbYes Then Exit Sub  Set tr = Worksheets("master").Range("A65536").End(xlUp).Offset(1, 0)  r.Resize(1, 5).Copy Destination:=tr.Resize(1, 5) End Sub あまりスマートじゃないけど。

Yepes
質問者

お礼

ご返答ありがとうございます。結果的に以下のシートモジュールでできました。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tSh As Worksheet Dim fRng As Range Dim fR As Range With Target If .Cells.Count > 1 Then Exit Sub If Intersect(.Cells, Range("D2:D65536")) Is Nothing Then Exit Sub Set tSh = Worksheets("master") With tSh Set fRng = .Range("A2", .Range("A65536").End(xlUp)) End With Set fR = fRng.Find(.Offset(, -3).Value, , xlFormulas, xlWhole) If fR Is Nothing Then MsgBox "該当番号が見つかりません。" Exit Sub End If If fR.Offset(, 1).Value2 > .Offset(, -2).Value2 Then MsgBox "最新データでは有りません。" Exit Sub End If fR(1, 2).Resize(, 3).Value = .Offset(, -2).Resize(, 3).Value End With End Sub

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

例では資産番号がダブってる(001)けど、ユニークじゃないと特定出来ないですね。 「資産シート」データを選択し、データ-フォームでフォームを開いて検索条件で資産番号を検索して直接「資産シート」に入力するのは?

Yepes
質問者

お礼

ご返答ありがとうございます。 >資産番号がダブってる(001)けど、ユニークじゃないと ご指摘の通りですが、今のところ、 in_outは重複OKです (日付とセットで、ユニークにしています) master はユニークです in_out:Master = n:1 です

関連するQ&A

  • 条件に合致するものだけを別シートに表示

    エクセル2003を使用しています。 Sheet1に日付とともに商品出荷データが入力されています。 Sheet2~Sheet13までの12ヶ月分のシートにsheet1で入力された日付を元に、抽出表示したいと思います。 sheet1 商品コード 商品名 出荷日 A001 ABC 2012/6/10 A089 AZZ 2012/6/19 B006 BAA (出荷されていない物は日付の入力無し) C006 C4587 2012/7/6 Sheet2以降のA1セルには、201206 のように年月を入力しておき、抽出条件とします。 また抽出表示項目は、Sheet1に入力されている全ての情報です。 (商品コードから出荷日まで) このような表示にさせたい場合の、式を教えて頂けないでしょうか?  どうぞ、よろしくお願いします。

  • エクセルのシート間のデータ抽出について

    (1)シートは「集約」用のシートと、「各月」のシートがあります。「集約」シートは、A列には日付、B列には番号、C列には備考欄という表があります。各月のシートも同様ですが、番号の項目だけどの月も「1、2、3,4~」と通し番号でつけてあります。通し番号の数は月によって異なります。多くなる月もあれば、少なくなってしまう月、何もない月もあります。(2)「集約」の日付なり番号なりを入力すると、各月のデータが一つの表に反映されるようにしたいです。何かよい手立てはないものでしょうか?よろしくお願いします。

  • エクセルのデータを別のシートに

    今日は。 シート(1)にある日付(1~31)の後の複数のデータをシート(2)に作ったカレンダーに反映したいのですが、その方法を教えていただけないでしょうか? 例えば、シート(1)のEの列(E2)に18を入れると、シート(2)に作ったカレンダーの18日のセルの中にE3~E5の複数の情報が反映されるという具合です。 よろしくお願い致します。 kyshtoo

  • エクセル 別シートの祝日データを使いたいのですが

    シート1で条件付き書式で祝日の色を変えるときに、数式にcountifを使い、あらかじめシート2に名前定義してある祝日データの書かれたセルを用いて=countif(祝日,$A1)としてるんですが、シート1には反映されません。 シート2の日付は色が変わりますので間違ってはいません。 これではなんのための名前定義なのか意味がわかりません。 どうしたら別シートにも反映されますか?

  • VBAを使ってセルを検索後別シートのデータを自動入力したいです。

    見ていただきありがとうございます。 エクセルの2000VBAを使って次のようなことを考えています。 シート2に以下のようなデータがあります。 2006/7/20 コード 数量  100  200   200  400 データの数は日によって違います。 シート1には以下の表があります。横軸にはコード縦軸には日付が入っており各対応するセルに数量が入っています。       100  200  300  400 ....←コード 2006/7/1  20  40  100  800 2006/7/2  50  60  200  500   .   .   . 2007/6/30  このような場合、シート2にコマンドボタンを設けて押したときシート2の日付とコード番号によりシート1の表の検索を行って対応するセルにシート2のデータを転記したいのです。シート2のデータは本日分のデータが入った時点でシート1への転記を行います。(1日一回です) また、シート1の表は2007/6/30(これ以降は必要ないので)までの日付がすでに入力されており明日以降のデータの入るセルは空白になっております。 よろしくお願いします。

  • エクセルでシートを探しデータをフォームにコピー

    見ていただきありがとうございます。 エクセルを使って次のようなことを考えています。 発注のあったお客様の顧客番号001~300(順不同)が毎日更新されてきます。 A1には顧客番号、B2には日付、B3とC3にはコード 数量、B4からC13にデータがあります。 .........A............ B................C 1.....001 2...............2013/7/7 3.................コード..........数量 4..................AA1.............10  5..................AB2.............15 6..................BA1.............20 7..................BB1.............5  8..................CA2.............10 9..................CB1.............15 10................DA1.............10  11................DB2.............15 12................EA1.............20 13................EB2.............30 A1がシート名になってます。 ************************************************************************ このような場合、sheet1にコマンドボタンを設けて押したとき001~300のシート名がA列に抽出され、 順番にデータが見積もり、納品書、請求書のフォームに転記できるようにならないでしょうか? 各フォームのセルは共通でB1に顧客番号、C1に日付、B4~B13コード 数量、C4~C13に数量を コピーしたい。 教えてもらえたらうれしいです。

  • エクセル 別シートにあるデータを。

    いつもお世話になります。 エクセルで顧客リストを作るのに、sheet1は店名が空欄の顧客リストで、sheet2に各店の郵便番号・住所等一覧リストがあって、そのsheet1の一覧リストに店名を入力すれば、自動的にsheet2にある住所等が出てくる。と言う感じに反映させたいのですが、どうすれば良いですか?

  • エクセルでシート間をまたぐ関数について

    http://okweb.jp/kotaeru.php3?q=1437319で質問をさせて頂き、オートフィルの回答を頂いたのですが、補足を付け加えて、 再度質問させてください。 仕事で効率化を図るため関数が必要となったのですが、 シート間をまたぐ関数が分かりません。 例えば、    A      B      C     1 機械番号  担当者番号   日付 _________________    2  AA-05     H-6    6/2 3  ES-12     R-9    5/31 4  LT-32     G-118   6/8 5  NB-45     H-6    6/5 6  AA-05     R-9     5/25 7  NB-45     G-118    5/5  <Sheet1>                    という表がSheet1にはあって    A      B      C     1 担当者番号  機械番号    日付 _________________    2  H-6      AA-05    6/2 3          NB-45    6/5 4  5  R-9      ES-12    5/31 6         AA-05    5/25 7 8  G-118     LT-32    6/8 9          NB-45    5/5   <Sheet2>                      という風な集約用の表 Sheet1に入力したデータをSheet2で指定の項目にしたがって集約させたいと考えています。 データが手元に来るのが少しずつなので、 あるデータから入力していき、Sheet2で担当者番号を入力すると、それに伴うデータが集約されて 出来れば一つのセルに反映させたいのです。 データの量も多く、その都度オートフィルで拾い上げて、 Sheet2に持っていくと、データが重複する恐れがあるので Sheet2で担当者番号を入力すると、機械番号・日付を自動表示させたいです。 こんな事って出来るのでしょうか? どなたか教えてださい。

  • エクセル・別シートに集計

    他の方のものを見ても自分に当てはめることができす、質問させて頂きます。 エクセル2010を利用しています。初心者です。よろしくお願いします。 同じエクセルブックにデータのシートが3枚あり、その内容をまとめて抽出させるシートを同じブック内に作成したいです。どなたか方法を教えていただけないでしょうか?? シート3枚のデータの合計を、○のついたセルを都道府県別に数え、データが更新されれば集計も更新できるようにしたいです。 (ちなみに前任者が作成した同じようなシート(別データを集計)は、集計シートにデータの最新番号を入力するセルがあり、そこに最新のデータ番号入力すると、データが反映されるようになっていました。同じにできなくてもよいです。) データの内容は「データ番号」「氏名」「住所」「都道府県」「電話番号」・・・「○or空欄」といった感じです。 同じ様な質問をたくさん閲覧したのですが、自分のデータに当てはめることができませんでした。 何卒よろしくお願いいたします。

  • excelでのシート別条件比較

    別シートでの項目の比較を行い等しければデータをコピーしたいのですがうまくいきません。教えて下さい。 現状 シート1・1日の各項目のデータ入力及び集計 シート2・31日分のデータ(シート1で入力・集計した)及び累計  シート1でのデータをシート2へコピーしています。 シート1に日付指定項目を設けて、シート2の該当日にマクロボタン で転送できるようにしたいのですが、出来ないので困っています。 シート1からシート2へコピーするマクロは作ったのですが それにVBAで日付どうしの比較を付けたいのですが構文エラー が出ます。 If Range("B1").Value & "日" = Sheets("シート2").Select Range("J2").Value Then マクロ記録のコピー処理 End If VBAど素人です。宜しくお願い致します。

専門家に質問してみよう