教えてください。
A列に会社名が200社で1000件ランダムに入っています。それを会社名ごとにシート名もA列に入力している会社名に分けたいのですがどうしたらよいのでしょうか?

例えば、

A列   B列   C列       A列   B列   C列
 
C社   ○    AAA       A社   ×    CCC
A社   ×    CCC   →   A社   ×    CCC
B社   △    DDD
A社   ×    CCC       A社(シート名)

分かり難くてすみません。1000件を200の会社ごとにシート名を付けてに分けたいのです。

どうかよろしくお願いいたします。

A 回答 (5件)

元リストのシートを開く


ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
dim h as range
on error goto errhandle
for each h in range("A1:A" & range("a65536").end(xlup).row)
h.entirerow.copy destination:=worksheets(h.value).range("A65536").end(xlup).offset(1)
next
exit sub
errhandle:
worksheets.add after:=worksheets(worksheets.count)
worksheets(worksheets.count).name = h
activesheet.range("A1:C1") = array("社名", "データ1", "データ2")
resume
end sub

F5キーを押す
今登録したmacro1を選んで実行する
ファイルメニューから終了してエクセルに戻ると既に完成しています。
    • good
    • 0

一般機能で一度にシートをたくさん作るにはピボットテーブルが便利です。



A列に会社名、B列に項目1、C列に項目2と項目名をつけておいて、

表内にカーソルを置き、データ→ピボットテーブルとピボットグラフレポート→次へ→次へ→作成先を適当に決め完了

ページのフィールドに会社名(ここが重要)、データのフィールドに項目名(一つでいいです)をドラッグ

ピボットテーブルツールバーの左端にある「ピボットテーブル」をクリック→ページの表示→OK

で会社名ごとのシートができます。

その後最初のシートを選択し、Shiftを押しながら最後のシートを選択してから、どこか未入力のセルをコピーしピボットテーブル全体に貼り付け

これでシート名だけ入ったシートが完成します。

以上は2003までの操作です。

中のデータに関しては他の方の回答を参考にして下さい。
    • good
    • 0

 今仮に、元データーが入力されているシートのシート名がSheet1であるものとします。


 又、Sheet2のA列を作業列として使用するものとします。

 まず、Sheet2のA1セルに次の数式を入力して下さい。

=INDEX(Sheet1!$A:$A,ROW())&COUNTIF(Sheet1!$A:$A,INDEX(Sheet1!$A:$A,ROW()))

 次に、Sheet2のA1セルをコピーして、、Sheet2のA2以下に(Sheet1のリストの行数を上回るのに充分な行数となるまで)貼り付けて下さい。

 次に、例えば

A社

という名前のシートを作成し、そのA2セルに、次の数式を入力して下さい。

=MID(CELL("filename",A2),FIND("]",CELL("filename",A2))+1,999)

 次に、A社シートのA3セルに、次の数式を入力して下さい。

=IF(ROWS($2:3)>COUNTIF(Sheet1!$A:$A,A$2),"",A$2)

 次に、A社シートのB2セルに、次の数式を入力して下さい。

=IF(ROWS($2:2)>COUNTIF(Sheet1!$A:$A,$A$2),"",INDEX(Sheet1!B:B,MATCH($A$2&ROWS($2:2),Sheet2!$A:$A,0)))

 次に、A社シートのB2セルをコピーして、A社シートのB2~C3の範囲に貼り付けて下さい。
 次に、A社シートのA3~C3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。

 以上でA社シートは完成で、後はA社シートをコピーしたシートを作成して、そのコピーシートのシート名を、別の会社名に変更する事で、別の会社用のシートを作成して下さい。(シート名と、Sheet1のA列に記載されている会社名が一致していれば、全て自動的に表示されます)
    • good
    • 0

方法は、関数、VBA(マクロ)、エクセルのフィルタ機能などがありますが、関数やVBAは簡単ではありませんので、エクセルのフィルタ機能を使う方法を紹介します。


(1)先ず元データシート(仮にSheet1)に見出し行を挿入します。
(2)Sheet1のA列を選択⇒データ→フィルタ→フィルタオプションの設定→重複するレコードは無視するを選択→OK
   会社名一覧を別シートにコピペし、再度(2)の操作で重複するレコードは無視するは選択なし→OK
(3)Sheet2のA1にSheet1のA1をコピペ、A2に=MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+1,31)を入力、シート名を手動にて変更(先ほどの会社名一覧)
(4)Sheet2のA3を選択→データ→フィルタ→フィルタオプションの設定→指定した範囲を選択、リスト範囲欄にSheet1A:C、検索条件範囲欄にA1:A2、抽出範囲欄にA3→OK

尚、(3)で会社名一覧分を事前に作成しておけば、(4)の操作をマクロ記録で後はシートを選択してマクロ実行(ショートカットキー押下)するだけで抽出できますが如何でしょうか。
    • good
    • 0

関数で出来るのでは、と質問しているのではないですか。

しかしエクセルは条件(例A社)を付けた抜き出しは苦手です。
一発でA者の行を抜き出すのも複雑な式です。しかもその会社名の重複の無いリストと連動しないと、A社、B社、・・と
手作業で打ち込まないとならない。
ですからVBAを勉強しないとスムーズに行かないでしょう。仕事などにエクセルを使うならVBAが直ぐ必要になる1例です。
フィルタの操作とコピー貼り付けのマクロの記録を採って考えるのが、その入り口です。
こういう表の組み換えになると、エクセル関数は非力です。
ーー
係数のカウントや、計算なら1シートに各社を混在しておいても、可能な場合があるかもしれない。
またフィルタで洋画たる場合もあるかもしれない。だから
各社にシートで分けて、その後どうするの、も質問に書いておくべきなんです。
    • good
    • 0

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


人気Q&Aランキング