| すぐマク YNxv950 | Home | Search | Contents | Gallery | Introduction | Service | Support | What's New! |
| A列とB列が両方とも条件満足する行数を数えるには? |
|
|
||||||||
|
パソコン半年ほどでマクロを使われているとのこと、ご熱心のようですね。 私はいつも、Excelは多機能で1つの目的を達成するのに、いろいろな方法が選べる場合が多い、その中から自分に合った 方法を選択すれば良いのですが、 できれば Excelらしい使い方をしましょうと語っています。できるだけループさせる方法(注1)は避けましょう。 マクロを考える前に、データの組み合わせを整理してみます。 ![]() A列は 「はい、いいえ、空白」の3通り、 B列は 「○、×、空白」の3通りですから、組み合わせると左図の2〜10行目のように、9つのパターンができます。 この中でカウントしたいデータは、2行目の、A列が「はい」でかつ B列が「○」のパターンのものです。 その他の列の状況は不明ですので、ここでは一応、C列以後は使われていないとして考えます。 ところで、IF関数をご存知ですか。IF関数はワークシートの任意のセルに入力できます。 例えば、A2セルの内容が「はい」ならば 「1」をセットし、そうでないなら「0」をセットしたい場合、 同じワークシートの A2以外のセルへなら、下記のように入力します。 =IF(A2="はい",1,0) …… @ そして、この質問の場合は、A2セルの内容が「はい」で、かつ B2セルの内容が「○」であるかどうかを調べるのですから、A2およびB2セル以外のセルへ次のとおり入力します。 =IF(AND(A2="はい",B2="○"),1,0) …… A さっそく、あなたのワークシートの C2セルに、この関数を入力してみてください。 ... C2セルに「1」と表示されたら、次へ進みましょう。 では次は、C2セルの内容をコピーして、C3〜C10セルに貼り付けてみましょう。 その結果、「1」と表示されるのは相変わらず C2セルだけです。上図の 9つのパターンの中で、条件を満足するのは 1つだけですから、これで正解です。 カウントは、どうすれば良いでしょうか。 なんとなく分かってきましたか。そうです、IF関数でセットされた値を合計します。ちょうど好都合に、C1セルが空いていますから、次の関数を入力してみてください。 =SUM(C2:C10)…… B C1セルに「1」と表示されましたね。「1」ばっかりで少々わかりにくいので、10行目のデータを「はい、○」に変えてみると、はっきり確認できます。 質問は「カウントするマクロを組むにはどうすればよいか」でした。 上記で整理できた内容を中心にして、早速、マクロの自動記録で組んでみましょう。自動記録の方法はご存知かとは思いますが、一応、書いておきます。 ただし、Excel97、98、2000での操作方法ですので、Excel95では一部異なります。 (1) データが入ったワークシートを開いておく。 (2) 自動記録を開始するため、メニューから[ツール]−[マクロ]−[新しいマクロの記録]とクリックする。 (3) 「マクロ記録」のダイアログが表示されたら、マクロ名をメモしておいてから[OK]ボタンをクリックする。 ![]() (4) C2セルへ上記Aの IF関数を入力する(関数ウイザードを利用してもよい) (5) C2セルの内容をコピーして、C3〜C10セルに貼り付ける (6) C1セルへ上記Bの SUM関数を入力する (7) マクロの自動記録を終了するため、[ツール]−[マクロ]−[記録終了]とクリックする。 とりあえず、自動記録したマクロを試しておきましょう。手順は、 (1) ワークシートのC1〜C10セルにセットしてある数式をクリアする。 (2) メニューから[ツール]−[マクロ]−[マクロ]とクリックする。 (3) マクロ名に、先ほどメモしたマクロの名が表示されていることを確認して、[実行]ボタンをクリックする。 マクロの実行が終って、C1セルに「1」と表示されたら成功です。 ワークシートのセルに直接、関数を入力するだけで済むのなら、なにもマクロを組むことはないヨ! と言わずに、続けて読んでください。この後が役立つはずです。 自動記録したマクロを見てみてください。次にようにできていますか。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2000/3/18 ユーザー名 : Yoshioh Nagai
'
'
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(AND(RC[-2]=""はい"",RC[-1]=""○""),1,0)"
Range("C2").Select
Selection.Copy
Range("C3:C10").Select
ActiveSheet.Paste
Range("C1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[9]C)"
Range("C2").Select
End Sub
このマクロは、データ件数が増減すると具合よくありません。どこかと言うと、上から 11行目と 15行目です。
なぜかと言うと、11行目を見ると分かりやすいですが、"C3:C10" つまり、C3セルから C10セルまでと、範囲が固定されています。
15行目も同様で R[1]C:R[9] とあるのは、C2セルから C10セルまでを意味し、やはり固定されています。データ件数が増減しても、うまく動くマクロにするには、どう直せばよいでしょうか? マクロの11行目と15行目で 「C10」セルと自動記録されたところを、変数で指定する書き方に修正しましょう。 11行目は、次のとおり記録されています。
Range("C3:C10").Select
ひとまず次のとおり、変数で書く方法に修正しておきます。(注2)
Range("C3:C" & 最後の行).Select
また、15行目が、次のとおり記録されているので、
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[9]C)"
次のとおり 1行追加して、変数で書く方法に修正します。(注3)
行 = 最後の行 - 1
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[" & 行 & "]C)"
もうひとつ別のマクロを、自動記録しましょう。「最後の行」が何行目かを調べるためです。 自動記録の手順
(1) ワークシートを開く … 前述(1)参照(2) 自動記録 … 前述(2)参照 (3) マクロ名をメモ … 前述(3)参照 (4) 最終セルを選択するため、[編集]−[ジャンプ]とクリックする (5) 「ジャンプ」ダイアログが表示されたら、[セル選択]ボタンをクリックする (6) 「選択オプション」ダイアログが表示されたら、右図のように「最後のセル」のオプションボタンをオンにして、[OK]ボタンをクリックする (7) マクロの自動記録を終了させる … 前述(7)参照 画面にワークシートのB10セルが選択されていることを、確認しておきましょう。 最終セルを選択するための新しいマクロが、次のとおり記録されているはずです。
Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2000/3/22 ユーザー名 : Yoshioh Nagai
'
Selection.SpecialCells(xlCellTypeLastCell).Select
End Sub
このマクロは「最終セル」を選択するだけで、そのセルが何行目かはわかりません。
行数を取得するためのマクロは自動記録できませんので、上から5〜6行目の間に、次のとおり1行挿入してください。(注4)
Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2000/3/22 ユーザー名 : Yoshioh Nagai
'
Selection.SpecialCells(xlCellTypeLastCell).Select
最後の行 = ActiveCell.Row
End Sub
上のマクロの 6〜7行目をコピーして、最初に記録した Macro1 の 7〜8行目の間に貼り付けます。次のとおりできていれば、完成です。
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2000/3/18 ユーザー名 : Yoshioh Nagai
'
'
Selection.SpecialCells(xlCellTypeLastCell).Select
最後の行 = ActiveCell.Row
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(AND(RC[-2]=""はい"",RC[-1]=""○""),1,0)"
Range("C2").Select
Selection.Copy
Range("C3:C" & 最後の行).Select
ActiveSheet.Paste
Range("C1").Select
Application.CutCopyMode = False
行 = 最後の行 - 1
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[" & 行 & "]C)"
Range("C2").Select
End Sub
上手にできましたか。頑張りましたね。この Macro1 は、データ数が増減しても、正しくカウントしてくれるはずです。さっそくデータを追加入力して、Macro1を実行してみましょう。 ... 正しい答えが C1セルに表示されましたか? |
||||||||
|
||||||||
|
サンプルブックのダウンロードは ここをクリック (YNxv950_Count.xls.xls 80KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。 なお、このページの自動記録マクロをさらに整理したマクロが動きます。 |
| http://www.happy500z.com/ | Home | Contents | Gallery | Introduction | Service | Support | What's New! |