電子書籍の厳選無料作品が豊富!

エクセル2010で作成した住所録にある特定の町名をグルーピングして別のシートに分類したいのです。シート1の住所録本体のA列は氏名、B列は町名と丁目(〇〇町◆丁目)、C列は番地を入力します。その他の列にもいくつか入力項目があります。やりたいことは、B列の町名と丁目を入力すると自動的に他のシートにグルーピングして分類できるようにしたいのです。分類の際、次のような場合があります。たとえば、A町1丁目とB町2丁目が同じグループ、つまり同じシートに分類する必要があります。また、単独でC町3丁目は一つのグループとして分類する場合ももちろんあります。マクロ等、エクセルの専門的な知識はもちあわせていません。関数の組み合わせでできそうな気がしていますが、なにぶん技量不足のためわかりません。どなたかご教授ねがいます。宜しくお願いします。

A 回答 (4件)

例えば元の表がシート1に有るとしてA3セルから下方に氏名が、B3セルから下方に町名と丁目がC3セルから下方に番地が入力されているとします。

F列まで利用されているとしてG列から右の列は作業列します。
G1セルから右の方向にはグルーピングしてそれぞれを異なったシートに表示させるときのシート名を入力します。例えばSheet2、Sheet3、・・・・ などと入力します。
G2セルから右横方向のセルにはA町1丁目などと入力します。同じグループに二つの町名が入る場合にはA町1丁目/B町2丁目などと/を入れて入力します。ここでは2つの町名までを1グループとして処理できる方法を示します。
そのためにG3セルには次の式を入力して右横方向にドラッグコピーしたのちに下方向にもドラッグコピーします。

=IF(COUNTIF(G$2,"*/*")>0,IF(COUNTIF($B3,"*"&LEFT(G$2,FIND("/",G$2)-1)&"*")+COUNTIF($B3,"*"&MID(G$2,FIND("/",G$2)+1,10)&"*")>0,MAX(G$2:G2)+1,""),IF(COUNTIF($B3,G$2)>0,MAX(G$2:G2)+1,""))

これで同じグループに所属する場合には1から順に番号が表示されます。
そこでお求めの表ですがグループごとに表示させるシートについて(シート1を除く)Ctrlキーを押しながらそれぞれの名前のシート見出しをクリックして同じ作業グループを作ります。
そのうちのあるシートが画面にあるわけですがそのシートのA1セルにはそのシートのシート名を例えばSheet2のように入力します。
2行目にはシート1と同じ項目名を入力します。
A3セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(A$2="","",IFERROR(INDEX(Sheet1!$A:$F,MATCH(ROW(A1),INDEX(Sheet1!$A:$XX,1,MATCH($A$1,Sheet1!$1:$1,0)):INDEX(Sheet1!$A:$XX,1000,MATCH($A$1,Sheet1!$1:$1,0)),0),COLUMN(A1)),""))

2行目には必ず項目名を入力ことが必要です。
最後にシート1を選択することで作業グループを解除します。
シート1を除く他のシートについてA1セルにシート1で決めたグループごとのシート名を入力することで、そのグループだけのデータが表示されることになります。
    • good
    • 1

住所録データがsheet1にあり、sheet1に作業列として数式を挿入する事とします。


データ抽出はsheet2に行い、町名検索は2住所まで可能とし、町名リストを入力規則のリストからドロップダウンリストから取得出来るものとします。

1.住所リスト1、2をセルA6~B6に作成するものとした。

2.セルA2に入力規則のリストで住所リスト1によるドロップダウンリストを作成します。
ドロップダウンリストの作成方法は下記参照。(他のシートのデータでドロップダウンリストを作成する事は可能ですが、その場合は、他のシートで住所リスト1のデータ範囲を名前の定義を行う必要があります。)
http://kokoro.kir.jp/excel/list-name.html

3.検索住所2セルB1に数式=IF(VLOOKUP(A2,A6:B14,2,0)="","",VLOOKUP(A2,A6:B14,2,0))

4.sheet1の住所録データの任意の列に作業列を作成する。今回はD列に作成する事とした。
セルD2に式=IF(Sheet2!$B$2<>"",IF(OR(B2=Sheet2!$B$2,B2=Sheet2!$A$2),ROW(),""),IF(B2=Sheet2!$A$2,ROW(),""))
住所録データがある行までフィルコピー

5.sheet2のデータ抽出関数を入力
氏名欄D2式=IF(COUNT(Sheet1!$D:$D)<ROW(Sheet1!A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$D:$D,ROW(Sheet1!A1))))
町名欄E2式=IF(COUNT(Sheet1!$D:$D)<ROW(Sheet1!A1),"",INDEX(Sheet1!B:B,SMALL(Sheet1!$D:$D,ROW(Sheet1!A1))))
番地欄F2式=IF(COUNT(Sheet1!$D:$D)<ROW(Sheet1!A1),"",INDEX(Sheet1!C:C,SMALL(Sheet1!$D:$D,ROW(Sheet1!A1))))
D2~F2を必要行下記にフィルコピー
ROW(Sheet1!A1)は式は固定ですので、どこのセルから式を始めてもこの記入は変更ありません。住所録データの列により数式変更して下さい。
抽出データに自動で罫線は引きませんので、罫線はご自身で。

結果は画像参照下さい。
「住所録から特定住所を別シートに抽出分類で」の回答画像3
    • good
    • 0

失礼ながら、質問で返します。



> たとえば、A町1丁目とB町2丁目が同じグループ、
> つまり同じシートに分類する必要があります。
> また、単独でC町3丁目は一つのグループとして分類する場合ももちろんあります。

との事ですが、「グループの分類」はどのような条件の下で行われているのでしょうか?


例えば「グループ」と冠した列で分類されているのであれば、
 フィルタ→「グループ」で抽出→コピー→別シートにペースト
の流れで処理を行うのが一番確実で早い方法と言えると思います。

コレが無い、つまり力技で判断しているとすると、かなり厄介です。
一つ一つフィルタをかけてコピー、フィルタをかけてコピー・・と繰り返す必要があります。
エクセルには「A町1丁目とB町2丁目は同一、C町3丁目は別」と判断できないからです。
(人の手でも一緒ですね。何かしらルールが無いと分類は不可能です。)

ですので、関数の組み合わせでは「お望みの処理はできません」と言うのが直接の回答です。
    • good
    • 0

エクセルのフィルターオプションという機能をご存知でしょうか。


とりあえず
http://www.eurus.dti.ne.jp/yoneyama/Excel/filter …
を参考にしてください。
別シートにB列の抽出条件を複数記入できるシートを準備すればOKだと思います。
とりあえず、上記サイトをじっくり勉強してみてください。
    • good
    • 0

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


おすすめ情報