- ベストアンサー
Excel表作成における果物の一覧化方法
- Excelの表には100種類以上の果物があり、月ごとに果物の場所と種類が変化しています。しかし、フィルターをかけるだけでは思い通りの表示ができません。より使いやすくするためには、別の機能や関数を利用する必要があります。
- 例えば、各月ごとに選択した果物の名前と個数を横一列に揃えたい場合、VLOOKUP関数を使用することで実現できます。VLOOKUP関数を使うと、指定した値に一致するデータを別の範囲から取得できます。これにより、選択した果物の個数を各月ごとに表示することができます。
- また、条件付き書式を利用することで、特定の条件に一致するセルを目立たせることができます。例えば、1月にはあって4月にはない果物を目立たせるために、条件付き書式を設定することができます。これにより、一目で変化する果物を確認することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! VBAになりますが、一例です。 出現順に表示させる方法はどうでしょうか? 今回は行合わせ重視でやってみましたので、 ↓の画像のようにデータがない月は空白になります。 元データはSheet1にあるとします。 Sheet2を作業用のSheetとして使用していますので、Sheet2は使っていない状態にしておいてください。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 並び替え() 'この行から Dim i As Long, j As Long Dim lastRow1 As Long, lastRow2 As Long Dim c As Range, wS As Worksheet Set wS = Worksheets("Sheet2") Application.ScreenUpdating = False With Worksheets("Sheet1") '▼Sheet1のA列データをそのままSheet2のA列に表示 lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row If lastRow1 > 1 Then Range(.Cells(2, "A"), .Cells(lastRow1, "A")).Copy wS.Range("A2") End If '▼Sheet1の3行目~12月(24列目)まで For j = 3 To 24 Step 2 ' lastRow1 = .Cells(Rows.Count, j).End(xlUp).Row '▼Sheet1のj列の2行目~最終行まで 'すでに出現しているデータの場合、Sheet2の同じ行のC列にコピー&ペースト For i = 2 To lastRow1 Set c = wS.Range("A:A").Find(what:=.Cells(i, j), LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then wS.Cells(Rows.Count, "A").End(xlUp).Offset(1) = .Cells(i, j) lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row .Cells(i, j).Resize(, 2).Copy wS.Cells(lastRow2, "C") '▼初出現データの場合はSheet2のA列最終行の一つ下へデータを追加 Else .Cells(i, j).Resize(, 2).Copy wS.Cells(c.Row, "C") End If Next i '▼Sheet2のC・D列に表示されたデータをSheet1のj列にカット&ペースト lastRow2 = wS.Cells(Rows.Count, "C").End(xlUp).Row Range(wS.Cells(2, "C"), wS.Cells(lastRow2, "D")).Cut .Cells(2, j) wS.Range("C:C").Clear Next j wS.Cells.Clear .Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous End With Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないので、Sheet1のデータ変更があるたびにマクロを実行する必要があります。m(_ _)m
その他の回答 (2)
回答No.1です。 別シートにVLOOKUP 関数を駆使した集計用の表を作る 方法も考えられます。 ○元の表 A B C D 1 4月 5月 2 ---------------------------------------------- 3 りんご 3 マンゴー 10 4 超リンゴ 10 怒りのマンゴー 2 : ○集計表 A B 1 果物名 4月 5月 2 ----------------------------------------------------------------------- 3 りんご =VLOOKUP(A3,元の表!A$3:B$100,2,FALSE) =VLOOKUP(A3,元の表!C$3:D$100,2,FALSE) 4 超リンゴ =VLOOKUP(A4,元の表!A$3:B$100,2,FALSE) =VLOOKUP(A4,元の表!C$3:D$100,2,FALSE) : これで集計表に「元の表」のデータが集約されます。 【注意点】 ・集計表の果物名のリストは自分でまとめて作らなくてはなりません。 VLOOKUP関数は単に「元の表の個数データを集める」ことしか しません。 ・「元の表」の果物名は名前の順でソートしてある必要があります。 ・集計表には「元の表」にない果物は #N/A と表示されます。 これが嫌であれば、ISERROR 関数を使って回避します。 (具体的な方法は GOOGLE で VLOOKUP ISERROR で検索 してみてください)
お礼
各月ごとに新しくはいった果物、または前の月にはあって次の月になくなってしまう果物の種類全部を調べて、すべての果物名のリストを作ることができなかったので、回答No3さんのアンサーをベストアンサーにさせていただきました。 VLOOKUPはよく使う関数だと思うので、しっかりと勉強して次使う機会あったら使わせていただきます。 ありがとうございました^^
月ごとに果物リストを作るのではなく、全体の果物リストに対して月の 個数を書いていったほうが良いように思います。 果物名 4月 5月 … ------------------------------------ りんご 3 * 超リンゴ 10 * メタルリンゴ 2 * マンゴー * 10 怒りのマンゴー 10 2 ------------------------------------ その月に売らない果物は個数を * にします。 売らない果物は最初に決まると思うので、月の入力前に * を入れて、 実際の入力時は * をフィルタで非表示にするか、並び替えで表の下に 追いやれば良いでしょう。 この表なら、何も考えなくても横に果物の月別個数が並びますよね。
お礼
これをコピー、ペーストして少し手直ししたら思っていた表ができあがりました。これでフィルターをかけたら、以前の表だとばらばらだったのがしっかりと種類別になりとてもみやすくなりました。 100種類以上x12を手直しするのはかなりの時間がかかるので、短時間でできたので感謝してます。 私自身マクロの知識がないので、コピーだけで次に生かせないのが残念ですが、今回は急ぎだったので助かりました。 ありがとうございます!