• ベストアンサー

エクセルの質問です。列単位で空白のセルを詰めて表示したいのですが・・・

教えてください(>_<) 下記のようなデータがあります。 空白のセルを詰めて表示したいのです。 行全体を削除していくのではなく、列単位で上に詰めての表示です。 昇順などの並び替えはせず、単純に上に詰めていく感じです。 エクセルを扱えない人も利用していくのでできれば、コマンドボタン等で一度に表示できればうれしいです。 ■データ(C3からデータが入力されています)   AB  C  D  E  F・・・ 1 2 3     あ     あ 4     い  う  う  え 5              お 6     う  あ  え  え 7     え  い  お  あ ■結果   AB  C  D  E  F・・・ 1 2 3     あ  う  あ  え 4     い  あ  う  お 5     う  い  え  え 6     え     お  あ 7 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #3の回答者です。 関数の数式は、ちょっと難しいですね。 #3のマクロを変えてみましたが、必ずしもうまくいくとは限りません。 Private Sub CommandButton1_Click()   Dim rng As Range   Dim urng As Range   Dim c As Range   'User 設定は可能   Set rng = Range(Range("C3"), UsedRange.Cells(UsedRange.Cells.Count)).Resize(, 4)   On Error Resume Next   Application.ScreenUpdating = False   For Each c In rng     If Replace(c.Value, Space(1), "", , , vbTextCompare) = "" Then       If urng Is Nothing Then         Set urng = c       Else         Set urng = Union(c, urng)       End If     End If   Next c   urng.Delete xlShiftUp   Set urng = Nothing   Application.ScreenUpdating = True   On Error GoTo 0 End Sub

kamepotti
質問者

お礼

再度ご回答ありがとうございます(>_<) 早速実践してみます。 その後の結果をご報告いたします。 それでは、 本当にありがとうございます。

kamepotti
質問者

補足

結果報告が遅れまして申し訳ありません。 バッチリうまくいきました(T_T) 本当にありがとうございます。早速利用して行きたいと思います。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

#4の回答者です。 >結果報告が遅れまして申し訳ありません。 >バッチリうまくいきました(T_T) 返事つけてくださり、ありがとうございました。正直なところ、うまく行くか半々でした。完全な空白よりも難しいです。全角・半角スペース、また、長さ0の文字列("")に対応するように考えました。 本来は、c.HasFormula で、数式であるかの判定が必要な気もしましたが、そこまではやめました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 エラーを想定すると、一ひねりしないとできない種類ですね。 このマクロは、ユーザーが設定してくれれば済みますが、自動的に範囲の取る方法は難しいような気がします。右下端をどうやって取るかって、結構考えました。 ユーザーがセットする場合は、 Set rng = Range("C3:F50") とかしてくれれば、それで完璧です。 記録マクロですと、実行後エラーの発生率が高くなります。 コントロールツールのコマンドボタンを置いたら、ダブルクリックして、中身だけを入れてください。 Private Sub CommandButton1_Click() Dim rng As Range 'User 設定は可能  Set rng = Range(Range("C3"), UsedRange.Cells(UsedRange.Cells.Count)).Resize(, 4)  'F列=4列まで  On Error Resume Next   rng.SpecialCells(xlCellTypeBlanks).Delete xlShiftUp   Set rng = Nothing  On Error GoTo 0 End Sub

kamepotti
質問者

お礼

ご回答ありがとうございます(>_<) 早速試してみました。 うまく表示できました!!ありがとうございます。 しかし、私の説明不足なのですが実は実際使うデータが関数の結果表示でありまして、値のみの貼付けで空白にしたのですが、空白として認識してくれず。只今模索中です(T_T) マクロはすごいですね、感動しました。 本当にありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

(1)関数では複雑式になりすぎる。 (2)操作による(空白セルの選択操作を生かす。) (3)VBAによる。 >エクセルを扱えない人も利用していくのでできれば それならVBAかな。 Sub test01() d = Range("A65536").End(xlUp).Row For j = 1 To 4 'この例ではD列まで For i = d To 1 Step -1 'この例ではA列最下行d行まで If Cells(i, j) = "" Then Cells(i, j).Delete Shift:=xlUp End If Next i Next j End Sub ーー またはマクロの記録をとり Sub Macro2() Range("A2:D6").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete Shift:=xlUp End Sub Range("A2:D6").Selectの部分を d = Range("A65536").End(xlUp).Row Range("A2:D" d).Select に変える そしてコマンドボタンのクリックイベントのプロシで Command1_Click() Test01 End Sub のように挟む。

kamepotti
質問者

お礼

早々のご回答ありがとうございます。 エクセル初心者な者で、あまりうまく作動できません(>_<) もう少しじっくり取り組んで結果を報告いたします。 丁寧なご回答ありがとうございます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

次の方法で如何でしょうか。 (1)対象セル範囲を選択 (2)編集→ジャンプ→セル選択→空白セルをチェック→OK (3)Ctrl+ - (Ctrlキーを押しながら - キーを押す) (4)上方向にシフトにチェック→OK 因みに(2)から(4)をマクロ記録しておけば、範囲選択後にショートカットキーで一発変換が可能になります。

kamepotti
質問者

お礼

早々ご回答ありがとうございます。 早速試してみたのですが、こちらの説明不足で、申し訳ありません。 データは関数の結果の表示でありまして空白とは認識せず、(2)の前に値のみ貼付けをおこなってみたのですが、貼付け後も空白として認識してもらえませんでした(>_<) エクセル2000だからなのでしょうか・・・ しかし、mu2011さんのご意見で普段あまり使わない機能を再認識できました!!ありがとうございます。

関連するQ&A