• 締切済み

データを各シートに自動振り分け

データシートA2にデータを貼付けると営業所ごとに各シートにデータを振分してほしいです。データシートは都度上書きとなりますが、振分用シートのデータは上書せずに、最後の行から挿入させたいです。品番が重複するデータが挿入された場合、新しいデータを削除。振分用シートはすべて、5行目が項目行となります。 どのようなコードを作成すればよいのかVBAに詳しい方、アドバイスよろしくお願いいたします。

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.12

> その場合、重複データは転記されないようにしたいです。 データシートのC列と転記先のE列での重複ですよね。 もともと、重複するデータは転記していません。 と何度も回答してます。実際実行して転記されますか? たとえば空の転記先があったとして同じデータシートでそれを何度繰り返しても最初の一回しか転記しません。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.11

まず要望を伝える前に書かれているコードの意味を理解するか、その説明を求めるべきだと思いますよ。 丸ごと貼り付けてから重複を削除するって方法しかご存じないみたいなので、そのコードがない事に違和感があるのでしょう。 でも丸ごとではなく最初から必要最小限のデータを貼り付けるって手段もある事を知って受け入れるべきかと。 方法は回答者それぞれで幾つも存在するものです。 固定概念は持たない方が宜しいかも。 検証し結果が違うのならその違う点を挙げるべきでしょ。 仮にこれが課題であるってなら、その手段は質問者さんの教わった範囲でしかないのかもですが、回答者は何を教わって出された課題なのかはわかりませんし。 貼り付け後の重複削除なら教えて!gooにて回答が付いているようですよ。

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.10

> もう一点…品番が重複した場合削除してほしいのですが、コード追加して貰えますでしょうか? もともと重複する新しい品番のデータは転記していません。

tanto9999
質問者

補足

すみません説明不足でした(>_<)データシートには何度もデータを上書きすることになるのですが、振分済みの品番と重複するデータが出ることがあります。その場合、重複データは転記されないようにしたいです。わかりにくくてすみません。。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.9

No.7さんの件につきましては、No.4のリンク先で既に実施されてます。 けどうまくいかなかったそうです。 ダミーでは成功するけど実際のデータではミスるらしい。

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.8

> データをC列6行目から貼付けられるように出来ますか? すみません、A列から転記してました。C列からでしたね。 半角全角混在してるのか不明ですので、どちらでもいいように以下のように変更しました。 > 現在、二行目からデータの一部だけ反映されております。 すみませんこの意味が分かりません。 Sub Test() Dim c As Range Dim Sh1 As Worksheet, Sh2 As Worksheet Dim FRange As Range Dim i As Long, SheetNo As Long Set Sh1 = Sheets("データ") For Each c In Sh1.Range(Sh1.Cells(2, "A"), Sh1.Cells(Rows.Count, "A").End(xlUp)) SheetNo = 0 For i = 1 To Sheets.Count If StrConv(Sheets(i).Name, vbWide) = StrConv(c.Text, vbWide) Then SheetNo = i Exit For End If Next If SheetNo <> 0 Then Set Sh2 = Sheets(SheetNo) Set FRange = Sh2.Range(Sh2.Cells(6, "E"), Sh2.Cells(Rows.Count, "E").End(xlUp)). _ Find(What:=c.Offset(0, 2).Value, LookIn:=xlValues, lookat:=xlWhole) If FRange Is Nothing Then Sh2.Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Resize(1, 10).Value = _ c.Resize(1, 10).Value End If Set Sh2 = Nothing End If Next Set Sh1 = Nothing End Sub

tanto9999
質問者

補足

改善しましたか(*^^*)有難うございます‼感謝です! もう一点…品番が重複した場合削除してほしいのですが、コード追加して貰えますでしょうか? (その場合、新しく追加された方のデータを削除) どうかよろしくお願いしますm(__)m

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.7

No6の追加です。 全てシート名は全角だとしたら(半角全角混在したら駄目です) c.Text のところを全て StrConv(c.Text, vbWide) にしてください。

tanto9999
質問者

補足

返信ありがとうございます(>_<)シート名はすべて半角としていますが、R1というシートも含まれています。その場合、StrConv(c.Text, vbWide)に修正したほうがいいですか?もうひとつ、データをC列6行目から貼付けられるように出来ますか?現在、二行目からデータの一部だけ反映されております。よろしくお願いします。

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.6

> 試してみたところSet Sh2 = Sheets(c.Text)でデバッグがおきたのですが、何が原因なのでしょうか シート名がセルに記載された1,2,3という半角ではなく全角の1、2、3(またはその逆)でしたらエラーになります。そのあたりはそちらでどちらかに合わせてください。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

