• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結合セルが連続して複数存在する場合。)

vbaで単体の結合セルを抽出する方法

このQ&Aのポイント
  • vbaを使用してExcel2003の環境で、単体の結合セルを抽出する方法について教えてください。
  • 結合セルが連続して複数存在する場合に、vbaで単体の結合セルを抽出する方法についてのソースコードが提供されています。
  • 提供されたソースコードを使用することで、指定した範囲内で連続している結合セルを検出し、単体の結合セルを抽出することができます。Excelのバージョンによってコードの動作が異なるため、注意が必要です。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

>でどのようにしたら単体の結合セルが抽出できるでしょうか 「単体の結合セル」の意味するところがよくわからないけれど、結合セルのRangeごとに控えておきたいということでしょうか? ◆とりあえず、それぞれの結合セルの左上のアドレスを配列に保管する例 全セルに対して走査しているので、ちょっと効率が悪いかも… (サイズも保管するのなら、MergeAreaの.Rows.Count、.Columns.Countで取得可能です。  でも、結合状態が変化することがないのならサイズは不要でしょう。) 対象はActiveSheetのUsedRangeになっていますが適宜修正してください。 Sub sample()  Dim MergeArray() As String  Dim c As Range, rng As Range, n As Integer  n = 0  For Each c In ActiveSheet.UsedRange   If (c.MergeCells And c.Address = c.MergeArea.Item(1).Address) Then    n = n + 1    ReDim Preserve MergeArray(1 To n)    MergeArray(n) = c.Address   End If  Next c End Sub

qrost24i
質問者

お礼

すいません。返信が遅くなりました。 色々試したのですが、うまく行きませんでした。 ちなみに、これ自体に取り組む必要がなくなったので 機会があるときにまたやってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Option Explicit Sub Main() MsgBox (Cells(1, 1).MergeArea.Rows.Count) End Sub 'みたいな感じで、連結行数数えられない? 'http://cid-b89cb784f5346675.office.live.com/browse.aspx/TestCase/Q6226119?uc=1

qrost24i
質問者

お礼

