アプリ版:「スタンプのみでお礼する」機能のリリースについて

この表についてなんですが、これは実際の表を小さくしたもので、実際は100種類以上の果物があり、月も12月までです。
この表、1月~4月まで果物の名前とその個数が書いてありますが、月ごとに果物の場所と種類が増えたりとで、ばらばらです。実際は100種類以上あるので、ばらばらだととてもみにくいのです。これをエクセルの機能を使って、たとえばメロンならメロンの個数が、各月ごとに名前と個数が横一列に揃えれないでしょうか?

追記 1月にはあっても4月にはなくなる種類の果物があっても大丈夫なように。逆も同じで1月になくて4月に種類が増えても大丈夫なように。

とりあえず、作りたい表はある一定のくだものを選択したら各月ごとにその数が横一列にみやすいようにでるようしたい。けして合計の数ではないです。

自分でいろいろためしたのは、フィルーターをかけたり昇順降順など簡単な機能は一通りためしました。
フィルターのだめな点は、全部にフィルターがかかってめろんを選択するとそのめろんの行以外を消すだけで、その同じ行のほかのくだものまではいってきてしまうこと、個別にフィルターをかけて昇順などでならびかえても違う果物がはいっているので、月ごとに行のばらつきができてしまうこと。

なにか関数とか別の機能を使ってみやすくする方法はありますか?

「いま作っているExcelの表について」の質問画像

A 回答 (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
「いま作っているExcelの表について」の回答画像3
    • good
    • 0
この回答へのお礼

これをコピー、ペーストして少し手直ししたら思っていた表ができあがりました。これでフィルターをかけたら、以前の表だとばらばらだったのがしっかりと種類別になりとてもみやすくなりました。
100種類以上x12を手直しするのはかなりの時間がかかるので、短時間でできたので感謝してます。 私自身マクロの知識がないので、コピーだけで次に生かせないのが残念ですが、今回は急ぎだったので助かりました。 ありがとうございます!

お礼日時:2014/12/15 10:23

回答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 で検索
   してみてください)
    • good
    • 0
この回答へのお礼

各月ごとに新しくはいった果物、または前の月にはあって次の月になくなってしまう果物の種類全部を調べて、すべての果物名のリストを作ることができなかったので、回答No3さんのアンサーをベストアンサーにさせていただきました。

VLOOKUPはよく使う関数だと思うので、しっかりと勉強して次使う機会あったら使わせていただきます。
ありがとうございました^^

お礼日時:2014/12/15 12:57

月ごとに果物リストを作るのではなく、全体の果物リストに対して月の


個数を書いていったほうが良いように思います。

果物名      4月  5月 …
------------------------------------
りんご       3   *  
超リンゴ      10   *
メタルリンゴ    2   *
マンゴー      *   10
怒りのマンゴー   10   2
------------------------------------

その月に売らない果物は個数を * にします。
売らない果物は最初に決まると思うので、月の入力前に * を入れて、
実際の入力時は * をフィルタで非表示にするか、並び替えで表の下に
追いやれば良いでしょう。

この表なら、何も考えなくても横に果物の月別個数が並びますよね。
    • good
    • 0

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