
よろしくお願いします。
Excel2007です。
A1からA5000までデータが入っています。
データは文字列です。
その文字列を上から順に比較していき、
隣接する上下のデータが一致した場合、
さらにその下が一致しているかを調べ、
その作業を一致しなくなるまで続けます。
最後に、一致した部分すべてを選択し、
セルをまとめて結合し、左寄せしたいのです。
まとめて結合し、左寄せ、という部分は、
マクロを記録し、以下のようにするのはわかったのですが、
Range("a4123:a4131").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
そして、これをa5000(データが格納されている最後のセル)まで
続けたいのです。
例えば、
A1とA2を比較し、一致しないなら、A2とA3を比較。
一致したら、さらにA2とA4が一緒かどうか比較。
一致が無くなるまで続けて、最後に処理。
という感じです。
前半の部分が全くわかりません。
ご教示願えませんでしょうか。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんな感じ? (とりあえず100行に設定してあります)
結合後のセルの設定は、左寄せと、縦の中央表示しかしていませんので、必要なら付け加えてください。
また、空白セルが連続していても結合されます。(同じ内容の連続だから)
空白セルは例外とする場合は、セルの値が空白だったら次のセルに行くようにすれば良いです。
Sub test()
Dim rw As Long, tmp As Long
Dim str As String, flg As Boolean
Const rwEnd = 100 '//最終行
rw = 1
While (rw < rwEnd)
str = Cells(rw, 1).Text '//対象セルの値(文字列)
flg = False
For tmp = rw + 1 To rwEnd
If Cells(tmp, 1).Text = str Then flg = True Else Exit For
Next tmp
If flg Then
Application.DisplayAlerts = False '//結合時の警告表示をキャンセル
Range(Cells(rw, 1), Cells(tmp - 1, 1)).Merge
Application.DisplayAlerts = True
Cells(rw, 1).HorizontalAlignment = xlLeft '//書式設定(左寄せ)
Cells(rw, 1).VerticalAlignment = xlCenter
rw = tmp '//次の行までスキップ
Else
rw = rw + 1
End If
Wend
End Sub
No.5
- 回答日時:
いろんなやり方がありますね。
参考までに
Sub test01()
Dim MyUn As Range
Dim i As Long
For i = 2 To 5000
If Cells(i, "A") <> "" And Cells(i, "A") = Cells(i - 1, "A") Then
If MyUn Is Nothing Then
Set MyUn = Union(Cells(i, "A"), Cells(i - 1, "A"))
Else
Set MyUn = Union(MyUn, Cells(i, "A"))
End If
Else
If Not MyUn Is Nothing Then
With MyUn
Application.DisplayAlerts = False
.MergeCells = True
Application.DisplayAlerts = True
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
End With
Set MyUn = Nothing
End If
End If
Next i
End Sub
A5000までの途中で空白があってもかまいません。空白セル同士は結合させません。
No.4
- 回答日時:
Sub test()
Application.DisplayAlerts = False
Range("A1").Activate
While ActiveCell <> ""
i = 1
While ActiveCell = ActiveCell.Offset(i)
i = i + 1
Wend
With ActiveCell
.HorizontalAlignment = xlLeft
.Resize(i).MergeCells = True
End With
ActiveCell.Offset(1).Activate
Wend
Application.DisplayAlerts = True
End Sub
こんな感じ
No.3
- 回答日時:
一例です
Sub test()
Dim i As Long, ii As Long
i = 1
ii = 1
Application.DisplayAlerts = False
Do Until Cells(i, 1).Value = ""
ii = ii + 1
If Not Cells(i, 1).Value = Cells(ii, 1).Value Then
Range(Cells(i, 1), Cells(ii - 1, 1)).MergeCells = True
i = ii
End If
Loop
Application.DisplayAlerts = True
End Sub
A列、連続でデータがあること
空白がある場合、そこで終わり
No.2
- 回答日時:
説明のとおり作成すれば以下のようになります。
---
Sub mCheck()
i = 1 '開始
Do Until Trim$(Cells(i, 1).Value) = "" '最後のセルまで
j = i + 1
Do Until Cells(i, 1).Value <> Cells(j, 1).Value '一致しなくなるまで比較
j = j + 1
Loop
If j > i + 1 Then '一致した場合
Call 結合処理
End If
i = j
Loop
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
マクロ(Excel)で上下のセルの値が同じ場合、特定の列のセルを統合する方法
Excel(エクセル)
-
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
-
4
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
5
VBAでセル同士を比較して色付け
Visual Basic(VBA)
-
6
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
7
【VBA】【マクロ】 指定の条件で、空白の行を挿入
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
数式による空白を無視して最終...
-
ピボットテーブルで空白セルの...
-
「データ要素を線で結ぶ」がチ...
-
初歩的なExcelの質問となります
-
if関数の複数条件について
-
関数TRANSPOSEで空白セルを0に...
-
空白セル内の数式を残したまま...
-
マクロボタンを押すたびに違う...
-
VBAでのフィルタについて(空白...
-
エクセルで、合計をもとめたい...
-
エクセルで入力すると隣のセル...
-
Excel:関数が入っているセルに...
-
エクセルで、「複数のセルの中...
-
Excel VBAでセルの空白が3連続...
-
空白非表示に
-
Excel関数で特定のセルが空白の...
-
エクセル 連番が途切れていると...
-
VBAで空白セルにのみ数値を代入...
-
形式貼り付けの「空白を無視す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数で空欄("")の時、Null...
-
エクセルでCSVを編集するとき、...
-
if関数の複数条件について
-
【画像あり】オートフィルター...
-
エクセルで入力すると隣のセル...
-
Excel > ピボットテーブル「(空...
-
ピボットテーブルで空白セルの...
-
エクセル 連番が途切れていると...
-
「データ要素を線で結ぶ」がチ...
-
【関数】=EXACT(a1,b1) a1とb1...
-
空白セル内の数式を残したまま...
-
Excel:関数が入っているセルに...
-
形式貼り付けの「空白を無視す...
-
Excelで、入力文字の後に自動で...
-
数式による空白を無視して最終...
-
エクセルで上の行の値を自動的...
-
excel2010 空白セルにのみ貼り...
-
関数TRANSPOSEで空白セルを0に...
-
【Excel】 csvの作成時、空白セ...
-
エクセルのIF関数で、隣のセル...
おすすめ情報