すいません。返信が遅くなりました。 色々試したのですが、うまく行きませんでした。 ちなみに、これ自体に取り組む必要がなくなったので 機会があるときにまたやってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA - セル解除

    コピーA列結合セルを解除して、解除した行にすべてに「OK」と入れたいのですがうまくいきません。 アドバイスをお願い致します。 Dim i, Addr Worksheets("Sheet1").Range("A:A").Copy With Worksheets("Sheet2") .Range("A1").PasteSpecial . . If .Cells(i, 1).MergeCells Then Addr = .Cells(i, 1).MergeArea.Address .Cells(i, 1).UnMerge .Cells(i, 1)(Addr) = "OK" '←ここがダメです。 End If . .

  • Excelで複数セルからの文字の結合

    B列からF列までのセルの内容を結合してH列に表示させるため、 以下のVBAを使用したのですが、結果が上手くいきません 原因など分かりましたら、指摘をお願いします マクロの内容 Sub test01() Dim c As Range Dim i As Long With ActiveSheet i = 1 Do While .Cells(i, "A") <> "" If .Cells(i, "A") <> "" Then For Each c In .Range(.Cells(i, "B"), .Cells(i, "B").Cells(i, "F")) .Cells(i, "H") = IIf(.Cells(i, "H") = "", c, .Cells(i, "H") & "/" & c) Next c Else .Cells(i, "H") = .Cells(i, "B") End If i = i + 1 Loop End With End Sub シートの内容  ABCDEFGH 1 1あいうえお 2 2か くけこ 3 3さし せそ 実行の結果 あ/い/う/え/お/ か/き/く/け/こ//さ/し//せ/そ/ さ/し//せ/そ///////////// 上記のようになってしまいます 2行目の「か/き/く/け/こ」の後に1行下の「さ/し//せ/そ」 が入っている状態です よろしくお願いします

  • 結合セル解除

    補足情報の追加書き込みがわかりませんので何度もトビを起こしいます。 申し訳ございません。 ↓例で、 G列結合セルを解除して、解除した行にすべてに"●"と入れたいのですがコピーできません。。 ご意見をいただけませんか? ------------ Option Explicit Sub Sample() Dim nRow, i, Addr, tmp Worksheets("Sheet1").Range("D:E,K:K,V:Y,AF:AM").Copy With Worksheets("sheet2") 'Y列も"sheet2"にコピー(G列) .Range("A1").PasteSpecial Paste:=xlPasteValues nRow = .Cells(Rows.Count, 1).End(xlUp).Row 'データのある最終行 For i = 5 To nRow If .Cells(i, 2) = "" Then .Cells(i, 2) = .Cells(i - 1, 2) 'B列 If .Cells(i, 4) = "" Then .Cells(i, 4) = .Cells(i - 1, 4) 'D列 Next i 'Y列("sheet2"のG列)のデータ分行を追加 For i = nRow To 4 Step -1 'Y列("sheet2"のG列)にデータがあるか If .Cells(i, 7) <> "" Then tmp = .Cells(i, 7) '-------------ここがうまくいきません。 'G列結合セルを解除して対象行にすべて「OK」と入れる。 If .Cells(i, 7).MergeCells Then Addr = .Cells(i, 7).MergeArea.Address .Cells(i, 7).UnMerge .Range(Addr) = "●" End If '------------ここがうまくいきません。 .Rows(i).Copy .Rows(i).Insert .Cells(i + 1, 3) = "-" .Cells(i + 1, 6) = tmp '.Cells(i, 7) = "●" .Cells(i + 1, 7) = "★" End If Next i 'Y列("sheet2"のG列)の最後尾列(Q列)への移動 .Columns(7).Cut .Columns(17).Insert End With End Sub

  • EXCELのVBAでセル値の移動でエラー

    EXCEL2002のVBAでセル値の移動をVBAでやりたいのですが (1)の様に1行は出来るのですが、(2)の様に2行を移動させるとエラー (実行時エラー1004 アプリケーション定義またはオブジェクト定義のアラーです。)が出てしまいます。 (2)のマクロでどうしてエラーが出るのか分かりません。 エラーを出さずに2行目を移動させる方法を教えてください。 (1)_________________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value datachn = Range("L1").Value End If (2)_______________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value Cells(2, i + 13).Value = Cells(2, i + 12).Value ←ここでエラー i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value Cells(2, 13).Value = Range("L2").Value datachn = Range("L1").Value End If

  • VBAでセルの結合と分割(解除)をお願いします

    宜しくお願いいたします。 H5とH6のどちらかに数字か記号が入っています以下30個のセルも同様です、H6にデータを入れH5とH6を結合するとセルの認識はH5を認識するのでH6のデータは他へコピー出来ないので結合したセルを再度分割して一行に並び変えているのに下記の構文で実行しているのですが結合にかなりの時間がかかっています。分割は瞬時にできています。 お願いしたい件は即時もしくはなるべく早い方法がありましたらお願いいたします。 こんな感じで作りました Sub 結合() For a = 8 To 38 Range(Cells(5, a), Cells(6, a)).Select Selection.Merge Range(Cells(7, a), Cells(8, a)).Select Selection.MergeSub 以降29個    ・    ・    ・ Next a End Sub 分割() Dim range1 As Range Set range1 = Range("H5:AL5") range1.MergeCells = False Set range1 = Range("H7:AL7") range1.MergeCells = False 以降29個   ・   ・    ・ End Sub 良い方法をご伝授宜しくお願いいたします

  • 「Wordの表のセルの結合情報」をVBAで取得する

    「Wordの表のセルの結合情報」をVBAで取得する方法 EXCELのVBAであれば、下記サイトの下記マクロで判断できるようなのですが、 Word VBAには、「MergeCellsプロパティ」が無くて、駄目でした。 別の方法で判定出来ない物でしょうか? http://officetanaka.net/excel/vba/tips/tips50.htm ---------------------------------------------------------------------- Sub Sample2() Dim i As Long, buf As String For i = 2 To 9 If Cells(i, 1).MergeCells Then buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されています" & vbCrLf Else buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されていません" & vbCrLf End If Next i MsgBox buf End Sub ヘルプを調べましたが、ざっと見たところ載っていないように思います。 経験あるかた居たらご教授頂けると助かります。

  • 行方向の同じ値のセルを結合するマクロ

    ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub

  • VBA 結合されているセルのオートフィル

    先程同じような質問をしてしまい すいませんが 結合されているセルのオートフィルのやり方が今一つわかりません でしたので質問させていただきます。 やりたいこと A列・・・A1セル『1』A2セル『2』・・・A10セル『10』と 数字が入っています。 BとC列・・・結合されており B1C1セル『1000』B2C2セル『1100』と数字が入っています。 F1セル・・・1~10までの数字が入っています。 処理内容 F1セルに『5』と数字が入っている場合 B5C5セルを選択後、数字が入っているB2C2セルまで移動します。 そのあと、B5C5セルではなく B4C4セルまで『1100』とオートフィルしたいのですが 可能でしょうか。 それともこのような処理をしたい場合オートフィルをするのは 間違っているのでしょうか? すいませんがコード記載していますので 回答宜しくお願い致します。 コード Sub Macro1() Dim a As Variant Dim i As Variant Dim RSta As Long Set a = Range("F1") '検索値'例えば5と入力したら For i = 1 To 10 If a.Value = Cells(i, 1).Value Then 'F1セルに5と入力されA5セルの数字が5なら If Cells(i, 2) = "" Then 'B5セルの値が何もなければ RSta = Cells(i, 2).End(xlUp).Row 'ここでBとCセルの結合されているセルの数字が入っている 一番上のセルを選択し Range("B" & RSta, "C" & RSta).AutoFill Destination:=Range("B" & RSta, "C"), Type:=xlFillCopy 'このコードが間違っているらしくうまくできません。ここでBとCの結合されているセル2行目から4行目までをオートフィル(数字のコピーのみを実施したい) End If End If Next i End Sub

  • セル解除後、各行に値をコピーし結合するマクロ

    A1からC3のセルが結合しており、 そのセル結合を解除すると、A列のみ値がコピーされる。 コピーした後、各行ごとにセルを結合していく…… という処理をしたいと思い、 調べて下記のマクロまでなんとかこぎつけました。 Sub セル結合() Dim date1 As Variant Dim range1 As Range Application.DisplayAlerts = False For Each range1 In Selection.Rows If range1(1).MergeCells = False Then range1(1).Merge Else date1 = Selection.Rows(1).Value With range1 .UnMerge .WrapText = False .ShrinkToFit = False Selection.Value = date1 End With End If Next range1 End Sub ※実行範囲に関しては、  任意選択をした範囲にしたいため、  range(1)にて処理を行いました。 困っているのは、上記のマクロを実行すると、 最初の行のみ結合できないということ。 もうひとつが、 セル結合をしない時に値を左端にコピーすると、 文字が自動縮小されてしまいます。 縮小しないようにするには、 どのような処理を入れたら良いでしょうか? お力添え頂けますと幸いです。 よろしくおねがいします。

  • セルの選択について

    <Sheet2のコード> Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not UserForm3.Visible Then UserForm3.Show 0 UserForm3.TextBox1.Text = Selection.Count End Sub *********************************************** <UserForm3のコード> Private Sub CommandButton1_Click() With Selection .MergeCells = True .WrapText = True .Value = TextBox2.Text & ComboBox1.Text End With UserForm3.Hide End Sub ---------------------------------------------- Private Sub UserForm_Initialize() Dim lastrw As Integer, lastrw2 As Integer, i As Integer lastrw = Sheet3.Range("A1").End(xlDown).Row lastrw2 = Sheet3.Range("B1").End(xlDown).Row If Sheet2.Range(Cells(5, 4), Cells(5, 100)).Select Then ・・・(1) For i = 1 To lastrw - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 1).Value Next i End If If Sheet2.Range(Cells(6, 4), Cells(6, 100)).Select Then ・・・(2) For i = 1 To lastrw2 - 1 ComboBox1.AddItem Sheet3.Cells(i + 1, 2).Value Next i End If End Sub ************************************************* ワークシート上でマウスで選択されたセルの行ごとにUserForm3のComboBox1で表示させる文字を変えたいのですが、どのようにすればよいのでしょうか。 上の(1)(2)だととマウスで選択されたセルではなく(1)(2)の範囲のセルが結合されてしまいます。。。 また、今はワークシート上でマウスを左クリックする度にUserForm3が表示されてしまいます。 これをワークシート上でマウスでセルを選択して右クリックするとUserForm3が表示される ようにしたりすることは可能なのでしょうか。