- ベストアンサー
excel 関数をON、OFFさせる方法
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
要するに、F列に「●」が入力されていて、且つ、B列に「C」が入力されている、という条件を満たしている行数を求める、といった事をされたいのですね? もし、質問者様が御使いになられているExcelのバージョンがExcel2007以降である場合には、その目的に合った関数としてCOUNTIFS関数(COUNTIF関数ではありません)があります。 例えば、2行目~6行目の範囲内で、F列に「●」が入力されていて、且つ、B列に「C」が入力されている、という条件を満たしている行数を求める場合には、次の様になります。 =COUNTIFS(B2:B6,"C",F2:F6,"●") 尚、もし、質問者様が御使いになられているExcelのバージョンがExcel2007よりも前のバージョンである場合には、SUMPRODUCT関数を使えば同様の事が可能となりますが、SUMPRODUCT関数は計算処理に要するパソコンの計算負荷が大きく、データ数が数千行程度にもなる場合には、計算が終了するまでに何分もかかってしまう場合があります。(1000行程度までなら、それ程時間はかからないようですが) =SUMPRODUCT((B2:B6="C")*(F2:F6="●"))
その他の回答 (4)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >関数をONに出来る様なスイッチ役のセルが作れればと・・・ とありますので、一案です。 F列をダブルクリックではどうでしょうか? 実際のデータはもっと多いと思いますが、 ↓の画像の通りの配置だとします。 画面左下の表があるSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてF列をダブルクリックしてみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'この行から If Application.Intersect(Target, Range("F2:F6")) Is Nothing Then Exit Sub Dim i As Long Dim j As Long Dim k As Long Dim myArea As Range Set myArea = Range("B9:E11") i = Target.Row Cancel = True myArea.ClearContents If Target <> "" Then j = WorksheetFunction.Match(Target, Rows(8), False) For k = 9 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(k, j - 1) .Value = WorksheetFunction.CountIf(Range(Cells(2, j - 1), Cells(6, j - 1)), Cells(k, 1)) .Offset(, 1) = WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 5)), Cells(k, 1)) End With Next k End If End Sub 'この行まで ※ 空白セルをダブルクリックするとB9~E11のデータが消えるだけです。m(_ _)m
お礼
ご回答どうもありがとうございます。 これがVBEというやつなのですね、凄いですね! こんな凄い方法もあるのですね。 ●をダブルクリックしたら表が出てきました! しかし▲をダブルクリックしたら甲列の方が消えてしまいました・・実際の表は甲の列も乙の列も全て残しておくので今回は参考にさせて頂きますね。 この説明不足の中からこんなにすごい計算式を出して頂き感動です! 説明不足とお返事、お礼が遅れまして大変申し訳ありませんでした。 本当にどうもありがとうございました!
補足
評価の方、誤ってしまいました。 5です。大変申し訳ございません・・・
- kagakusuki
- ベストアンサー率51% (2610/5101)
ANo.3です。 もし、添付画像の通りにされるのでしたら、まず、B10セルに次の関数を入力して下さい。 =COUNTIF(B$2:B$6,$A10) 次に、C10セルに次の関数を入力して下さい。 【Excel2007以降のバージョンの場合】 =COUNTIFS(B$2:B$6,$A10,$F$2:$F$6,C$9) 【Excel2007よりも前のバージョンの場合】 =SUMPRODUCT((B$2:B$6=$A10)*($F$2:$F$6=C$9)) そして、B10~C10の範囲をまとめてコピーして、B10~E12の範囲に貼り付けて下さい。
お礼
再度ご回答どうもありがとうございました。 こんな方法も出来るのですね。勉強になります。 私が使っているのはExcel2000と2002でした。 少ない情報と私の説明不足の中から丁寧に答えてくださりありがとうございました。
- koko88okok
- ベストアンサー率58% (3839/6543)
Excelの計算は通常「自動」に設定されていますが、「計算方法」を「手動」に設定しておいて、 「再計算」する時は「F9」キーのショートカットキーを押すことで計算させることが出来ます。 計算時はここに注意 これで「Excel 2007」で仕事がはかどる! http://ascii.jp/elem/000/000/200/200639/index-2.html
お礼
ご回答どうもありがとうございます! そういう事も出来るのですね、勉強になります。 計算式がわかったら使ってみようと思います。 お礼が遅れましてすみません。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
=COUNTIF(B2:B3,"A") を =IF(ISBLANK(F9),"",COUNTIF(B2:B3,"A")) にすると、F9に何か入れないと空白になる。
お礼
ご回答ありがとうございます! 参考にさせて頂きます。 お礼が遅れましてすみません。
補足
全くの説明不足ですみません。 F列の記号は何行目にあるかと決まっているわけではなく、付ける時々によって違う行につき、その上、甲なら●、乙なら▲と区別しているので、それぞれ別にカウント出来るでしょうか?
お礼
ご回答どうもありがとうございます。 お返事、お礼が遅れまして申し訳ございません。 上記の方法で出来ました! 表がもっと大きいので、実際に入力して試してみたいと思います。