dポイントプレゼントキャンペーン実施中!

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

■現在の自分の手順は、
「行削除」で黄以外の行を削除していくとB、C、D列のセルの値が空になってしまうので、セルの結合を解除してB、C、D列のセルの値を黄の行にコピーして貼り付けてそれから黄以外の行を「行削除」する、です。

「結合したセルの一部を削除しても値を残した」の質問画像

質問者からの補足コメント

  • 質問した後思いついたのですが、とりあえず下記でできました。
    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回でまとめて削除する方法があれば良さそう

      補足日時:2019/05/29 14:50

A 回答 (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
「結合したセルの一部を削除しても値を残した」の回答画像7
    • good
    • 1
この回答へのお礼

ありがとうございます。
完璧にできました。

お礼日時:2019/05/31 17:13

普通に範囲選択し[セル結合]すると、左上のセルのみ値が残るだけ


なので、[行の削除]をすると値のないセルが生じるのです。

これを回避するには[セル結合]を直接しないで、[書式のコピー]を
してから、結合したい範囲に[書式の貼り付け]で対応します。
こうすると見た目では結合しているように見えて、実際のデータは
残ったままになるので、[セル結合]を解除しても値は残りますし、
[行の削除]をしても問題なく対応できます。

・データを扱いやすくする手順の例

データ範囲をコピーします。

新規シートに貼り付けて、範囲選択されたまま[セル結合の解除]を
実行します。セル結合が解除された状態で、[ Ctrl+G ]キーなどで
[ジャンプ]ダイアログ→[セル選択]ボタンでの[選択]オプションを
出します。
[空白セル]を選択し[ OK ]をすると、空白セルのみ選択状態になる
ので、アクティブセルのあるセルに、その上のセルを参照する式を
入れます。
[ Ctrl+Enter ]キーを押すと、空白セルに上の値と同じものが表示
され、すべてのセルが埋まった状態になります。
https://skilluppc.net/9.html

このまま活用してもよいですし、再度コピーして値のみの貼り付け
をすれば、数式部分が値に変更されますので、どんな編集でも対応
できるようになります。

見た目を整えるのなら、元シートのデータ範囲が選択状態なので、
書式のコピー貼り付けで書式をコピーして、新規シート側のデータ
範囲に書式の貼り付けをすれば、見た目は元シートのデータと同じ
になります。

これで[セルの結合を解除]で対応しなくても、[行の削除]には対応
できるものになります。



今回の場合は、相手に送るためのデータのようなので、空白セルが
埋まった状態で[フィルター]をかけて、黄色の行のみの表示にして
から、範囲選択しコピーしたものを新規ブックに貼り付けすれば、
見えているものだけが貼り付けされるので、セル結合するなりして
整えれば、送る相手には余計なデータがない状態になります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Ctrl+Enterですべて埋まるの便利ですね。

お礼日時:2019/05/31 17:12

こんにちは



>数百件を行う予定です。
どのように多くなるのかはっきりしませんが、元の表の行数が多くなるのか、元の表は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つ作って「赤、青・・・」って入力を変えても良いですが…
「結合したセルの一部を削除しても値を残した」の回答画像5
    • good
    • 0
この回答へのお礼

ありがとうございます。
現時点では元の表の行数が多くなります。
INDEX苦手なので参考にします。

お礼日時:2019/05/30 17:55

No.2です


結合解除してますね(笑)
補足コメントに記載している方法で黄色以外を削除するなら
オートフィルタをかけてE欄で黄色以外を選択後行削除すれば出来ますね
    • good
    • 0
この回答へのお礼

ありがとうございます。
これで完璧です

お礼日時:2019/05/30 17:52

どんだけあるか知らないけど、手作業でするなら、



「B列1」を選択して結合を解除
 ↓
[Ctrl]+[D] で範囲にコピー
 ↓
必要なだけ上記の作業を繰り返す
 ↓
必要なセルを結合する

・・・余談・・・

オートフィルタで「黄」を選択するだけで見た目は完璧なんですけどねえ。
しかも簡単お手軽。
これじゃダメなのかな。
    • good
    • 0
この回答へのお礼

ありがとうございます。
黄以外の行のデータは送ってはいけない(見られてはいけない)ので難しいですね。
でも「シートの保護」を使えばオートフィルタでもいけますね。使い慣れてないのでちょっと怖いですが

お礼日時:2019/05/29 14:12

結合セルのデータ位置は一番左上のセルです。

なので質問者様の手順の様な操作が一般的です。
なので、自分が同じような作業をする場合には右側の空白部分に参照式を挿入して対応しています。
例えばサンプル画像のまま作業をするとして
F~Jに数式を挿入していきます
F2:=If(B2="",F1,B2)
これをF2からJ18にフィルします
その後対象のエリア(F2~J18)を選択してコピー
値のみ貼り付け
不要列(赤~緑)を削除
退避データをB列に貼り付け
フォーマット修正
といった手順です
以外と手間がかかりますが、自分も何万というデータを扱いますので、これで以外と楽に作業出来ています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
”値のみ貼り付け”で「この操作を行うにはすべての結合セルを同じサイズにする必要があります」と表示されてしまうのですが、
この前にB3~D18セルまで結合を解除されているということでしょうか?

お礼日時:2019/05/29 14:04

表示だけの問題で有れば、行間を0にすれば下の図の様に表示されますよ。

縦列3.4.5を選んで行間を0にすれば表示されるのは下の図の様になります。印刷も出来ますよ。
しかし、抜粋してする事も出来ますがそれなりに知識が必要だと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます
データは送付するものなので今回は使えませんが、とても簡単で良いですね

お礼日時:2019/05/29 11:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています