[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaで複数範囲から文字列数をカウントする方法を教えてください』(Qing)
複数の範囲に名前を付けました。「範囲1」
それを使って特定文字列の数を検索するvbaを教えてください。
例えば、「範囲1」の名前をつけた範囲内から「土屋」という文字列の数をカウントする時のvbaです。初心者で申し訳ございません。
MsgBox Application.CountIf(Range("範囲の名前"), "検索文字") BJ
同一セルに複数の該当文字がある場合は、このように
Sub test() Const FindStr As String = "土屋" Dim r As Range Dim Ans As Long
For Each r In Range("範囲1").Cells buf = buf & vbTab & r.Value Next r Ans = UBound(Split(buf, "土屋"))
MsgBox FindStr & " は " & Ans & " 個" End Sub
(momo)
セル A1:G1 と A2:J2 と A3:P3 までを指定して「Mo」という名前を付けました。
それらのセルには、「土屋」「広瀬」「古屋」などが一つのセルに一人の名前で入っています。
セル A25〜E25にそれぞれ見つけたい上記の名前が入っています。
「Mo」の中から知りたい名前の数をカウントしたい関数をvbaで作成して、セルA10に表示させたいのです。
で関数のcountif(Mo,$A$25)とセルA10に書いたところエラーが発生しました。だから、vbaでユーザー定義の関数を作成する必要があるのかと思った次第です。
素人でありながら、急ぎだったので知識のないまま丸投げしました。
申し訳ございませんでした。
勉強し直します。
名前に含まれてるブロック(連続してるセル範囲)の数が判ってる(今回だとA1:G1、A2:J2、A3:P3の三つ)んだったら
=COUNTIF(INDEX(Mo,,,1),"土屋")+COUNTIF(INDEX(Mo,,,2),"土屋")+COUNTIF(INDEX(Mo,,,3),"土屋") て式で求められるよ。 (春日野馨)
普通に春日野馨さんのようにもできますが ユーザー定義関数を作る勉強という事で、たとえば
標準モジュールに
Function QINGCOUNTIF(範囲 As Range, 検索文字 As String) As Long Dim r As Range Dim buf As String Application.Volatile For Each r In 範囲.Cells buf = buf & vbTab & r.Value Next r QINGCOUNTIF = UBound(Split(buf, 検索文字)) End Function
などとしておいて セルには =QINGCOUNTIF(Mo,A25) とすれば、答えは出ますね。 (momo)
もたもた書いている間にmomoさんと衝突。 ほとんどかわらないけど、常に Mo からということなら以下でも。
ユーザー定義関数ということなら たとえば
Function CountName(c As Excel.Range) As Long Dim r As Range Dim n As Long For Each r In Range("Mo").Areas n = n + WorksheetFunction.CountIf(r, c.Value) Next CountName = n End Function
で、シート側では =COUNTNAME(A25) といったように記述。
(ぶらっと)
みなさまの速い返答に感動しました。
おかげさまでなんとか間に合いました。
本当にありがとうございました。
vbaすごいです。勉強します
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.