• ベストアンサー

エクセルで条件によって、他のセルに反映させる方法

こんにちは、教えてください 状況としては シート1のセル A1~A31に1日~31の日付 B1~B31に数字を入力 C1~C31にIFの関数で、C1ならB1に、C2ならB2に特定の数字が入力されたときにその件数を表示するようにしています そこでしたいことですが、例えばC5とC10に件数が表示されたら、シート2に件数がでた日の日付リストができるようにしたいのです うまく説明できませんが、やり方を教えて下さい。お願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

No.3さんのお礼の欄に書かれた状態で考えます。 まずシート1のD列を計算用にお借りします。D1に以下の式を入力し、D31までコピーします。 =IF(C1="","",C1*100+COUNTIF(C$1:C1,C1)) つづいてシート2ですが、A1に"1"、A2に"2"とあるものとします(シート1のC列の値です)。各列の1行目に該当する日付を2行目以下に羅列します。 A2に以下のように入力します。 =IF(COUNTIF(シート1!$C$1:$C$31,A$1)<ROW()-1,"",OFFSET(シート1!$A$1,MATCH(A$1*100+ROW()-1,シート1!$D$1:$D$31,FALSE)-1,,,)) これをB32までコピーすれば、希望通りの結果が得られると思います(読み違えていたらごめんなさい)。 以下蛇足ですが、D列の内容をA列のすぐ左に挿入するか、E列にも日付を書いておけば、offset(~match(~・・・はvlookup関数で書くことができ、ちょっとだけ短くなります。 ・E列に日付がある場合 =IF(COUNTIF(シート1!$C$1:$C$31,A$1)<ROW()-1,"",VLOOKUP(A$1*100+ROW()-1,シート1!$D$1:$E$31,2,FALSE))

その他の回答 (4)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.3です。 やりたいことはあっているとのことですが、関数だけで処理する方法を思いつかなかったので、No.3で書いた手順をマクロにして、B列に変化があったときに自動的にマクロが実行されるようなVBAを書いてみました。 まずVisual Basic EditorでModule1に以下のマクロを作成します。 Sub 抽出() Dim Cell1 As Range Set Cell1 = ActiveCell Sheets("Sheet1").Select Range("A1:C1").Select Selection.AutoFilter Selection.AutoFilter Field:=3, Criteria1:="<>" Columns("A:A").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Sheets("Sheet1").Select Application.CutCopyMode = False Selection.AutoFilter Cell1.Activate End Sub 次に、同じくVBEからSheet1に次のコードを追加します。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then Call 抽出 End If End Sub これで、B列のどれかのセルが変化したときに、Sheet2を更新します。一瞬画面がちかちかっとしますが。 なお、これのVBAスクリプトは質問文にあるとおり、シート名がSheet1,Sheet2で、列はA,B,Cでないと正しく動作しません。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

私も他の方同様、質問内容をきちんと把握できてないのですが、「シート1のC列に何らかの値が入っている行のA列のセルの値のリストをシート2に作りたい」ということでしょうか? 手動ですが、シート1にオートフィルタをかけて(先頭行はタイトル行にした方がいいです)、C列で「空白以外のセル」でフィルタリングし、表示されたA列だけをコピーしてシート2に貼り付るという方法はどうでしょうか。 やりたいことと違っていたらすみません。

517hama
質問者

お礼

分かりにくい説明ですいません ham_kamoさんの書かれているような感じです シート1の一覧表で入力された状況に応じて、シート2に自動的に抽出したいのです。 例)シート1のA列に日付が連番で、B列に山田と入力、C列はB列に山田と入ると1を佐藤と入ると2を表示 このように設定しておいて、B5とB17とB25に山田と入力します すると5日と17日と25日がシート2に表示されるようにしたいのです こんなことができるのか分かりませんし、うまく説明できないのですが、よろしくお願いします

  • sakuuuuu
  • ベストアンサー率32% (67/209)
回答No.2

ちょっと私もイメージがつかめません。 「その件数」とか「シート2にリストを作る」だけでは良く分かりません。 あなたがシートの仕様を完璧に理解し、うまく説明できないと我々にも何がしたいか伝わってきません。 質問の入力に時間はかかるかもしれませんが、例等を記載してきちんと仕様を記述するのが良いかと思います。 その方が回答もしやすいし、回答も多くなるでしょう。

  • altern8
  • ベストアンサー率36% (17/47)
回答No.1

されたいことのイメージが今ひとつつかめていなくて申し訳ないのですが、例えばピボットテーブルを作成して、B列の特定の数値のみ抽出するというようなやり方ではいかがでしょうか?

関連するQ&A