はじめて投稿させていただきます。
うまく説明できるかどうか判りませんが、よろしくお願いします。
エクセル2007 で以下のような結果を得られるようなマクロを作りたいと考えています。
横方向にA列~C列の3つの連続したセル内容が同一で縦方向に2つ以上連続した場合のみ、それらの行を結合させたいのです。具体的には下図のような感じです。
何かよい方法があればアドバイスいただきたいと思います。どうかよろしくお願いします。
A列 B列 C列 D列
機種 区分 ユーザー名 納品数
ABC あああ 田中商店 10
ABC あああ 田中商店 20
ABC あああ 田中商店 30
XYZ いいい 田中商店 25
XYZ ううう 山田商事 40
↓ ↓ ↓ ↓ ↓
A列 B列 C列 D列
機種 区分 ユーザー名 納品数
10
ABC あああ 田中商店 20
30
XYZ いいい 田中商店 25
XYZ ううう 山田商事 40
No.1ベストアンサー
- 回答日時:
エクセルは表計算ソフトです。
見た目よりも機能がよく働くように維持することが必要でしょう。その点でセルの結合はそのあとの計算処理を複雑にします。できればセルの結合はしないことですね。どうしてもということであれば次のようなマクロはどうでしょう。
結合のときに注意が表示されますがOKすればよいでしょう。
Sub セルの結合()
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
i = 0
Do
i = i + 1
If Range("A" & i) & Range("B" & i) & Range("C" & i) = Range("A" & i + 1) & Range("B" & i + 1) & Range("C" & i + 1) Then
n = 0
Do
n = n + 1
Loop Until Range("A" & i) & Range("B" & i) & Range("C" & i) <> Range("A" & i + n) & Range("B" & i + n) & Range("C" & i + n)
Range(Range("A" & i), Range("A" & n - 1 + i)).MergeCells = True
Range(Range("B" & i), Range("B" & n - 1 + i)).MergeCells = True
Range(Range("C" & i), Range("C" & n - 1 + i)).MergeCells = True
i = n - 1 + i
End If
Loop While i < Range("a65536").End(xlUp).Row
Application.ScreenUpdating = True
End Sub
早々に回答いただきありがとうございます。
おっしゃるように、マクロを実行すると、「選択範囲には複数のデータがあります。1つのセルとして結合すると・・・」と警告画面が表示され、「OK」ボタンを押すことによりセルは結合され、思ったような表示になります。しかし、シート中にセルの結合されるべき部分が数百個所あるため、その数と同じ回数だけ警告画面があらわれます。
ただ単にデータが入ったセル複数を選んで「セルを選んで中央揃え」ボタンを押しても同様の警告が出るので、当然といえば当然なのでしょうが・・。やはり、私のやろうとしていることには無理があるのでしょうか?
No.4
- 回答日時:
#3です
仮にセルE2でも
=CONCATENATE($A1,$B1,$C1)
と入力してみてください
なんとなく関数の意味はわかると思います。
条件式の意味は
=CONCATENATE($A1,$B1,$C1) と
=CONCATENATE($A2,$B2,$C2) の
返す答えが等しければ(Trueであれば)、設定した書式を適用しろということです。
仮に適当なセルに、=1=1 分かりやすく書けば=(1=1)と入力すればTRUEとなるはずです。1と1は等しいということです。
No.3
- 回答日時:
望まれているやり方とは少し違いますが、
このような方法はどうでしょうか?
A2セルを選択して
条件付き書式を選択して
「ルールの種類」で、「数式を使用して書式設定する」を選択
「ルールの内容に」以下の数式を記述
=CONCATENATE($A1,$B1,$C1)=CONCATENATE($A2,$B2,$C2)
「書式の選択」で「フォントの色」に白色を選択
A2セルをコピーして、A2:C6セルに「形式を選択して貼り付け」
において「書式」を貼り付ける。
以上で、見た目はフォントが白色なので見えなくなります。
ありがとうございます。
こんな方法もあったのですね!勉強になります。
これだとセルの結合をしなくても済むんですね。
ただこれは何を意味するんでしょうか?
> =CONCATENATE($A1,$B1,$C1)=CONCATENATE($A2,$B2,$C2)
No.2
- 回答日時:
>その数と同じ回数だけ警告画面があらわれます
#1さんのソースを流用して、以下のように
Application.DisplayAlerts = False を付け加えれば、警告メッセージが出ません。
#1さんが言われるように、私もセルの結合は推奨しませんが。。
Sub セルの結合()
Dim i As Integer
Dim n As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i = 0
Do
i = i + 1
If Range("A" & i) & Range("B" & i) & Range("C" & i) = Range("A" & i + 1) & Range("B" & i + 1) & Range("C" & i + 1) Then
n = 0
Do
n = n + 1
Loop Until Range("A" & i) & Range("B" & i) & Range("C" & i) <> Range("A" & i + n) & Range("B" & i + n) & Range("C" & i + n)
Range(Range("A" & i), Range("A" & n - 1 + i)).MergeCells = True
Range(Range("B" & i), Range("B" & n - 1 + i)).MergeCells = True
Range(Range("C" & i), Range("C" & n - 1 + i)).MergeCells = True
i = n - 1 + i
End If
Loop While i < Range("a65536").End(xlUp).Row
Application.ScreenUpdating = True
End Sub
ありがとうございました。
おかげさまで、警告画面がスキップされ、思うような結果が得られました。
私の場合、仕事上、97列、約600行のcsvファイルをダウンロードして、そこから不要な列を削除、社員に視覚的にわかりやすくして配布する必要があったので、重複内容のセル結合にこだわったのです。後々、表計算に利用する必要も無かったものですから。
このたびは本当にお世話になり、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- 企画・マーケティング 売り切れ商法や行列商法はどれくらい効果があるのでしょうか? 売れ残っていても関係なく好きなものは欲し 2 2023/03/24 18:04
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- ディスカウントストア・ドラッグストア 販売店(ドラッグストア)に長時間滞在するには? 5 2022/04/10 16:27
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
アクティブになっている行をマ...
-
特定の文字がある行以外を削除...
-
AのセルとB行を比較して、一致...
-
Excel グラフのプロットからデ...
-
EXCELで最後の行を固定
-
セルの色によって条件文をつけ...
-
エクセル マクロ等を利用した各...
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロで数値が変っ...
-
Excelマクロ 期間を指定してデ...
-
貼り付けた数式を最終行まで繰...
-
Excel VBA アクティブセルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報