こんばんは、いつもお世話になっています。
今回は関数で出来るのかわからないんですが質問させてください。
A B C
商品名 個数 販売数
1 りんご 1 2
2 なし 3 5
3 ぶどう 7 9
4 りんご 2 4
上のようにSheet1に表があったとします。
A列の「りんご」を検索し、1行目と4行目を別シートに表示
その結果を下のように平均・最大・最小という風に表示したいのですが可能でしょうか?
A B C
商品名 個数 販売数
1 りんご 1 2
2 りんご 2 4
3
4 最大 2
5 最小 1
6 平均 2
実際はに作っている表の列は「Z」まであり、行も毎日入力するものなのでかなりの数になります。
自分でもいろいろ試してA列を=DGETで検索したのですが1つしか表示されなくてダメでした。
だめだめな自分にお知恵を貸してくださいm(_ _)m
A 回答 (26件中1~10件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ひとつの手法として
1. 1行目とA列に挿入をかけて、空けてください。
2.1行目に、2マス使って、左側を「検索データ」と入力する。
3.右側は、データ→入力規則→リスト により、商品名のリストが、並ぶようにします。(仮に、このセルをD1セルとします)ついでなので、何か表示させておいてください。
1行目=空き、2行目=タイトル(商品名、個数、販売数…)となり、3行目からデータが並ぶことになりますよね。(B3よりデータが始まると思います)
4.A3セルに以下の数列を入れます。
=if(b3=$d$1,max($b$2:b2)+1,"")
そして、この関数を下までドラッグします。
D1で指定した商品だけ、ナンバーリングされると思います。
5.A2から、表全体を覆い、なお余分にドラッグし、挿入→名前で名前をつけます。(仮に「一覧表」と名付けます)
6.シート2を選択します。
7.1行目に 最大値、最小値、平均 と入れておきます。
3行目に表題を入れます(A3=商品名、B3=個数、C3=販売数…)
8.A4セルに以下の関数を入力します。
=IF(ISERROR(VLOOKUP(ROW()-3,一覧表,2,0)),"",VLOOKUP(ROW()-3,一覧表,2,0))
9.B4セルに以下の関数を入力します。
=IF(ISERROR(VLOOKUP(ROW()-3,一覧表,3,0)),"",VLOOKUP(ROW()-3,一覧表,3,0))
10.C4セルに以下の関数を入力します。
=IF(ISERROR(VLOOKUP(ROW()-3,一覧表,4,0)),"",VLOOKUP(ROW()-3,一覧表,4,0))
11.A4~C4セルを選択し、関数を下までコピーします。
ここで、シート1D1セルで選択したデータが列挙されると思います。
12.最大値、最小値、平均を通常通り、範囲指定して下さい。
Z列まで使用ということで、最大、最小、平均をどのデータでどのように表示したいのか分かりませんので、このように書きました。
row()により、検索をかけていますので、1~3行目をそれぞれ最大、最小、平均とし、4行目に表題、5行目からデータという場合には、row()-4とすれば対応可能です。
いかがでしょうか?
No.2
- 回答日時:
A B C …
1 最大 7 9 …
2 最小 1 2 …
3 平均 3.25 5 …
4
5 商品名 個数 販売数 …
6 りんご 1 2 …
7 なし 3 5 …
8 ぶどう 7 9 …
9 りんご 2 4 …
10 … … … …
B1: =SUBTOTAL(4,B$6:B$1000)
B2: =SUBTOTAL(5,B$6:B$1000)
B3: =SUBTOTAL(1,B$6:B$1000)
範囲 B1:B3 を右方にズズーッと複写
5行目で[オートフィルタ]を設定した後、「商品名」で“りんご”を選択してみてください。
No.3
- 回答日時:
試しにVBAで作ってみました。
一例ですが、ご参考までに。
元データ:Sheet1のA1~
抽出データ:Sheet2のA1~
としています。
Sub test()
On Error GoTo Err
Dim MyKey As String
Dim St1Rng As Range, St2Rng As Range
Dim St1 As Worksheet, St2 As Worksheet
Dim LastRow As Long, LastCol As Long
Dim c As Long
Set St1 = Worksheets("Sheet1") '元データのシート
Set St2 = Worksheets("Sheet2") '抽出するシート
Set St1Rng = St1.Range("A1").CurrentRegion 'アクティブセル領域取得
St1Rng.AutoFilter 'フィルタ設定
'検索ワードの要求
MyKey = Application.InputBox("検索ワード入力", Type:=2)
If MyKey = "False" Then Exit Sub
St1Rng.AutoFilter Field:=1, Criteria1:=MyKey 'MyKeyでデータ抽出
St2.Cells.ClearContents
'可視セルをコピー&ペースト
St1Rng.SpecialCells(xlCellTypeVisible).Copy _
Destination:=St2.Range("A1")
St1Rng.AutoFilter 'フィルタ解除
'最大、最小、平均の計算
With St2
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set St2Rng = .Range("B2:B" & LastRow) '基準の計算領域
.Range("A" & LastRow + 2).Value = "最大"
.Range("A" & LastRow + 3).Value = "最小"
.Range("A" & LastRow + 4).Value = "平均"
For c = 2 To LastCol
.Cells(LastRow + 2, c).Value = _
WorksheetFunction.Max(St2Rng.Offset(, c - 2))
.Cells(LastRow + 3, c).Value = _
WorksheetFunction.Min(St2Rng.Offset(, c - 2))
.Cells(LastRow + 4, c).Value = _
WorksheetFunction.Average(St2Rng.Offset(, c - 2))
Next c
End With
Exit Sub
Err:
MsgBox "error"
End Sub
この回答への補足
VBAと大層なものを作っていただきありがとうございます。
早速、作っているシートに導入してみたのですが、やはりエラーがでました。
作っているのはA1からV3まで見出しがあり、検索する列はB列です。
色々いじってみたのですが、見出しが表示されず無理でした。
No.4
- 回答日時:
改良しました。
元データ:Sheet1のA1~
3行見出し、4行目よりデータ
B列に検索ワードあり
C列~V?列まで数値データあり
(検索列の右隣から数値データと仮定してます)
抽出データ:Sheet2のA1~
抽出データの1行したから、集計計算
A列:最大、最小、平均の見出し
C列以降:計算結果
データの場所など上記と異なるようであれば修正します。
尚、検証が十分ではないので、エラーが出る場合は教えて下さい。
Sub test2()
On Error GoTo Err
Dim MyKey As String
Dim St1Rng As Range, St1Rng2 As Range, St2Rng As Range
Dim St1 As Worksheet, St2 As Worksheet
Dim LastRow As Long, LastCol As Long
Dim HeadLineNum As Long
Dim KeyColumn As Long
Dim c As Long
Set St1 = Worksheets("Sheet1") '元データのシート
Set St2 = Worksheets("Sheet2") '抽出するシート
HeadLineNum = 3 '見出し行の数
KeyColumn = 2 'B列(2列目)で検索
'アクティブセル領域
Set St1Rng = St1.Range("A1").CurrentRegion
'データ領域+見出し1行
Set St1Rng2 = St1Rng.Resize(St1Rng.Rows.Count - HeadLineNum + 1).Offset(HeadLineNum - 1)
St1Rng2.AutoFilter 'フィルタ設定
'検索ワードの要求
MyKey = Application.InputBox("検索ワード入力", Type:=2)
If MyKey = "False" Then Exit Sub
'変数MyKeyでデータ抽出
St1Rng2.AutoFilter Field:=KeyColumn, Criteria1:=MyKey
St2.Cells.ClearContents
'可視セルをコピー&ペースト
St1Rng.Resize(HeadLineNum - 1).Copy _
Destination:=St2.Range("A1")
St1Rng2.SpecialCells(xlCellTypeVisible).Copy _
Destination:=St2.Range("A1").Offset(HeadLineNum - 1)
St1Rng2.AutoFilter 'フィルタ解除
'最大、最小、平均の計算
With St2
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set St2Rng = .Cells(1, KeyColumn + 1).Resize(LastRow - HeadLineNum).Offset(HeadLineNum) '基準の計算領域
.Range("A" & LastRow + 2).Value = "最大"
.Range("A" & LastRow + 3).Value = "最小"
.Range("A" & LastRow + 4).Value = "平均"
For c = KeyColumn + 1 To LastCol
.Cells(LastRow + 2, c).Value = _
WorksheetFunction.Max(St2Rng.Offset(, c - KeyColumn - 1))
.Cells(LastRow + 3, c).Value = _
WorksheetFunction.Min(St2Rng.Offset(, c - KeyColumn - 1))
.Cells(LastRow + 4, c).Value = _
WorksheetFunction.Average(St2Rng.Offset(, c - KeyColumn - 1))
Next c
.Range("A1").Select
End With
Set St1 = Nothing
Set St2 = Nothing
Set St1Rng = Nothing
Set St1Rng2 = Nothing
Set St2Rng = Nothing
Exit Sub
Err:
MsgBox "error"
End Sub
この回答への補足
何度もすみません。
エラーがでました。
Sheet2の見出しが4行で表示されてます。
1,2行目はSheet1と同じ1,2行目のセルなのですが、3行目に空白のセルが入り4行目にSheet1と同じ4行目のセルが入っています。
Sheet1のデータはE列からでV列まであります。
そのE列~V列まで全て、最大・最小・平均を出したいのです。
お手数ですが、時間がある時で構わないので宜しくお願いします。
No.5
- 回答日時:
こんばんば。
まだ解決していないようなので・・・。
平均値なら
=AVERAGE(IF($A$2:$A$5="りんご",B$2:B$5,""))
と入力して<SHIFT>+<CTRL>+<ENTER>
でどうでしょう?
参照範囲はあえて絶対参照としています。
私ならこの式一つを入力した後下方向へフィル。
最大ならMAX、最小ならMINと書き換えます。
もちろん、このときも上記のキー操作で確定させます。
詳しくは下記URLを参照ください。
老婆心ながら・・・。
私もマクロ派なのでマクロは否定しませんが、質問者様の場合は
他の回答者様も書いておられるように「関数」を使用した方が
良いと思います。
参考URL:http://pc.nikkeibp.co.jp/pc21/special/hr/hr4.shtml
No.6
- 回答日時:
ka_na_deです。
おはようございます。
やはり、データが違うので予期せぬエラーがでますね。
改良しましたので、試して見てください。
見出しに空白行がある場合も考慮しました。
それと、エラー発生時はSUBプロシージャを抜けないように、
On Error Goto をコメントアウトしましたので、
エラー時はVBエディターに戻ります。
エラー時は、どこで止まってしまうか教えてください。
それから、Average関数は空白や文字列は自動的に無視して
計算してくれますので、そのまま使えると思います。
最後に、集計はE列から行うようにしました。(変数にしてます)
Sub test3()
'On Error GoTo Err
Dim MyKey As String
Dim St1Rng As Range, St2Rng As Range
Dim St1 As Worksheet, St2 As Worksheet
Dim LastRow As Long, LastCol As Long
Dim HeadLineNum As Long, KeyColumn As Long
Dim CalcStartCol As Long
Dim c As Long
Set St1 = Worksheets("Sheet1") '元データのシート
Set St2 = Worksheets("Sheet2") '抽出するシート
HeadLineNum = 3 '見出し行の数
KeyColumn = 2 '検索列の番号
CalcStartCol = St2.Range("E1").Column '集計開始列
'フィルター領域セット
Set St1Rng = St1.UsedRange
'フィルタ設定
St1Rng.AutoFilter
'検索ワードの要求
MyKey = Application.InputBox("検索ワード入力", Type:=2)
If MyKey = "False" Then Exit Sub
'変数MyKeyでデータ抽出
St1Rng.AutoFilter Field:=KeyColumn, Criteria1:=MyKey
St2.Cells.ClearContents
'可視セルをコピー&ペースト
St1Rng.SpecialCells(xlCellTypeVisible).Copy _
Destination:=St2.Range("A1").Offset(HeadLineNum - 1)
'フィルタ解除
St1Rng.AutoFilter
'見出し行のコピー&ペースト
St1.Rows("1:" & HeadLineNum).Copy _
Destination:=St2.Range("A1")
'最大、最小、平均の計算
With St2
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '最終行
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column '最終列
'基準の計算領域
Set St2Rng = _
.Cells(1, CalcStartCol).Resize(LastRow - HeadLineNum).Offset(HeadLineNum)
.Range("A" & LastRow + 2).Value = "最大"
.Range("A" & LastRow + 3).Value = "最小"
.Range("A" & LastRow + 4).Value = "平均"
For c = CalcStartCol To LastCol
.Cells(LastRow + 2, c).Value = _
WorksheetFunction.Max(St2Rng.Offset(, c - CalcStartCol)) '最大
.Cells(LastRow + 3, c).Value = _
WorksheetFunction.Min(St2Rng.Offset(, c - CalcStartCol)) '最小
.Cells(LastRow + 4, c).Value = _
WorksheetFunction.Average(St2Rng.Offset(, c - CalcStartCol)) '平均
Next c
.Range("A1").Select
End With
'変数の解放
Set St1 = Nothing
Set St2 = Nothing
Set St1Rng = Nothing
Set St2Rng = Nothing
Exit Sub
Err:
MsgBox "error"
End Sub
No.7
- 回答日時:
ka_na_deです。
test3に関して、
A列が空白列であった場合はエラーとなります。
改良しましたので、次回あわせて投稿します。
test3でうまくいった場合は、
締め切らないでコメント下さい。
最終版として投稿します。
この回答への補足
おはようございます。
このようなことに貴重な時間を割いて頂きありがとうございます。
TEST3を試してみましたが、エラーがでました。
実行時エラー 1004
アプリケーション定義またはオブジェクト定義のエラーです。
A列には日付が入りますので空白セルはありません。
見出しは結合している所があります。
A列はA1~A3まで結合しています。
D列まで同じように結合しています。
お手数ですが、よろしくお願いします。
No.8
- 回答日時:
ka_na_deです。
セルが結合されていたんですね。
エラーになりますね。勉強になりました。
修正しましたので、お試しください。
それから、データが入力されている所以外のセルに
罫線や塗りつぶしがあると、
エラーになるかもしれません。
>このようなことに貴重な時間を割いて頂きありがとうございます。
趣味でやってますので、気にしないで下さいね。
逆に勉強の題材を提供してもらって感謝してるところですよ。
Sub test4()
'On Error GoTo Err
Dim MyKey As String
Dim St1Rng As Range, St1Rng2 As Range, St2Rng As Range
Dim St1 As Worksheet, St2 As Worksheet
Dim St2LastRow As Long, St2LastCol As Long
Dim HeadLineNum As Long, KeyColumn As Long
Dim CalcStartCol As Long
Dim c As Long
Set St1 = Worksheets("Sheet1") '元データのシート
Set St2 = Worksheets("Sheet2") '抽出するシート
HeadLineNum = 3 '見出し行の数 (データ開始行番号-1)
KeyColumn = St1.Range("B1").Column '検索列の列番号取得
CalcStartCol = St1.Range("E1").Column '集計開始列の列番号取得
'ダミーの見出し行の挿入
St1.Rows(HeadLineNum + 1 & ":" & HeadLineNum + 1).Insert Shift:=xlDown
Set St1Rng = St1.UsedRange
'データ領域+ダミー見出し行
Set St1Rng2 = St1Rng.Resize(St1Rng.Rows.Count - HeadLineNum + 1).Offset(HeadLineNum)
With St1Rng2
'フィルタ設定
.AutoFilter
'検索ワードの要求
MyKey = Application.InputBox("検索ワード入力", Type:=2)
If MyKey = "False" Then Exit Sub
'左端の空白列の補正
KeyColumn = KeyColumn - .Cells(1).Column + 1
'変数MyKeyでデータ抽出
.AutoFilter Field:=KeyColumn, Criteria1:=MyKey
'抽出シートの初期化
St2.Cells.ClearContents
St2.Cells.ClearFormats
'抽出データ(可視セル)をコピー&ペースト
.SpecialCells(xlCellTypeVisible).Copy _
Destination:=St2.Cells(HeadLineNum, .Cells(1).Column)
'フィルタ解除
.AutoFilter
'見出し行のコピー&ペースト
St1.Rows("1:" & HeadLineNum).Copy _
Destination:=St2.Range("A1")
End With
'ダミーの見出し行の削除
St1.Rows(HeadLineNum + 1).Delete
'最大、最小、平均の計算
With St2
St2LastRow = .UsedRange.Cells(.UsedRange.Cells.Count).Row '最終行
St2LastCol = .UsedRange.Cells(.UsedRange.Cells.Count).Column '最終列
'基準の計算領域
Set St2Rng = _
.Cells(1, CalcStartCol).Resize(St2LastRow - HeadLineNum).Offset(HeadLineNum)
.Range("A" & St2LastRow + 2).Value = "最大"
.Range("A" & St2LastRow + 3).Value = "最小"
.Range("A" & St2LastRow + 4).Value = "平均"
For c = CalcStartCol To St2LastCol
.Cells(St2LastRow + 2, c).Value = _
WorksheetFunction.Max(St2Rng.Offset(, c - CalcStartCol)) '最大
.Cells(St2LastRow + 3, c).Value = _
WorksheetFunction.Min(St2Rng.Offset(, c - CalcStartCol)) '最小
.Cells(St2LastRow + 4, c).Value = _
WorksheetFunction.Average(St2Rng.Offset(, c - CalcStartCol)) '平均
Next c
.Range("A1").Select
End With
'変数の解放
Set St1 = Nothing
Set St2 = Nothing
Set St1Rng = Nothing
Set St2Rng = Nothing
Exit Sub
Err:
MsgBox "error"
End Sub
この回答への補足
素晴らしい!!
検索結果も最大・最小・平均も完璧に思ってる通りに出てきました。
しかし、その後またエラーが出ました。
さっきのエラーと同じで
実行時エラー 1004
アプリケーション定義またはオブジェクト定義のエラーです。
塗りつぶしてるセルや罫線はありません。
No.9
- 回答日時:
ka_na_deです。
検索語がヒットしなかった場合はエラーになりますね。
ヒットしない場合は、最大、最小などの計算を行わないように改良
しましたので、次回に再投稿します。
この回答への補足
1回、実行すると検索BOXが出て検索語を入れ検索し最大・最小・平均値がSheet2に表示されて、エラーが出ます。
あと、VBAは全くの初心者で実行する時は、VBAの画面にして上の「実行」を押し、Sub/ユーザーフォームの実行でプログラムを実行するようになるんですか?
Excelの画面のままで実行する方法はないのでしょうか?
度々の質問お許しください。
No.10
- 回答日時:
ka_na_deです。
あと一息ですね。
Sheet2の抽出結果を良く眺めてください。
最後のV列あたりまで、きちんとデータが
抽出されていますか?
もし、されていなければ、
averageの計算ができずに(0割り)で
エラーになっているのかも知れません。
なにか、手がかりはありませんか?
それから、VBエディターでコードのどの行で
エラーになっているか、
黄色で表示されている行を教えてください。
この回答への補足
あっ、すみません。
V列に文字列で0の値があったので、数値に変更したら、エラーはでなくなりました。
あと、検索BOXでリストから選ぶのを可能なんでしょうか?
例えば、B列に入力されているのを参照し、入力規則のリストみたいな感じでっていうのは可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- メルカリ <メルカリShops>消費者庁による販売許可の出ている機能性表示食品?の調べ方から 1 2022/11/24 17:46
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
すべてのシートを選択してエク...
-
合計が0の行を削除
-
Excelのデータが重いのはなぜで...
-
ローマ字入力で「トゥ」を入力...
-
「未使用」と「不使用」ってど...
-
エクセル 絶対値の合計
-
1点の辻の字に変換したいがエク...
-
Excelでエラー(#N/Aなど)値を...
-
SUM関数の範囲に#N/Aが...
-
エクセルからアクセスにインポ...
-
Eエクセルの計算方法で空欄を0...
-
もしセルが"#N/A"なら~をする...
-
「T」「H」「C」などだけが入力...
-
【世界はデータで出来ている】...
-
ACCESS VBA でのエラー解決の根...
-
VBAでユーザーフォームの表示を...
-
ttlで戻り値を取得する方法
-
バッチファイルでキー操作を行う。
-
excelで小数点0を表示させる方法
-
ExcelでVBAを使用した際に、『...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
すべてのシートを選択してエク...
-
エクセルで時刻を自動入力する方法
-
Excelのデータが重いのはなぜで...
-
Excel VBA 答えが0になってし...
-
EXCEL VBA 区切り位置のプログ...
-
エクセルマクロについて データ...
-
エクセル。ブック内検索で重複...
-
エクセルで30日以内に同内容の...
-
スプレッドシートで、指定した...
-
合計が0の行を削除
-
エクセルで隣のセルと同じ数字...
-
エクセルの中の漢字を一度にカ...
-
excel フレームのように一部...
-
エクセルで漢字がうまく並び替...
-
エクセルの入力 エンターキーで...
-
A列を検索し一致した行を表示。...
-
Excel2003での並べ替えについて
-
Excelユーザーフォームでのデー...
-
エクセルの既存のシートでは入...
-
エクセルで自動入力をマクロで...
おすすめ情報