私は Excel スプレッドシートを持っていて、それが私のタイムテーブルになっています。つまり、いくつかのタスクがあり、ほとんどの場合、セルが接続されています。20 個のセルを接続する場合もあれば、2 個だけの場合もあります。例
各セルは 1 時間なので、計量したセル数をカウントしたいと考えました。つまり、セルが 1 つしかない場合は 1 としてカウントし、3 つ接続している場合は 3 としてカウントします。したがって、例の画像では、セル数は S1: 3、S2: 4、S3:2、S4:6 となります。
長い間探していましたが、問題を解決できる関数が見つかりませんでした。私が見つけた最良の関数は ですが=countif(B4:H19, "Subject1")
、ここでは 3 つの連結されたセルに基づくセルが 1 つとしてカウントされます。この問題の解決を手伝っていただけますか?
ご回答をよろしくお願いいたします!
答え1
実際、共有していただいたスクリーンショットには結合セルと非結合セルの両方が含まれているため、この問題には数式ではなく VBA マクロが必要です。
Function MergedCellCount(ByRef Rng As Range, ByVal Criteria As Variant)
Dim c As Long
Dim Cell As Range
Dim n As Long
Dim r As Long
Application.Volatile
For c = 1 To Rng.Columns.Count
For r = 1 To Rng.Rows.Count
Set Cell = Rng.Cells(r, c)
If Cell.MergeCells = True And (Rng.Columns(c).Column = Cell.MergeArea.Column) Then
If Cell = Criteria Then
n = n + Cell.MergeArea.Count
r = r + (Cell.MergeArea.Rows.Count - 1)
End If
End If
Next r
Next c
MergedCellCount = n
End Function
Function unMergedCellCount(ByRef Rng As Range, ByVal Criteria As Variant)
Dim c As Long
Dim Cell As Range
Dim n As Long
Dim r As Long
Application.Volatile
For c = 1 To Rng.Columns.Count
For r = 1 To Rng.Rows.Count
Set Cell = Rng.Cells(r, c)
If Cell.MergeCells <> True And (Rng.Columns(c).Column = Cell.MergeArea.Column) Then
If Cell = Criteria Then
n = n + Cell.MergeArea.Count
r = r + (Cell.MergeArea.Rows.Count - 1)
End If
End If
Next r
Next c
unMergedCellCount = n
End Function
使い方:
どちらかを押すAlt+F11またはTABを選択してR右クリックしてメニューから五iewコード。
Cオピ &ポこれらの VBA マクロを使用します。
プレスAlt+Qシートに戻ります。
次に、ワークブックをマクロ有効ファイルとして保存します
*.xlsm
。この数式をセルに入力して
K2
下方向に塗りつぶします。=MergedCellCount(H$2:H$17,J2)+unMergedCellCount(H$2:H$17,J2)
必要に応じてセル参照を調整します。