[[20110508192124]] 『結合セルの行数を数える方法』(まさ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『結合セルの行数を数える方法』(まさ)
たくさんの大きさの異なる結合セルがあり、
その結合セルに文字が入力されていない結合セルの行数(結合セル数ではなく結合を解除したときの行数)を調べたいのですが。
良い方法がありましたら教えてください。

例:

A1からA3が結合されていて文字が入力されている

A4からA7が結合されていて文字が入力されている

A8からA10が結合されていて文字が入力されていない

A11からA13が結合されていて文字が入力されている

場合、空白なセルが3つまたは、空白じゃないセルは10という結果を出したいのですが、どうかわかるかたよろしくおねがいします。


 ユーザ定義関数の COUNTA マージ版です。
 Function countMergeA(rng As Range)
    Dim r As Range
    countMergeA = 0
    For Each r In rng
        If r.MergeArea.Cells(1, 1).Value <> "" Then
            countMergeA = countMergeA + 1
        End If
    Next
 End Function
 のような感じで出ないでしょうか。
 (Mook)

ありがとうございます。
以下のように作成しましたが、うまくいきませんでした。
まことに申し訳ありませんが、より詳しい説明お願いします。

Sub 結合セル確認()

rng = Range("A1:A13")

countMergeA (rng)

End Sub


 ユーザ定義関数はご存じないでしょうか。
 上記のコードを標準モジュールにおいてシート上で
 =countMergeA(A1:A13)
 のようにします。

 試したようにしてもできると思いますが、数値を返す関数なので
 MsgBox countMergeA( Range("A1:A13") ) 
 としたら表示されると思いますが。

 マクロの形だけをまねるのではなく、内容を理解して使用しないと、
 意図した結果が得られなくなってしまいます。
 (Mook)

どうもすいません。
定義関数とやらをつかったことがないので・・・・・・
で、申し訳ありませんが、教えてください。
以下のように、記載して実行したら
メッセージで10と表示されたのですが、
3と表示されるのかな?っと思ったのですが、
間違いでしょうか?

Sub 結合セル確認()

MsgBox countMergeA(Range("A1:A13"))

End Sub


 横から失礼

 >空白なセルが3つまたは、空白じゃないセルは10という結果を出したい

 というリクエストに対し、Mookさんは If r.MergeArea.Cells(1, 1).Value <> "" Then
 というコードで 空白ではないセルをカウントしてますから 結果が10ということは
 ご希望通りと思いますが。

 ぶらっと立ち寄り

 例の様に並んでいて、3箇所に入力が有るとき
 >空白なセルが3つまたは、空白じゃないセルは10という結果を出したい
 と結果が出れば良いなら
 普通に、COUNTA関数やCOUNTBLANK関数で調べられませんか?
   =COUNTA(A1:A13)
   =COUNTBLANK(A1:A13)

 何が与えられるのかよく分かりませんが。
 この場合 A1:A11 の範囲が与えられた時
  A11セルはA13セルまで結合されているから
  自動的に A1:A13の範囲でカウントしたい
 って事なのでしょうか?

 (HANA)

ありがとうございます。
出来ました。
でも・・・・・以下のようにこつこつと入力したのですが、より簡潔な
方法はありますでしょうか?

Sub 結合セル確認()

Dim h101 As Integer
Dim h102 As Integer
Dim h103 As Integer
Dim h104 As Integer
Dim h105 As Integer
Dim h106 As Integer
Dim h107 As Integer
Dim h108 As Integer

Dim h201 As Integer
Dim h202 As Integer
Dim h203 As Integer
Dim h204 As Integer
Dim h205 As Integer
Dim h206 As Integer
Dim h207 As Integer
Dim h208 As Integer

Dim h301 As Integer
Dim h302 As Integer
Dim h303 As Integer
Dim h304 As Integer
Dim h305 As Integer
Dim h306 As Integer
Dim h307 As Integer
Dim h308 As Integer

Dim h401 As Integer
Dim h402 As Integer
Dim h403 As Integer
Dim h404 As Integer
Dim h405 As Integer
Dim h406 As Integer
Dim h407 As Integer
Dim h408 As Integer

Dim h501 As Integer
Dim h502 As Integer
Dim h503 As Integer
Dim h504 As Integer
Dim h505 As Integer
Dim h506 As Integer
Dim h507 As Integer
Dim h508 As Integer

h101 = countMergeA(Range("B3:B50"))
h102 = countMergeA(Range("B55:B102"))
h103 = countMergeA(Range("B107:B154"))
h104 = countMergeA(Range("B159:B206"))
h105 = countMergeA(Range("M3:M50"))
h106 = countMergeA(Range("M55:M102"))
h107 = countMergeA(Range("M107:M154"))
h108 = countMergeA(Range("M159:M206"))

h201 = countMergeA(Range("D3:D50"))
h202 = countMergeA(Range("D55:D102"))
h203 = countMergeA(Range("D107:D154"))
h204 = countMergeA(Range("D159:D206"))
h205 = countMergeA(Range("O3:O50"))
h206 = countMergeA(Range("O55:O102"))
h207 = countMergeA(Range("O107:O154"))
h208 = countMergeA(Range("O159:O206"))

h301 = countMergeA(Range("F3:F50"))
h302 = countMergeA(Range("F55:F102"))
h303 = countMergeA(Range("F107:F154"))
h304 = countMergeA(Range("F159:F206"))
h305 = countMergeA(Range("Q3:Q50"))
h306 = countMergeA(Range("Q55:Q102"))
h307 = countMergeA(Range("Q107:Q154"))
h308 = countMergeA(Range("Q159:Q206"))

h401 = countMergeA(Range("H3:H50"))
h402 = countMergeA(Range("H55:H102"))
h403 = countMergeA(Range("H107:H154"))
h404 = countMergeA(Range("H159:H206"))
h405 = countMergeA(Range("S3:S50"))
h406 = countMergeA(Range("S55:S102"))
h407 = countMergeA(Range("S107:S154"))
h408 = countMergeA(Range("S159:S206"))

h501 = countMergeA(Range("J3:J50"))
h502 = countMergeA(Range("J55:J102"))
h503 = countMergeA(Range("J107:J154"))
h504 = countMergeA(Range("J159:J206"))
h505 = countMergeA(Range("U3:U50"))
h506 = countMergeA(Range("U55:U102"))
h507 = countMergeA(Range("U107:U154"))
h508 = countMergeA(Range("U159:U206"))

    Sheets.Add After:=Sheets(Sheets.Count)

    Range("A1") = h101
    Range("A2") = h102
    Range("A3") = h103
    Range("A4") = h104
    Range("A5") = h105
    Range("A6") = h106
    Range("A7") = h107
    Range("A8") = h108

    Range("B1") = h201
    Range("B2") = h202
    Range("B3") = h203
    Range("B4") = h204
    Range("B5") = h205
    Range("B6") = h206
    Range("B7") = h207
    Range("B8") = h208

    Range("C1") = h301
    Range("C2") = h302
    Range("C3") = h303
    Range("C4") = h304
    Range("C5") = h305
    Range("C6") = h306
    Range("C7") = h307
    Range("C8") = h308

    Range("D1") = h401
    Range("D2") = h402
    Range("D3") = h403
    Range("D4") = h404
    Range("D5") = h405
    Range("D6") = h406
    Range("D7") = h407
    Range("D8") = h408

    Range("E1") = h501
    Range("E2") = h502
    Range("E3") = h503
    Range("E4") = h504
    Range("E5") = h505
    Range("E6") = h506
    Range("E7") = h507
    Range("E8") = h508

End Sub


 変数宣言をされる習慣は良いと思いますが、今回に限っては不要だと思います。
    Range("A1") = countMergeA(Range("B3:B50"))
 のように直接記述すれば済みます。

 ですがもともと、ユーザ定義関数はシート上で直接利用できますので、新規シート上で
    A1 = countMergeA(Sheet1!B3:B50)
    A2 = countMergeA(Sheet1!B55:B102)
    A3 = countMergeA(Sheet1!B107:B154)
    A4 = countMergeA(Sheet1!B159:B206)
    A5 = countMergeA(Sheet1!M3:M50)
    A6 = countMergeA(Sheet1!M55:M102)
    A7 = countMergeA(Sheet1!M107:M154)
    A8 = countMergeA(Sheet1!M159:M206)
 と書いて、これをC,E,G,I 列にコピーすれば出ると思います。
 (Mook)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.