• ベストアンサー

エクセルでシートをまたいでコピー

 エクセルでたとえば A商店 だいこん 1 200 A商店 にんじん 2 180 B会社 リンゴ  1 200 C販売 からいも 1 100 C販売 お茶   1 200  とかある時に1枚目の「A商店」という名のシートに、そのシートに だいこん 1 200 にんじん 2 180 B会社のシートに りんご 1 200 C販売のシートに からいも 1 100 お茶   1 200 とかに自動的に振り分ける方法はないでしょうか。シートの名前まで自動的につける必要はありません。すでにシートは作ってあります。データベースで作ったデータが1万行以上あり、前任者がエクセルで作った表に変換しなければならないのです。シートは約30枚あり、テーブル内のレコードの項目順の並べ替えはすんでいますが、順序はエクセルのシートの順番とは違います。わかりにくいとは思いますが補足要求をしていただければ再度ご説明します。よろしくお願いします。

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

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

(1)操作でフィルタオプションを考えましたが、他シートに結果を出そうとするとエラーになります(Ver2000)。2002やその後では、いつか改良されると思う点です。 (2)VBAはお嫌いですか。 回答例を上げます。ステップ数を極力少なく考えました。 (A)元シートはA列(取引先名)でソートされていることを前提にしています。 (B)「得意先名」のシートは既に出来ているものとする。   (シート名の変更済みであること)  (C)その他の仮定事項は(注)を見てください。 Sub test01() Dim sh1 As Worksheet Set sh1 = Worksheets("sheet1") d = sh1.Range("a1").CurrentRegion.Rows.Count m = sh1.Cells(1, "A") j = 2 For i = 2 To d s = sh1.Cells(i, "A") If s <> m Then j = 2 End If Worksheets(s).Cells(j, "A") = sh1.Cells(i, "A") Worksheets(s).Cells(j, "B") = sh1.Cells(i, "B") Worksheets(s).Cells(j, "C") = sh1.Cells(i, "C") j = j + 1 m = sh1.Cells(i, "A") Next i End Sub (注)・得意先名は2行目から始まる(for i=2 ・・) ・スペース行は無いこと。(currentregion) ・Sheet1は実際の振り分け元のシート名で置換えてください。 ・振り分け後のシートは第2行よりデータが始まる(J=2) 項目は3項目しか移してないが、追加してください。 (A,B,C列)

poor_Quark
質問者

お礼

 お世話になります。私がぼんやりと考えていた方法よりずっとシステマティックに組み立てていらっしゃいます。参考になりました。 >VBAはお嫌いですか。 そういうわけではないのですが、これだけデータ構造がはっきりしていて、レコードの数が多いのに何もエクセルを使うことはないだろう、という私の印象です。実はPCの具合が悪いとかで、友人の職場によばれて相談を受けたのですがHDの中を見てびっくり!  各人が自分の名前でフォルダを作り、その中にはエクセルのファイルがてんこ盛りで、業務用の基幹ソフトのマスターのメンテもかけてなくてetc…  質問以外にもいろいろと不具合があり、ハードのメンテともに貴重な休日を費やしてしまいました。基幹業務にエクセルを使わないよう念を押して、不要になったフォルダを選択しシフト+デリートで全部消したとき、ほんとにすっきりしました。どうもエクセルのVBAが一人歩きしていたようで、業務よりもそっちが目的になっていたような感じです。実は単なる清書ソフトとしてしかつかっていなかったのですけどね。  お手間をとらせた上、グチまで聞いてもらってありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#148473
noname#148473
回答No.1

既に並べ替えが済んでいるのでしたら、取引先ごとのシートに手動でコピー&貼り付けされれば良いのではないでしょうか?30項目くらいなら、VBAでマクロを組むよりも、手作業でやったほうが早いでしょう。 ひょっとしたら、親切な方がVBA用のマクロを組んで下さるかもしれないので、VBAについてどの程度の知識をお持ちか、補足などしておかれると良いのではないかと思いますよ。

poor_Quark
質問者

お礼

 やっぱりVBAしかないようですね。シートの概念は、データベースに持ち込めないのでひょっとしたら、簡単な会話的処理で実現できるtipsがあるのではないかと期待したのですが。人に作ってもらうのは虫がいいと思うので自分でやります。ご回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A