エラーが起きた時はその場所もですがエラーの内容も必要。 仮にシート名を全角の数字にしているのなら指定しているのは半角の数字なので一致せずエラーは起きるでしょ。 シート名がどうなっているのかも重要な情報。 何が必要で何が不要かはBookを見られない回答者にしてみたら、何も判断できず質問者さんの正確無比な情報だけが頼りなのです。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

https://oshiete.goo.ne.jp/qa/11658168.html 既に解決されているのではなかったのでしょうか?

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

すでに回答例はでているが、短いすっきりしたコードをめざして作った。 それだけに、全くの初心者には、やっていることがわかりにくいかも。 前もって下記「注意」を読んでおいてほしい。 ーー データ例 Sheet1 A1:B12 営業所 販売 東京 20 仙台 34 川崎 32 東京 27 仙台 45 川崎 33 川崎 12 仙台 29 川崎 42 仙台 11 東京 17 -- 標準モジュールに ub test06() branch = Array("東京", "川崎", "仙台") For Each eigyo In branch '各営業所名で繰り返し処理 Range("A:A").AutoFilter '営業所名がある列でオートフィルタ Worksheets("Sheet1").Range("A1").AutoFilter _ Field:=1, _ Criteria1:=eigyo, _ VisibleDropDown:=False '---検索結果の出た範囲(コピー元範囲)から、見出し行分を除く Worksheets("Sheet1").Range("A1").CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select '最上行の見出し1行だけを縮小 '--その時点での、その営業所シートの、A列データの最終行を割り出す lr = Worksheets(eigyo).Range("A100000").End(xlUp).Row + 1 Selection.Copy Worksheets(eigyo).Range("A" & lr) '貼り付け先のアドレス指定して貼り付け '-- Next End Sub ーー 実行後 「東京」シート A2:B4 東京 20 東京 27 東京 17 他の営業所のデータ例の掲示は略。実行結果で見て。 ーーー 注意 1.Array("東京", "川崎", "仙台")の部分は、手作業で、自社実情で増やしたり、修正してください。 2.A列に出てくる営業所名と同じ名前のシート(当初白紙)を実行前に用意すること。 3.ただし、各シートでの第1行目の項目名(タイトル)は省略してあるので、手作業で入れてください。 4.毎月、Sheet1のデータが更新されたものができる場合、そのデータをSheet1に張り付けるか、別のシートに貼りつけて、その上記コードのWorksheets("Sheet1") のSheet1を変えて、実行すること。 5.Sheet1が同じデータ(シート)のまま実行すると、同じ結果データが各営業所シートに下方向に累積してしまうので、注意のこと(やるな)。テストの場合は各営業所名シートは、クリアしておいて実行のこと。

