- ベストアンサー
エクセルの質問です。列単位で空白のセルを詰めて表示したいのですが・・・
教えてください(>_<) 下記のようなデータがあります。 空白のセルを詰めて表示したいのです。 行全体を削除していくのではなく、列単位で上に詰めての表示です。 昇順などの並び替えはせず、単純に上に詰めていく感じです。 エクセルを扱えない人も利用していくのでできれば、コマンドボタン等で一度に表示できればうれしいです。 ■データ(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 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 #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
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4の回答者です。 >結果報告が遅れまして申し訳ありません。 >バッチリうまくいきました(T_T) 返事つけてくださり、ありがとうございました。正直なところ、うまく行くか半々でした。完全な空白よりも難しいです。全角・半角スペース、また、長さ0の文字列("")に対応するように考えました。 本来は、c.HasFormula で、数式であるかの判定が必要な気もしましたが、そこまではやめました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 エラーを想定すると、一ひねりしないとできない種類ですね。 このマクロは、ユーザーが設定してくれれば済みますが、自動的に範囲の取る方法は難しいような気がします。右下端をどうやって取るかって、結構考えました。 ユーザーがセットする場合は、 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
お礼
ご回答ありがとうございます(>_<) 早速試してみました。 うまく表示できました!!ありがとうございます。 しかし、私の説明不足なのですが実は実際使うデータが関数の結果表示でありまして、値のみの貼付けで空白にしたのですが、空白として認識してくれず。只今模索中です(T_T) マクロはすごいですね、感動しました。 本当にありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
(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 のように挟む。
お礼
早々のご回答ありがとうございます。 エクセル初心者な者で、あまりうまく作動できません(>_<) もう少しじっくり取り組んで結果を報告いたします。 丁寧なご回答ありがとうございます。
- mu2011
- ベストアンサー率38% (1910/4994)
次の方法で如何でしょうか。 (1)対象セル範囲を選択 (2)編集→ジャンプ→セル選択→空白セルをチェック→OK (3)Ctrl+ - (Ctrlキーを押しながら - キーを押す) (4)上方向にシフトにチェック→OK 因みに(2)から(4)をマクロ記録しておけば、範囲選択後にショートカットキーで一発変換が可能になります。
お礼
早々ご回答ありがとうございます。 早速試してみたのですが、こちらの説明不足で、申し訳ありません。 データは関数の結果の表示でありまして空白とは認識せず、(2)の前に値のみ貼付けをおこなってみたのですが、貼付け後も空白として認識してもらえませんでした(>_<) エクセル2000だからなのでしょうか・・・ しかし、mu2011さんのご意見で普段あまり使わない機能を再認識できました!!ありがとうございます。
お礼
再度ご回答ありがとうございます(>_<) 早速実践してみます。 その後の結果をご報告いたします。 それでは、 本当にありがとうございます。
補足
結果報告が遅れまして申し訳ありません。 バッチリうまくいきました(T_T) 本当にありがとうございます。早速利用して行きたいと思います。