プロが教えるわが家の防犯対策術!

下の表の様に、同じ月にも、複数の月にも同じ植物の名前が複数回ある場合に、この表にある植物の名前だけを別の表にリストアップしたいのですが、エクセルでどんな関数をどう用いたらいいのでしょうか。
1月     2月     3月     4月
スイセン  ビオラ    ビオラ   バラ
ウメ     サクラ    ヒマワリ   スイセン
ウメ     スイセン  アサガオ  スイセン
マツ     サクラ    ビオラ    バラ
ビオラ   サクラ    ウメ     ヒマワリ
       ヒマワリ   ヒマワリ   バラ
       バラ
実際は、ひと月当たりのデータ数が50~100、名前の数が200ほどあります。

A 回答 (5件)

あまりお勧めしませんが、どうしても関数で表示したいなら、以下のような手順で可能です。



元データ(最大100行)がSheet1にあり、添付画像のようなレイアウトなら、Sheet2のA1セルに以下の式を入力し、下方向に100*12(列数分=1200行)の行までオートフィルします。

=INDEX(Sheet1!$A:$L,MOD(ROW(A1)-1,100)+2,INT((ROW(A1)+9)/100))&""

C1セルに以下の式を入力して表示データ数分(200行)だけオートフィルします。

=INDEX(A:A,SMALL(INDEX(((MATCH($A$1:$A$1200&"",$A$1:$A$1200,0)<>ROW($A$1:$A$1200))+($A$1:$A$1200=""))*10000+ROW($A$1:$A$1200),),ROW(A1)))&""

このようにすればC列に重複のないデータを表示できますが、このような配列数式を多数のセルに入力するとシートの動きが重くなるので、このようなブックは重複のない項目を取得する作業用だけのブックにするとよいと思います。

また、このデータを入力規則などのリストに使いたいなら、自動的に重複のないデータ範囲を取得することもできます。

#添付画像は各月10行以内の元データを処理した結果です(1つ目の数式で100を10にして計算した結果)。
「エクセルでどんな関数を使えばいいか教えて」の回答画像5
    • good
    • 0
この回答へのお礼

再びていねいな説明を寄せていただきありがとうございます。
理解しようとしましたが、私には関数の意味がわかりませんでした。
意味は解らないのですが、ご説明の通りにやりましたら確かにできました。
おっしゃる通り、ファイルのサイズはかなり大きくなりました。
私には、関数やマクロを使わないで「重複を削除する」機能でやるのが無難なようです。
このたびは詳しく教えていただきありがとうございました。

お礼日時:2014/07/21 21:38

No.2です。



>欲を言えば、月別をとびこえてすべてのデータから一度に植物名だけを重複なく抜き出せるとよいのですが。

Sheet1のデータを重複なしに1度だけ表示したい!というコトですね?
VBAになってしまいますが、一例です。
Sheet1は1行目が項目行でデータはA2セル以降にあるとし、
Sheet2のA列にデータを羅列するようにしています。

Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り、マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から
Dim i As Long, j As Long, cnt As Long, c As Range, wS As Worksheet
Set wS = Worksheets("Sheet2") '←「Sheet2」は実際のSheet名に!
wS.Range("A:A").ClearContents
With Worksheets("Sheet1") '←「Sheet1」も実際のSheet名に!
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To .Cells(Rows.Count, j).End(xlUp).Row
Set c = wS.Range("A:A").Find(what:=.Cells(i, j), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
cnt = cnt + 1
wS.Cells(cnt, "A") = .Cells(i, j)
End If
Next i
Next j
End With
wS.Activate
End Sub 'この行まで

※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。m(_ _)m
    • good
    • 0
この回答へのお礼

とても詳しい説明をしていただきありがとうございます。
マクロはよく分かりませんが、ご説明の通りにやってみましたら確かに一発で重複なく抜き出せました。こういう方法があることを知り大変勉強になりました。感謝します。

お礼日時:2014/07/21 21:29

ご希望の操作は、重複のない名前のリストを作成したいということですね。



その場合は以下のような手順で重複のないリストを作成するのが簡単です。

別シートに元データをコピーしておき、2月以降のデータ部分を選択して(B2セルを選択してCtrl+Shift+↓キーのショートカット操作)、Ctrl+Xで切り取りし、Ctrl+←、↓のあとにCtrlを離して↓のショートカット操作でA列の一番下のセルの1つ下のセルを選択してCtrl+Vで貼り付けます。
同様にC列以降のデータをA列の下にコピー貼り付けし、A列にすべての名前をまとめます。
最後にA列を選択して「データ」タブの「詳細設定」で「重複するレコードは無視する」にチェックを入れて「OK」します。
このようにして得られた重複のない名前のデータ範囲をコピーして、どこかのセルに貼り付ければ完成です。
    • good
    • 0
この回答へのお礼

ていねいに解答していただきありがとうございます。
エクセルに、関数を使わないでこんなことができる機能があったとは知りませんでした。
しかも。簡単な操作でできるのでおどろきました。
ありがとうございました。

お礼日時:2014/07/20 15:58

こんばんは!


関数での方法をご希望のようですので・・・

↓の画像(小さいと思いますので、拡大してみてください)
で上側がSheet1で下側のSheet2に表示するとします。
Sheet1に作業用の列を月数分だけ設けます。
(1~12月までが元データの場合、作業列はM~X列となります)
作業列M2セルに
=IF(COUNTIF(A$2:A2,A2)=1,ROW(),"")
という数式を入れX列までフィルハンドルでコピー → そのまま下へずぃ~~~!っとコピーしておきます。

そして、Sheet2のA2セルに
=IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!M:M,ROW(A1))),"")
という数式を入れフィルハンドルで、列・行方向にコピー!
これで画像のような感じになります。 m(_ _)m
「エクセルでどんな関数を使えばいいか教えて」の回答画像2
    • good
    • 0
この回答へのお礼

ていねいな解答をしていただきありがとうございます。
理解するのに時間がかかりましたが、関数を使ってこのようにすればできることがやっと分かりました。ありがとうございました。
欲を言えば、月別をとびこえてすべてのデータから一度に植物名だけを重複なく抜き出せるとよいのですが。

お礼日時:2014/07/20 15:51

COUNTIFを使えば


ヒマワリがいくつあったとか数えられますよ

例)
=COUNTIF(A1:A10、"ヒマワリ")

ヒマワリのとこはリスト票を作っておいてセル名でも良いです
B1など

http://kokodane.com/kan12.htm
    • good
    • 0
この回答へのお礼

さっそくのご解答、ありがとうございます。
私の説明がうまくなくてすみません。ヒマワリやウメ等何回か出ていますが、ヒマワリ、ウメ、サクラなど出てきている植物名をリストアップしたいということで質問しました。お手数をかけてしまいすみませんでした。

お礼日時:2014/07/19 21:23

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