関連するQ&A

  • 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つのシート上で重複するデータを削除する方法は見つける事が出来たのですが、残す方のデータ が指定出来ないのと、複数のシート上の重複データを削除する方法が見つかりませんでした。 何か良い方法がありましたら、ご教授下さい。

  • VBAを使った、Excelでのシート間データ抽出

    はじめまして。みなさまどうか教えてください。 Sheet1にはA列に250行程、コードが存在します。 Sheet2にはA列(コード)からI列まで、そして1000行程データが存在します。 Sheet1にあるコードは重複はなく、Sheet2のコード内に必ず同じコードがあります。 Sheet2にも重複コードはありません。 そこでSheet1のコードを使い、Sheet2を検索し、同一コードのデータ(A列からI列の行すべて)を全て(250件分)、Sheet1のコード記載順(A1、A2、A3・・・・)で、Sheet3に抽出したいのです。 どうか、よろしくお願いします。

  • Excelのシートからシートへデータを移動したい

    Excelのシートで作成されている申込書(シート)があり、現在はその申込書シート(セル)に記載されている情報を別のシート(顧客データとして管理しているシート、複数行存在しています)に手入力しています。 この手入力の作業をマクロか関数で簡単にしたいのですが、下記の点がクリアできる良い案が分かる方がいたら教えて頂きたいです。 (1)申込書シートは顧客データシートに情報を移動したら、都度上書きしていきたい⇒申込書シートは同じbookで管理しないため(上書きについては申込書内容を都度手作業で貼り付けするつもりです) (2)顧客データシートは顧客が増える毎に2行目、3行目・・・というようA列が空欄になっている一番上に、申込書データの内容が反映されるようにしたい。 (3)貼り付けられたデータ(セル)は関数ではなく、値(文字)が貼り付けられるようにしたい。((1)のように申込書シーは都度上書きしたいため) 分かりづらい質問で申し訳ありません。。 ちなみにマクロは作成したことがありませんが、マクロでできるのであれば挑戦したいと思っています。 ご回答よろしくお願い致します。

  • VBA 重複データの削除方法

    いつもお世話になっております。 VBAを学習中の初心者です。 重複するデータの行を削除を行いたいのですが、ご指導をよろしくお願いします。 添付ファイルの左側のようなデータを作成しました。 作成したいデータは右側です。 同一日ごとに項目1,2,3が全く一緒になる行を削除したい。以上です。 なるべく理解しやすいコードでご指導いただけると助かります。 よろしくお願いいたします。

  • Excel データを各シートへ自動振り分け(各シート、元データと連動)

    こんばんは。 マクロもVBAもチンプンカンプンの私が、色々調べ挑戦したのですが・・・ 頭がパンク状態。 自分がやりたい事も上手く伝えられてるか、不安ですが宜しくお願いします。m(__)m <ファイルの状況> Excel2003使用 Sheet1  コードNo.+勘定科目が入力されているSheet Sheet2  全ての勘定科目のデータが入力されているSheet      ※新しい情報は、随時このSheetに入力 ◎勘定科目ごとのSheet数は、月(年)によって異なります <やりたい事> ※画像参照(見にくかったら、ごめんなさい) 1.「更新場所」のデータを勘定科目ごとに自動振り分けしたい。    ※Sheetごとに合計も出てると理想 2.「更新場所」に新しいデータを入力すると、振り分けられた各Sheetのデータも自動更新される。(元データと各Sheetが連動されてる。) <参考にしたサイト> 【A】 http://www4.ocn.ne.jp/~yy3/Sub61.html 【A】のサイトのプログラムを「ExcelのVisual Basic Editor」を開き貼り付け、「データを各シートに振り分ける」までは出来たのですが・・・ 振り分けられた各シートを見ると、合計が出てないんです。 それは単純に【A】のサイトのプログラムの中には、「各シートの合計値を求める」という 指示のプログラムが入っていないからだと考えました。(素人の考えです。) <やりたい事>の1の各Sheetで合計値を求める事と、<やりたい事>の2が出来ていないので、【A】のサイトのプログラムに・・・ 以下のプログラムを追加すると、私の目的にあったプログラムが出来る?と思ったのですが、出来ますでしょうか? 1.「振り分けられた各Sheetの合計値を求める」という指示 2.「更新場所に新しいデータを入力すると、振り分けられたSheet内のデータが自動更新」されるという指示 また、【A】のサイトを元に各Sheetに振り分けると、一番最後に「合計」というSheetが登場するのですが・・・ 「合計」のSheetを見ても#REFと表示されているだけで、なんの為にあるSheetなのか、よく分かりません。 「合計」のSheetを見るまでは考えていませんでしたが、「合計」のSheetに各Sheetの 勘定科目・支出・収入の合計金額が表示されると、とても理想的です。 マクロもVBAも全然分からないのに、要望だけ沢山あってすみませんが、宜しくお願いします。 P.S 【A】サイトより私の目的にあったプログラムがあったら、【A】サイトのプログラムにこだわる理由はありません。 色々調べてこれがいいのかな?と思っただけですので・・・ 宜しくお願い致します。

  • EXCELシートの振り分け転記の自動化について

    こんにちは、excel初心者です。 あるexcelシートの中に、数字コードが書いてあるボックス?の中に2種類か、3種類のそれぞれアルファベットコードと表題がそれぞれ書いてあります。 これを別シートにそれぞれの数字コードとアルファベットコードと表題に見やすくするために振り分けたいのですが、 いちいち一つ一つのセルをコピーペストの繰り返しで膨大な時間が掛かりました。 マクロVBAの本を読みましたが、その”数字コードボックス”のアルファベットコードの種類が2,3,4種類と順不同です。 これらの順不同型のセルの塊を自動転記は可能でしょうか? 自動化のイメージとしては、 1;B2セル数字コードを選択、コピー、別シートの数字コード列に移動、貼り付け。 2;元シートにかえって、A5アルファベットコードを選択、コピー、別シートのアルファベットコード列に移動、貼り付け。 3;元シートにかえって、A4表題を選択、コピー、別シートの表題列に移動、貼り付け。 4;元シートにかえって、A8アルファベットコードを選択、コピー、別シートのアルファベットコード列に移動、貼り付け。 5;元シートにかえって、A7表題を選択、コピー、別シートの表題列に移動、貼り付け。 6;元シートにかえって、A11アルファベットコードを選択、コピー、別シートのアルファベットコード列に移動、貼り付け。 7;元シートにかえって、A10表題を選択、コピー、別シートの表題列に移動、貼り付け。―と 8;元シートにかえって、12行B列の数字コードを感知したら、11から2行はすべて削除。 9;次の”数字コードボックス”に移動します。 自分で考えてイメージしただけなのですが、この様な事は可能でしょうか? また、マクロに書くコードはどのようなコードをかけば良いでしょうか? しょ 初心者なりに必死に考えてみましたが、聞いた方が速いと思いこちらにご相談させて頂きました。 何卒宜しくお願い致します。

  • Excel VBA 残りの行数を計算し、貼付けられるか、別のシートに貼り付けるかを判断し実行するマクロ

    Sheet1に二十数個の項目が列記されており、その内、必要な項目だけをコピーしてheet2に貼り付けて行きます。 一項目の行数は6行~18行とまちまちです。 必要な項目はその都度違います。 heet2の行数は50行と決まっています。 よって、あるところで50行を超えてしまいますので、Sheet3へ移動し続きを貼り付けます。 このとき、一つの項目がSheetをまたいではいけません。 (Sheet1に空白が出来てもかまいません) 要は、貼り付ける行数と残りの行数を自動で判断して、入る場合は貼付け、入らない場合はSheetを変えて貼付けるVBAのコードを具体的にご教授願いたいのです、宜しくお願いします。 Excel2000、VBAはマクロの自動記録をいじる程度のスキルです。

  • 複数のシートから重複するデータを別シートに抜き出す

    こんにちは。 Excel2007です。 複数のシート(現在はSheet1からSheet4ですが、最終的にはSheet10ぐらいまでになります)に蔵書データが入っています。 A列21行目から作者名、B列21行目から本のタイトル、C列21行目からページ数と以下、値段、ISBNなどJ列まで蔵書データが入っています。本棚ごとにSheet1、Sheet2と分かれて入力されています。 この複数のシートから本のタイトルが重複するものを別シートに抜き出すにはどうしたらいいでしょうか? 重複データを削除するマクロや関数は探せたのですが、複数のシートにまたがっている場合は探しきれませんでした。 何かいい解決方法があればご教授下さい。

  • エクセル 担当ごとに自動振り分け

    ご教授願います。 エクセル2003使用です。 シートが「入力」「担当無」「鈴木」「佐藤」「山田」・・・・とあります。 元のデータを「入力」シートに入力後、各担当に自動で振り分けられるようにしたいです。 元データとなる「入力」シート  A   B    C    D     E    F    G    H    1NO 担当 会社名 住所   商品名 数量 日付 金額   2 1 鈴木 ○会社 神奈川  ペン赤 100本 10/25  50万 3 2 担当無 △社  東京  ノート  200冊 10/26 10万 振り分け先となる「担当無」「鈴木」「佐藤」「山田」・・・・シート  A    B     C    D    E   F   G   H   I 4 NO 会社名  住所 商品名 数量 日付 金額 結果 備考 となります。 うまく説明できないのですが ・振り分け先には見出し等を付けたい為A1~3は空欄、A4は項目名にしたいです。 ・各担当が「担当無」のシートを見て自分のやりたい案件を選択できるようにしたいです。 ・選択された「担当無」に入力されていたデータは、選択した担当のシートに反映されるようにしたいです。又、反映後は「担当無」シートから削除。 ・振り分け先シートのみにある”H列の結果”と”I列の備考”は各担当が入力するため振り分けを実行したら下端のセルに自動でデータが追加されるようにしたいと思っています。 同じような質問などを参考にし色々試したもののマクロ、数式ともに勉強始めたばかりのレベルなので応用ができずデータが重複したり、エラーばかりなってしまいます。 図々しいとは思いますが、ご教示いただければ幸いです。 宜しくお願い致します。

  • VBAで別シートの必要データの値をコピーし貼付け

    sheet2の項目よりsheet1の必要項目の値のみを貼り付けたいのですがsheet1のC列5行文字入力があり次の行以降にsheet2のセルB2以降の範囲のsheet1の2行目必要項目に対しての入力値の値のみを入力したいのですがsheet2入力値は何百項目あります。 どなたかVBAコードが解る方よろしくお願いします。

専門家に質問してみよう