• 締切済み

excelでの集計結果の表示について

excelで一覧を作成し、一番右横に集計結果を表示できるようにしております。 一覧の内容は、縦に店舗名、横に各作業名で、表には各作業が「順調」「遅延」「完了」かを記載しております。 一番右横の集計結果には各作業が「順調」「遅延」「完了」がそれぞれ何件あるかをカウントしております。    店舗A    店舗B    店舗C     順調  遅延  完了     |ステータス ステータス ステータス ___________________________________ 作業1|順調    遅延     遅延    | 1    2   0 _______________________________________________________ 作業2|順調  順調  遅延  | 2    1   0 _________________________________________ 作業3|順調  順調  完了  | 2    0   1 _______________________________________________________ 「順調」「遅延」「完了」のカウントは以下のように取っております。 =COUNTIFS($AB$4:$HW$4,"ステータス",AB28:HW28,"順調") それぞれの集計結果数値をクリックするなり、ポインタを持っていくなりしたら、 順調なり遅延なりの対象店舗名を表示するようにしたいのです。 例:作業1の集計結果の遅延2の箇所をクリックしたら、店舗B、Cと表示される。 どうしたらよいでしょうか?

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 VBAのイベントプロシージャを使った以下の様な方法は如何でしょうか。  質問者様の御質問文には、どの情報がどのセル番号のセルに入力されているのかという事が説明されており線ので、仮の話として、下記の様なレイアウトとなっているものと仮定して話を進める事に致します。 ・「作業1」等の各種の作業名が入力されているセル範囲の中で、一番上のセルがある行が28行目 ・「店舗A」等の各種の店舗名が入力されているセル範囲の中で、一番左にあるセルがAB3セル ・「ステータス」と入力されているセル範囲の中で、一番左にあるセルがAB4セル ・表の右上の方にある「順調」、「遅延」、「完了」と入力されているセルは、HX3セル、HY3セル、HZ3セル  上記の仮定が正しいものとした場合、次の様な操作を行って、そのシート上の特定のセル範囲内にあるセルに対して、カウントされた数が表示されているセルをダブルクリックすると、該当する店舗名が表示される様にするためのイベントプロシージャを設定されると良いと思います。  まず、Excelウインドウの[開発]タブをクリックして下さい。  次に、「コード」グループの中にある[Visual Basic]ボタンをクリックして下さい。  すると「Microsoft Visual Basic for Applications 」ウィンドウが開きますので、その中の左の方にある「プロジェクト-VBAProject」という囲みの中に並んでいるシート名の中から、御質問にある一覧表が存在するシートの名前を選択してダブルクリックして下さい。(本件の場合はVBAを設定するのは、標準モジュールの中にではなく、ワークシートの方にですので、間違えない様にして下さい)  次に、「Microsoft Visual Basic for Applications 」ウィンドウの右側の大きな囲みの上にある2個の表示欄の内、左側の方に「Worksheet」と表示されている事を確認して下さい。  次に、「Microsoft Visual Basic for Applications 」ウィンドウの右側の大きな囲みの中に、以下の様なVBAの構文を入力して下さい。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim ClickRowF, CountSubR, StatusRangeR, ShopRangeR As Long Dim myMsg As Integer Dim CountRange, RangI As Range Dim ClickColumnF, ClickColumnL, CountRangeFC, CountRangeLC, ShopRangeFC, _ Results As String Dim CountSub As Variant 'ダブルクリックするセルが存在している列範囲の内の最初の列 ClickColumnF = "HX" 'ダブルクリックするセルが存在している列範囲の内の最後の列 ClickColumnL = "HZ" 'ダブルクリックするセルが存在している最初の行 ClickRowF = 28 '「順調」、「遅延」、「完了」等の検索すべき文字列が入力されている行(ダブルクリックするセルの真上) CountSubR = 3 If Target.Column >= Columns(ClickColumnF).Column And Target.Column <= Columns(ClickColumnL).Column _ And Target.Row >= ClickRowF And IsNumeric(Target.Value) And Target.Value >= 0 Then If Target.Value >= 1 And Int(Target.Value) = Target.Value And Cells(CountSubR, Target.Column).Value <> "" Then '「ステータス」と入力されているセルが存在している列範囲の内の最初の列 CountRangeFC = "AB" '「ステータス」と入力されているセルが存在している列範囲の内の最後の列 CountRangeLC = "HW" '「ステータス」と入力されている行 StatusRangeR = 4 '店名が入力されている列範囲の内の最初の列 ShopRangeFC = "AB" '店名が入力されている行 ShopRangeR = 3 Set CountRange = Range(CountRangeFC & Target.Row & ":" & CountRangeLC & Target.Row) CountSub = Cells(CountSubR, Target.Column).Value Results = "ステータスが「" & CountSub & "」となっている店舗には" _ & Chr(13) & "以下のものがあります。" & Chr(13) For Each RangI In CountRange If RangI.Value = CountSub And Cells(StatusRangeR, RangI.Column).Value = "ステータス" Then Results = Results & Chr(13) & Cells(ShopRangeR, RangI.Column + _ Columns(ShopRangeFC).Column - Columns(CountRangeFC).Column).Value End If Next RangI myMsg = MsgBox(Results, vbOKOnly + vbInformation, "該当店舗") End If End If SendKeys "{ESC}" End Sub  以上で準備は完了で、後はHX列~HZ列の28行目以下にある、カウント結果が表示されているセルをダブルクリックしますと、該当する店舗が表示されたBoxが現れます。(但し、カウント結果が0になっているセルをダブルクリックした場合に関しては、表示すべき店舗名が存在しませんので、Boxは現れません) 【参考URL】  エクセルExcel大事典 VBAマクロ イベントプロシージャ Open Target Cancel EnableEvents Volatile   http://home.att.ne.jp/zeta/gen/excel/c04p59.htm

noname#206655
noname#206655
回答No.2

if(完了、完了処理、if(順調、順調処理、遅延処理)) で判断するとして、セルをどうしよう。 セルに答えを一時的に入れ、表示も印刷も対象外にできるので、それを一時的な変数にする手法があります。さらに 順調 が 順著 など文字違いがあるといけないので、フォーム化します。 結果、自動化は表計算では無理。って結論になります。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

難しいです。

関連するQ&A

専門家に質問してみよう