• ベストアンサー

Excelの結合したセルの検索

Excelで列方向に結合したセルを検索し、結合セルの先頭の行番号を 取得する方法を考えていますが、良いアイディアが浮かびません。 VBAで良い方法、又はサンプルがありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

こんばんは、飲んだくれのANo2、merlionXXです。 > ()内に引数(?)として 1 がありますが、 > 何を意味しているのでしょうか。 MergeArea(1)ですね? 結合セル範囲(MergeArea)の中の1番目のセルという意味です。 For Each c In ActiveSheet.UsedRange で使用範囲(UsedRange)の中のすべてのセルを順に見ていますので、結合セルでは、If c.MergeCells Then で、2番目も3番目も結合セルとして判定されてしまいます。 しかし、iso27001さんのご要望は「結合セルの先頭の行番号を取得する方法」ですので、そのうち1番目のセルだけを対象としているわけです。

iso27001
質問者

お礼

追加説明、ありがとうございました。 自分なりに理解できました。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

列方向とは縦に結合ということですね? 一例です。 Sub test()   For Each c In ActiveSheet.UsedRange     If c.MergeCells Then '結合セルなら       If c.Address = c.MergeArea(1).Address Then '結合セルの先頭なら         If c.MergeArea.Rows.Count > 1 Then '縦に結合してるなら           MsgBox "行番号は:" & c.Row         End If       End If     End If   Next c End Sub

iso27001
質問者

お礼

早速、回答頂きましてありがとうございました。 何行を結合したセルなのかも調べられますね。 ありがとうございました。 一つ質問ですが、コードの3行目で  If c.Address = c.MergeArea(1).Address Then ()内に引数(?)として 1 がありますが、 何を意味しているのでしょうか。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

選択した範囲の結合せるを1行コードで探知する方法は無いと思う。其れで Sub TEST01() For Each cl In Range("A1:H20") If cl.MergeCells = True Then 'MsgBox cl.Address If cl.Address = cl.MergeArea(1).Address Then MsgBox cl.Address MsgBox cl.MergeArea.Address End If End If Next End Sub  マージセル=マージセル範囲の第1セルと等しいときに 表示している。 このへんを参考に。 ーー Googleででも「mergecell VBA」で照会すればすぐ判る話。 結合セルを調べる http://officetanaka.net/excel/vba/tips/tips50.htm ーー >列方向に結合した も応用してみて。 If cl.MergeArea.Columns.Count=1 Then でとらえられるのでは。 ーー 参考 Sub TEST01() For Each cl In Range("A1:H20") If cl.MergeCells = True Then 'MsgBox cl.Address If cl.Address = cl.MergeArea(1).Address Then MsgBox cl.Address MsgBox cl.MergeArea.Address MsgBox cl.MergeArea.Rows.Count MsgBox cl.MergeArea.Columns.Count End If End If Next End Sub

iso27001
質問者

お礼

早速、回答頂きましてありがとうございました。 判り易いコードなのでなんとか物にできそうです。 ありがとうございました。

関連するQ&A

専門家に質問してみよう