[[20160825140205]] 『結合セルの列数の調べ方について教えてください』(仁美) ページの最後に飛ぶ

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

 

『結合セルの列数の調べ方について教えてください』(仁美)

一つのシートを例にすると、

D2 E2 F2 G2 H2 I2 J2 K2〜T2 U2〜AA2

このセルには文字列が入っていて、K2〜T2とU2〜AA2は結合されています。

最終列の隣のセル(例だとAB2)に文字列が入ることはありませんが、それより後ろの列には文字列が入るかもしれません。
A2〜C2は空欄です。(ここは固定)
どうにかして、A2〜結合セルを含んだAA2までの「27」という値を出したいのですが、どうすれば良いでしょうか?

下記に試したことを書いてみます。

Range("D2").End(xlToRight).Column
結果は11

lCol = Range("D2").End(xlToRight).Column

    If Cells(2, lCol).MergeCells Then
        With Cells(2, lCol).MergeArea
            Col = lCol & .Columns.Count & "列" & vbCrLf
        End With
    End If
結果は18(間のK2〜T2の結合セルを数えてない?)

< 使用 Excel:Excel2010、使用 OS:Windows7 >


ん〜、こういうことでしょうか? 格好悪いロジックですが…。
後ろに何も代入されていない、別の行で判定する方が簡単かと思いますよ。

 Sub test()
    Dim lCol As Long

    lCol = 4
    While Cells(2, lCol).Value <> ""
        lCol = Cells(2, lCol).Offset(0, 1).Column
    Wend
    lCol = lCol - 1

    MsgBox lCol
 End Sub
(???) 2016/08/25(木) 14:47


 >結果は18

 ???私が試してみたら、結果は21だったんだけど??
 >U2〜AA2は結合されています。 
 の始まりの列になっちゃってます。

 >Cel.Address = Cel.MergeArea.Cells(1).Address
 まあ、ここでD11がかぶっちゃっているからなんだけど。
 このままでよければ、D21の結合セル分を足しこめば???
 追加
 ああ、ここでもかぶっている分 -1 しないとダメですね。

 さらに追加
 >lCol & .Columns.Count
    ↓
 lCol + .Columns.Count 
 BJ 15:12 15:30 15:37

???さん

回答ありがとうございます。
タイトルの行が2行目なので、2行目以外では判定できないんです。(空欄があったりするので)
また、後ろに文字列があるというのは、入力規則の項目のことなんですけど、
会社からこのフォーマットを使用するように指示されているので、移動したり消したりできないんです……。
???さんに提示して頂いたコードを試してみた結果、17でした。

BJさん

回答ありがとうございます。
lCol + .Columns.Count  に変えてみたのですが、結果は18になりました。
(仁美) 2016/08/25(木) 16:37


 無理やり(?) For/Next で書いてみました。

 Sub Sample()
    Dim c As Range
    Dim x As Long

    For Each c In Range("D2", Cells(2, Columns.Count).End(xlToLeft))
        If c.MergeArea(1).Address = c.Address Then
            If IsEmpty(c) Then
                Exit For
            Else
                x = c.Column + c.MergeArea.Columns.Count - 1
            End If
        End If
    Next

    MsgBox x

 End Sub

(β) 2016/08/25(木) 16:48


例えば1行目のAB列に"END"とでも入力しておき文字色を白にして見えなくしておく、というような変更はアリだと思うのですけどねぇ。

で、27という答えにならないということは、K2〜T2が結合されているはずが、R列の前で切れ目があって、R列が空白になっている、とかではないでしょうか?
(???) 2016/08/25(木) 17:02


 >lCol + .Columns.Count  に変えてみたのですが、結果は18になりました。

 それはおかしいですね。
 定義されたデーター配列になっていないのでは。

 >Range("D2").End(xlToRight).Column
 の結果が11 つまりK2の列番号

 >Cells(2, lCol).MergeArea.Columns.Count
 の結果が10 つまりK2:T2の列の数

 11 + 10 = 21
 になるはずですが・・・・。
 BJ 17:10


βさん 

回答ありがとうございます。
望みどおりの結果を得ることができました!感激です、本当にありがとうございました。

Bjさん

回答ありがとうございます。
お手数をお掛けしてすみません。表がズレていて、修正後に実行すると21になりました。
u2〜AA2もK2〜T2と同じようにして足せば良いのですよね、やってみます。ありがとうございました。
(仁美) 2016/08/25(木) 17:53


コメント返信:

[ 一覧(最新更新順) ]


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