• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:他のブックの複数シートの〇記号の串刺し)

他のブックの複数シートの〇記号の串刺し集計方法

このQ&Aのポイント
  • エクセルで複数のシートに同じ表のデータがあります。それぞれのシートの〇と×を集計して他のブックの同じ表に集計結果を表示したいです。
  • 31枚のシートの〇と×を数値に変換し、それを串刺し集計するために、CountIfAcrossというユーザ定義関数を使用します。
  • CountIfAcross関数を使って、シート区間の先頭セルと後尾セル、検索条件を指定してカウントした数を返します。

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

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

回答No.1です。 こちらの読み方が間違っていましたね。 > 他のブックを参照するにはどういった記述にすれば > よろしいでしょうか。 変更は3ヶ所です。 [シート区間先頭セル]に指定したセル範囲 の存在する ブック の シート区間 を集計の対象にします。 Public Function CountIfAcross(シート区間先頭セル As Range, シート区間後尾セル As Range, 検索条件 As String) Dim sRef As String, sRefE As String, c As Range, cnt As Long, i As Long   sRef = シート区間先頭セル.Address(0, 0)   sRefE = シート区間後尾セル.Address(0, 0)   If sRefE <> sRef Then sRef = sRef & ":" & sRefE   With シート区間先頭セル.Worksheet.Parent ' ★追加     For i = シート区間先頭セル.Worksheet.Index To シート区間後尾セル.Worksheet.Index       For Each c In .Sheets(i).Range(sRef) ' ★1文字追加         If c.Text Like 検索条件 Then cnt = cnt + 1       Next     Next i   End With ' ★追加   CountIfAcross = cnt End Function

itsuroo4185
質問者

お礼

私の意図をくみ取って戴き誠に有難う 御座います。 ご回答戴き感激しております。 自分で検証してからお返事をと思い お礼のコメントが遅れまして 申し訳御座いませんでした。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

 無理してVBAを使わずとも、前問に回答したように思うが、その繰り返しですが 原ブックをコピーして、2ブック用意して (1)全シート(集計シートを除く)を○を1に、×を0に置換 (2)全シート(集計シートを除く)を○を0に、×を1に置換 この際(1)(2)共に、操作はシートタブの第1とSHIFTキーしながら、第30シートをクリックすることで、全シート(集計シートを除く)選択ができて、1回の置換で30シート1辺に済むことです。<==ここが便利なところ あとは「3D集計」でWEB解説ある方法で式を入れれば、そのセル位置の○や×の数が出るはず。 VBAで第1から第30シートまでのい1つの番地位置のセルの○と×の数をカウントしても (総なめ法)で来るが無理しなくても良いのではないか。 === VBAに興味が出たようだが 参考 VBAで○の数がSheet4、×の数がSheet5に出る. データ範囲はA2:D5のテストデータ Sub test01() For Each cl In Worksheets(1).Range("A2:D5") s1 = 0: s2 = 0 For Each sh In Worksheets If sh.Name <> "Sheet4" Or sh.Name = "Sheet5" Then Select Case sh.Cells(cl.Row, cl.Column) Case "○" s1 = s1 + 1 Case "×" s2 = s2 + 1 Case Else End Select End If Next Worksheets("Sheet4").Cells(cl.Row, cl.Column) = s1 Worksheets("Sheet5").Cells(cl.Row, cl.Column) = s2 Next End Sub == 例データ Sheet1 ー 1月 2月 3月 東京支店 ○ × × 名古屋支店 ○ ○ × 大阪支店  × ○ Sheet2 - 1月 2月 3月 東京支店 ○ × × 名古屋支店 × × ○ 大阪支店  × ○ ○ Sheet3 - 1月 2月 3月 東京支店 ○ × ○ 名古屋支店 × ○ 大阪支店  × ○ ○ === 実行結果 Sheet4 B3:D5 ○のセルごと数 3 0 1 1 2 1 0 3 2 Sheet5 B3:D5 ×のセルごと数 0 3 2 2 1 1 3 0 0 == コード行数を少なくすることを第1としてコードを書いたので、見出し部分など省いている。

itsuroo4185
質問者

お礼

imogasiさんの仰られる通り検索置換で出来たので無理せず VBAを使う必要はないのですが、VBAを使うとどうなる のかなぁと興味がわいてきまして、全くimogasiさんに千里眼 で心を見透かされているような気持になりました。 今回回答戴いて、VBAを勉強するきっかけになり、 誠に感謝しております。 お返事が遅れまして大変申し訳御座いませんでした。

回答No.1

こんにちは。 Q『複数のシートの○×記号の串刺し集計』 http://okwave.jp/qa/q9182888.html コメントを投稿しました。 コメント文を書いている間に新しい質問立てていたのですね。 行き違いがあったようで、失礼しました。 ユーザー定義関数(UDF)をアドインブックとして保存して、 Excelメニューからアドイン登録して、Excel再起動、です。 手順を踏めば、どのブックからでもUDFを使えるようになります。 コメント欄に書いた内容 |  | 新しいブック | →標準モジュールを挿入 | →UDFを貼付け | →アドイン(*.xlam,*.xla)ブックとして名前を付けて保存 | →保存したアドインブックを閉じる |  | → | [Excel][開発][アドイン]保存したアドインを登録 | →Excel再起動 |  | ■検索キーワード『excel ユーザー定義関数 アドイン』■ もしわからないところがあったら、とりあえずやってみて、 何処が解らなかったか、補足欄にでも書いてみて下さい。 一応、問題や課題が解決することが目標ですから、 ご自身で解決を確認(検証)し終わるまで、 或いは回答者が後から気が付いたことを伝えたい時もあるので、 少し(1日とか)時間を開けてから締め切るとベターで、 寧ろ好感を持って回答者からも受け入れられ易いと私は思いますです。 とりあえず以上です。

itsuroo4185
質問者

お礼

アドインの仕方を教えて戴き誠に有難う御座います。 実際に出来るとなんだか自信がつきます。 今回realbeatinさん方々のお陰でVBAを勉強して みようというきっかけになりました。 本当に有難う御座います。

関連するQ&A

専門家に質問してみよう