
■添付画像のようなこと数百件を行う予定です。このような場合、楽な手順はありますか?
説明
・B、C、D列はセルの結合が行われている
・E列のセルは上から赤、青、緑、黄の順番で入っている
・E列のセルに黄と入っている行のみ残し、それ以外の行は削除する
・ただしB、C、D列のセルに入っている値を消したくない
■現在の自分の手順は、
「行削除」で黄以外の行を削除していくとB、C、D列のセルの値が空になってしまうので、セルの結合を解除してB、C、D列のセルの値を黄の行にコピーして貼り付けてそれから黄以外の行を「行削除」する、です。

A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
こんにちは!
VBAになりますが一例です。
↓の画像のように1行目は項目行でデータは2行目以降にあるという前提です。
Sub Sample1()
Dim i As Long, j As Long
Dim lastRow As Long
Dim myStr As String, myRng As Range
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "E").End(xlUp).Row
Range("B:D").UnMerge
For j = 2 To 4 '//←B~D列まで//
For i = 2 To lastRow
If Cells(i, j) <> "" Then
myStr = Cells(i, j)
Else
Cells(i, j) = myStr
End If
Next i
Next j
For i = 2 To lastRow
If Cells(i, "E") <> "黄" Then
If myRng Is Nothing Then
Set myRng = Cells(i, "E")
Else
Set myRng = Union(myRng, Cells(i, "E"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
lastRow = Cells(Rows.Count, "B").End(xlUp).Row
Application.DisplayAlerts = False
For i = 2 To lastRow Step 4
Cells(i, "B").Resize(4).Merge
Next i
For i = 2 To lastRow Step 2
Cells(i, "C").Resize(2).Merge
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
※ 一旦マクロを実行すると元に戻せませんので
別シートでマクロを試してみてください。m(_ _)m

No.6
- 回答日時:
普通に範囲選択し[セル結合]すると、左上のセルのみ値が残るだけ
なので、[行の削除]をすると値のないセルが生じるのです。
これを回避するには[セル結合]を直接しないで、[書式のコピー]を
してから、結合したい範囲に[書式の貼り付け]で対応します。
こうすると見た目では結合しているように見えて、実際のデータは
残ったままになるので、[セル結合]を解除しても値は残りますし、
[行の削除]をしても問題なく対応できます。
・データを扱いやすくする手順の例
データ範囲をコピーします。
新規シートに貼り付けて、範囲選択されたまま[セル結合の解除]を
実行します。セル結合が解除された状態で、[ Ctrl+G ]キーなどで
[ジャンプ]ダイアログ→[セル選択]ボタンでの[選択]オプションを
出します。
[空白セル]を選択し[ OK ]をすると、空白セルのみ選択状態になる
ので、アクティブセルのあるセルに、その上のセルを参照する式を
入れます。
[ Ctrl+Enter ]キーを押すと、空白セルに上の値と同じものが表示
され、すべてのセルが埋まった状態になります。
https://skilluppc.net/9.html
このまま活用してもよいですし、再度コピーして値のみの貼り付け
をすれば、数式部分が値に変更されますので、どんな編集でも対応
できるようになります。
見た目を整えるのなら、元シートのデータ範囲が選択状態なので、
書式のコピー貼り付けで書式をコピーして、新規シート側のデータ
範囲に書式の貼り付けをすれば、見た目は元シートのデータと同じ
になります。
これで[セルの結合を解除]で対応しなくても、[行の削除]には対応
できるものになります。
今回の場合は、相手に送るためのデータのようなので、空白セルが
埋まった状態で[フィルター]をかけて、黄色の行のみの表示にして
から、範囲選択しコピーしたものを新規ブックに貼り付けすれば、
見えているものだけが貼り付けされるので、セル結合するなりして
整えれば、送る相手には余計なデータがない状態になります。
No.5
- 回答日時:
こんにちは
>数百件を行う予定です。
どのように多くなるのかはっきりしませんが、元の表の行数が多くなるのか、元の表は18行目までだけれど同じ形式の表で内容が違うものがたくさんあるのか・・・
いずれにしろ規則的な表から4行おきに内容を取り出したい(結合セルの列は代表されるセルを参照)ということに置き換えられますので、単純な計算式で参照位置を決められるので、試しに計算させてみました。
添付図は同じ位置関係にしてありますが、元の表が下へ続く場合として22行目まで広げてあります。
抽出する位置は例示と同じ26行目からにしてありますが、指定する色をC24に記入すると、それに該当する欄から内容を抽出します。
・抽出時に検索を行ってはいません。規則性を利用して参照しているだけです
・セルの結合はそのままでも解除してあっても、結果には影響しません。
添付図では、B26セルに
=INDEX(B$2:B$22,INT((MATCH($C$24,{"赤","青","緑","黄"},0)-5+4*ROW(A1))/INDEX({16,8,4,1,1},COLUMN(A1)))*INDEX({16,8,4,1,1},COLUMN(A1))+2)
の式を代入して、右方、下方にフィルコピーしています。
※ 抽出結果を固定の値にしたい場合は、「コピー → 値をペースト」で固定化できます。
※ 色は4種類しかないのでしょうから、わざわざ色で可変な式にしなくとも、最初から色を固定の式にして、抽出表を4つ作成しておけば、それぞれは簡略な式にできますね。
あるいは、同じものを4つ作って「赤、青・・・」って入力を変えても良いですが…

No.4
- 回答日時:
No.2です
結合解除してますね(笑)
補足コメントに記載している方法で黄色以外を削除するなら
オートフィルタをかけてE欄で黄色以外を選択後行削除すれば出来ますね
No.3
- 回答日時:
どんだけあるか知らないけど、手作業でするなら、
「B列1」を選択して結合を解除
↓
[Ctrl]+[D] で範囲にコピー
↓
必要なだけ上記の作業を繰り返す
↓
必要なセルを結合する
・・・余談・・・
オートフィルタで「黄」を選択するだけで見た目は完璧なんですけどねえ。
しかも簡単お手軽。
これじゃダメなのかな。
ありがとうございます。
黄以外の行のデータは送ってはいけない(見られてはいけない)ので難しいですね。
でも「シートの保護」を使えばオートフィルタでもいけますね。使い慣れてないのでちょっと怖いですが
No.2
- 回答日時:
結合セルのデータ位置は一番左上のセルです。
なので質問者様の手順の様な操作が一般的です。なので、自分が同じような作業をする場合には右側の空白部分に参照式を挿入して対応しています。
例えばサンプル画像のまま作業をするとして
F~Jに数式を挿入していきます
F2:=If(B2="",F1,B2)
これをF2からJ18にフィルします
その後対象のエリア(F2~J18)を選択してコピー
値のみ貼り付け
不要列(赤~緑)を削除
退避データをB列に貼り付け
フォーマット修正
といった手順です
以外と手間がかかりますが、自分も何万というデータを扱いますので、これで以外と楽に作業出来ています。
ありがとうございます。
”値のみ貼り付け”で「この操作を行うにはすべての結合セルを同じサイズにする必要があります」と表示されてしまうのですが、
この前にB3~D18セルまで結合を解除されているということでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
エクセル
-
エクセルの循環参照、?
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】WEBシステムから保存...
-
【マクロ】A列にある、日付(本...
-
【マクロ】アクティブセルの時...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】別のブックから、フ...
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】3行に上から下に並...
-
【エクセル】期限アラートについて
-
【関数】同じ関数なのに、エラ...
-
VBA チェックボックスをオーバ...
-
Excelの新しい空白のブックを開...
-
Excelファイルを開くと私だけVA...
-
マクロ・VBAで、当該ファイルの...
-
Excelについての質問です 並べ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報
質問した後思いついたのですが、とりあえず下記でできました。
1.G3セルからG18セルまで、上から1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4と表示されるように入力
2.H3セルからH18セルまで、上から2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,1と表示されるように入力
3.E3~H13セルで並び替え(優先順位はG列→H列)
4.黄の行がそれぞれ一番上の行になるので黄以外の行を削除
あとは黄以外の行全てを1回でまとめて削除する方法があれば良さそう