0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

名簿に載っている人がテーブルの中に何人いるかを調べる

Last updated at Posted at 2020-06-23

##はじめに
タイトルがわかりにくいのですが、下のイメージのように、掃除当番表のようなテーブルがあり、月曜はグループ1の人が何人、グループ2の人が何人で、火曜は・・・ということを知りたいなと思い、VBAの関数を作成しました。

countMember.png

##コード

さっそくコードを書きます。


Function CountMember(member_list_rng As Range, target_rng As Range) As Long

Dim members As Variant
members = member_list_rng

Dim rng As Range

Dim i, n As Long
n = 0

For Each rng In target_rng
    For i = 1 To UBound(members, 1)
        If StrComp(rng.Value, members(i, 1)) = 0 Then
            n = n + 1
        End If
    Next i
Next

CountMember = n

End Function

##処理の流れ
続いて、処理の流れを説明します。

第一引数(member_list_rng)は、グループのメンバー一覧が記載されたRangeオブジェクト、第二引数(target_rng)は、調べたい対象のRangeオブジェクトとします。

まず、Variant型の変数(members)に第一引数のRangeオブジェクトを格納すると、グループのメンバーが配列となってmembersに格納されます。

この配列は二次元の配列になり、また、インデックスは0からではなく、1から始まることに注意が必要です。
例えば、以下のようなA1〜C5のセル範囲をmembersに格納すると、members(1 To 5, 1 To 3)となります。一次元目が行数、二次元目が列数ですね。今回の関数では、第一引数のセル範囲として列数=1での処理を想定しています。

5x3Rng.png

あとは、target_rng内のそれぞれのセルに対し、memmbersの全ての要素と値が一致しているか照らし合わせていきます(StrComp)。そして、値が一致している場合は、nに1を加えます。

最後にnを返しておしまいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?