• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBA複数条件一致後別シートに結果表示)

ExcelVBAで複数条件一致後に別シートに結果表示する方法

このQ&Aのポイント
  • ExcelVBAを使用して、複数の条件が一致した場合に結果を別のシートに表示する方法を教えてください。
  • VBAとマクロを勉強中で、数値データを処理する際に困っています。具体的には、性別、死因コード、年齢、市町村の4つの条件に一致したデータを別のシートにカウントして表示したいです。
  • シート1には性別、死因コード、年齢、市町村のデータがあり、シート2には結果を表形式で表示したいです。具体的な処理方法やコードのヒントを教えていただきたいです。

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

  • ベストアンサー
  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

Sheet1のデータ(レコード)のうち、sheet2のa1セルの市町村コードに該当するものを、 縦軸(年齢)、横軸(死因)で、性別ごとに集計する、と理解しました。 ************************************************************* Sub zzz() Dim r As Long Dim i As Integer, j As Integer, k As Integer Dim Wsf As Object Dim SCode As Range, Nenrei As Range Dim Ws1 As Worksheet, Ws2 As Worksheet Set Ws1 = Worksheets("sheet1") Set Ws2 = Worksheets("sheet2") Set Wsf = Application.WorksheetFunction Application.ScreenUpdating = False Ws2.Range(Ws2.Cells(2, 2), Ws2.Cells(132, 133)).ClearContents Ws2.Range(Ws2.Cells(134, 2), Ws2.Cells(264, 133)).ClearContents With Ws2 Set SCode = .Range(.Cells(1, 1), .Cells(1, 133)) End With r = 2 Do While Ws1.Cells(r, 1).Value <> "" If Ws1.Cells(r, 4).Value = Ws2.Cells(1, 1).Value Then If Ws1.Cells(r, 1).Value = 1 Then i = 1 ElseIf Ws1.Cells(r, 1).Value = 2 Then i = 134 End If With Ws2 Set Nenrei = .Range(.Cells(i, 1), .Cells(i + 130, 1)) End With j = i + Wsf.Match(Ws1.Cells(r, 3).Value, Nenrei, 0) - 1 k = Wsf.Match(Ws1.Cells(r, 2).Value, SCode, 0) Ws2.Cells(j, k).Value = Ws2.Cells(j, k).Value + 1 Else End If r = r + 1 Loop Application.ScreenUpdating = True Set Scode = Nothing Set Nenrei = Nothing Set Wsf = Nothing Set Ws1 = Nothing Set Ws2 = Nothing End Sub ****************************************************************************** (簡単に補足) 変数rを整数型で宣言 変数i,j,k を整数型で宣言 変数Wsf をオブジェクトで宣言 変数Scode,Nenrei をレンジで宣言 変数Ws1,Ws2 をワークシートで宣言 Ws1にSheet1をセット Ws2にSheet2をセット Wsfにエクセルのワークシート関数をセット 画面更新を止める Sheet2の男性用入力エリアをクリア Sheet2の女性用入力エリアをクリア Scode に、死因コードの範囲をセット rは2です。(シート1のレコード、2行目から始める) Sheet1のA列のセルが空白になるまでループさせる。     もし、レコードの市町村コードが、シート2のA1セルと同じだった場合、         もし、性別コードが1(男性)だった場合、             i は1   もし、性別コードが2(女性)だった場合、             i は 134      変数Nenrei に 年齢の範囲をセット (上で決めたiによって、男女の区別をしてセット)      j は、年齢の該当する行 (をMatch関数で求めている)      k は、死因コードの該当する行  (同上)      j,k で決まったセルに1を加算(カウント)    もし、レコードの市町村コードが、シート2のA1セルと異なる場合、          なにもしない    r に1を足して ループ。 画面更新を復活させる 変数の開放 終わり。

minminwamidori
質問者

お礼

お礼が遅くなりまして申し訳ありません。データが会社だったので、そのデータで試させていただいてからと思っていたら数日経ってしまいました。 試してみたところ、希望通りの結果になりました!しかもコードがシンプルで初心者の私にもわかりやすく書いていただき、補足もとても丁寧に書いて下さったので、後は自力でできそうです。某質問サイトで希望の光を見いだされたと思ったらテストコードとやらで改良もできないあてにならないコードを掴まされ、「後はお金がかかる」的なことまで書かれ失望していました(そんな人には絶対に頼みませんが)。 そんな私に希望の光を下さいました!数日頭を抱えていたのですが、解決してみると意外とシンプルでした。迷路に入っていると、そのシンプルな答えにたどり着けないのですが、本当にありがとうございました。感激で感謝の気持ちでいっぱいです。

関連するQ&A

専門家に質問してみよう