プロが教える店舗&オフィスのセキュリティ対策術

Excelで週ごとに新しいワークシートを作っています。
その毎週ごとのワークシート内の一部の範囲を指定して、その範囲内に出現する文字列の回数をカウントしてその出現回数を新規ワークシートに作成したいと考えています。
週は時間がたつに連れ増えますが、最高でも1年分です。
初めはそれぞれのワークシート内でcountif関数でそれぞれの文字をカウントし、そのあと合計ページで各ワークシートの値をSUM関数で合計していました。
しかしこれだと新しいワークシートが増えたときに非常に手間ですし、たまにワークシートが抜けてしまうことがあります。

週ごとのワークシートの名前の付け方には規則性があって、1週・2週といった感じです。
それ以外の名前のワークシートはテンプレートという名前と、合計という名前だけです。
各ワークシートの中も、基本的なレイアウトは同じで、特定の文字列の出現範囲も同じで、文字の現れ方だけが違う感じです。
「ああああ」とあって、2週目は「ああいい」3週目は「あいあい」みたいな感じです。

最終的に「あ」「い」と言う文字は全ワークシート内で何回出たか!というのを合計ワークシートに集計したいのです。
何か簡単な方法はないでしょうか?
アクセスで作ったら簡単にできたのですが、これを使う人間がアクセスは無理だということで、どうしてもExcelということになりました。
私はExcelが苦手で、countifとsumをなんとかみつけたのですが、これだと週が抜けたりとか、あまりに合計が手間なので何かあれば教えて貰いたいです。

よろしくお願いします。

A 回答 (3件)

以下はユーザ定義関数です。

標準モジュールに貼り付けます。
シート名の最後が「週」のシートの指定文字の個数をすべて合計します。

文字「あ」の個数をカウントするときは、=MojiCount("あ") のようにします。
セルを引数にすることもできます。

Function MojiCount(Moji As String)
  Application.Volatile

  Dim ws As Worksheet
  Dim rg As Range
  Dim CNT As Long

  For Each ws In Worksheets
    If Right(ws.Name, 1) = "週" Then
      For Each rg In ws.UsedRange
        CNT = CNT + (Len(rg.Text) - Len(Application.Substitute(rg.Text, Moji, ""))) / Len(Moji)
      Next
    End If
  Next

  MojiCount = CNT
End Function

この回答への補足

遅くなってすみませんでした。
なんとかできました。
ありがとうございました

補足日時:2007/04/13 21:17
    • good
    • 1
この回答へのお礼

ありがとうございます。
さっそく試してみますね。
こういう方法は初めてなので時間がかかりそうです。
明日またどうなったか補足へ書かせていただきます。

お礼日時:2007/04/10 21:57

#1です。


勘違いしていたみたいです。
1週目シートは あ をカウント 2週目シートは いをカウント
と言うふうに、カウントする内容がシートにより異なると思ってました。

補足頂いた詳細内容であれば、countif と sumだけでも何とかなりそうです。

シートを増やす場所を工夫すればいいのではないでしょうか。
シート見出しを
1週 | 2週 | 3週 | ・・・ | n週 | サンプル | 合計
と言う形で並べて、サンプルシートも1週~n週と同じフォーマットで
値を入れないでおきます。(テンプレートとして使用しても可)

1週からn週、サンプルのシートで、「あ」をカウントする位置と
「い」をカウントする位置を固定にしておきます。
例えば 「あ」のカウント位置を X1セル 「い」のカウント位置を
X2セルに指定しておいて、合計シートのSum関数を
=SUM( と入力し、1週目シートを選択し Shiftキーを押しながら
サンプルシートを選択すると =SUM('1週:サンプル'!   と関数に
表示されますので、X1と入力して かっこを閉じます。

シートを増やす時は、1週~サンプルシートの間に増やしていけば
自動的に合計値に加算されます。

http://www11.plala.or.jp/koma_Excel/contents5/ma …
    • good
    • 0
この回答へのお礼

こういう方法もあったんですね。
これも楽でいいですね!
ありがとうございました

お礼日時:2007/04/13 21:18

COUNTIFをどのシートに入れられているのか、合計をどの様にされているのか


具体的な例がないので、一般的な説明になりますが・・。

シート名を増やす時に規則性があるのでしたら、現在の関数に追加して
CELL関数を使用してみてはいかがでしょうか。
http://www.relief.jp/itnote/archives/001079.php

手順としては、シート名と該当する検索文字列の表を作成
例)シート名 検索
A列  B列
1週  ああああ
2週  ああいい

シート名を書き出したセルをA1として
=VLOOKUP(A1,検索!$A$1:$B$100,2,false)
として、該当シートの検索文字列をB1に表示
http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html

このB1の文字列を使用してCountif関数で文字列を数えて
最後に串刺し計算でCountifの値を集計

と言うような方法ではいかがでしょうか。

この回答への補足

COUNTIFを各ページに入れています

A B C D
あ い あ あ
あ あ い い

で適当な場所に
    F        G
「あ」の出現回数は countif(A1:d2,"あ")
「い」の出現回数は countif(A1:d2,"い")
という感じでcountを取ります
これを各ワークシートごとにやって
合計ワークシートで
あ→sum(sheet!.....)
い→sum(sheet!.....)
といった感じです。

補足日時:2007/04/10 00:13
    • good
    • 0
この回答へのお礼

cell関数とvlookup関数を使うのですね。
さっそく試してみたいと思います。
ありがとうございました。


補足で足りない部分がありました。
合計ワークシートで
あ→sum(sheet!.....)
い→sum(sheet!.....)
といった感じです。
の部分ですが、ワークシートが増えるごとにsum関数の括弧の中の値を増やしています。
ここでたまに抜けたりしてしまっています。
なんとかこの作業を自動化したいのです。

お礼日時:2007/04/10 00:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!