このQ&Aは役に立ちましたか?
エクセルで空白の列を削除する方法
2023/10/12 15:36
- エクセルで一列全部空白であったら、その列を削除する方法について教えてください。
- 資格取得の表を作成する際に、取得していない資格の列を削除して表示する方法について教えてください。
- 特定の列を削除して表を詰める方法について教えてください。
エクセルで一列全部空白であったら、その列を削除する
2018/04/30 12:54
エクセルで資格取得の表を作成します。
資格の種類は、既定されています。下の例は5個の資格ですが、実際は、簿記にしても、商業簿記、工業簿記、●級と有り多数です。
運転免許、簿記、無線、医師、公認会計士
A社員
b社員
c社員
d社員
E社員
社員別に資格取得状況を●で表記しています。
今回は医師は全社員が取得していませんでしたので、医師の列を削除して詰めて表記したい。医師以外にも多数の全社員が取得していない資格がありますので、その列も削除して、全社員が取得していない資格の列は削除して表示する方法を教えて下さい
※OKWAVEより補足:「ひかりTVのサービスやISPぷらら」についての質問です。
質問者が選んだベストアンサー
VBAを使えばサクッと出来そうに思えますが、初心者向けということなら関数と並べ替えを使ってやってみてはいかがでしょう。
いくつかの手順が必要ですが、列をひとつずつ確認していくよりは楽だと思います。
※試す場合は、バックアップをとった上で行ってください。
手順としては
1. 任意の場所に行を2行追加し、1行は列番号、もう1行はCOUNTA関数を入力。
列番号の方は必要列に連続データで、関数の方はセルのコピー。
2. 資格名の列全てを選択してCOUNTA関数の行を指定して列を並べ替え。(並べ替えオプションで列単位に変更)
3. COUNTA結果値が「0」(入力データなし)の列を選択して非表示に。
4. 残りの列を選択して列番号で並び替え。
5. 列番号、COUNTA関数の2行を非表示に
尚、COUNTAを使った場合「なんらかのデータが入力されている」セルはカウントされるので、間違えて●以外を入力してしまった場合には有効です。
しかし、空欄にみえても実際はスペースが入力されているといった場合でもカウントされます。
純粋に●のみをカウントするなら、COUNTIFを使って下さい。
【例】 =COUNTIF(B2:B6,"●")
補足
2018/05/04 11:22
回答者様 申訳ございませんでした。私の文章読解力不足及び図を正しく確認していませんでした。社員の列の範囲選択してしまいました。私の思ったのと一致したのが出来ました。
ありがとうございました。
このQ&Aは役に立ちましたか?
この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。
その他の回答 (5件中 1~5件目)
ANo.4です。
>4. 残りの列を選択して列番号で並び替え
「残りの列」と言うのが、少し言葉が足りなかったですね。
すでにご理解いただけたようですが「(社員名列を除く)資格名で残った列」ということです。
>関数の種類で、もし、カウントした範囲の結果が{0}であったら、カウントした範囲を非表示にするという関数はあるのでしょうか
関数では、列や行の非表示はできません。
マクロは使わないということで、前述の並べ替えで「0」の列をまとめてから範囲指定して非表示にするという提案をさせていただきました。
お礼
2018/05/05 23:56
色々とアドバイスありがとうございました。また他の案件で分からないことが有りましたら、質問させて頂きます。今回、回答下さった皆様ありがとうございました。稀に回答者のなかで、こんな事も分からずに質問をするんじゃない。もっと勉強してから、質問しなさい を見ましたが、質問者は、天っぱているのです。今回は良き回答者様に回答して頂き、うれしかったです。
質問者はエクセル関数しか経験がなくて、VBAなど経験がないとすると、
(1)関数で列削除やセル削除は式は複雑で難しくて、できないといったほうがよい事項、と思う。
基本的に、関数では(セルの値を加工するだけで)、セルや列や行の追加・削除や移動は対処外です。
(2)エクセルの操作で、目視で行うのが早く確実。たとえば、D列が空白かどうかは、名前ボックスにD100000と入れて、ENTERを押す。D100000セルを選択される。
そこでENDキーを押して、そして↑を押してD1とかD2とか見出しセルの下の行のところにカーソルが来たら、その間にはデータはない。
そこで列の削除の操作をする。ホームー削除ーシートの列を削除。
(3)VBAでやるなら、例えば
空白列と思われる列の1セルを選択しておいて、実行。
空白列なら、列削除される。
1,2行目が見出し文字があるなら、下記で、CountBlank(Columns(c))+2にして比較するとよい。
ーー
標準モジュールに
Sub 選択した空白列の削除2()
Dim rng As Range
c = Selection.Column
MsgBox c
MsgBox Rows().Count
MsgBox WorksheetFunction.CountBlank(Columns(c))
If WorksheetFunction.CountBlank(Columns(c)) = Rows().Count Then
MsgBox "空白列"
Columns(c).Delete
End If
End Sub
お礼
2018/04/30 18:15
質問者はエクセル関数しか経験がなくて、VBAなど経験がないとすると、関数で列削除やセル削除は式は複雑で難しくて、できないといったほうがよい事項、と思う。⇒ エクセル初心者でも簡易な関数やフイルタを駆使して出来る方法を探しています。VBAで作成すると、ロジックなどは作成者以外の人は分からないと思うためです。回答を頂いてこんなことを記入してしまい気分を害さないで下さい。
削除列の選定は回答者1さんのでいいと思いますが、
列は削除ではなく、幅を0にして置けば必要な時にまた
出せるし、思わぬ計算式や値の消失がなくて良いかなと。
お礼
2018/04/30 18:00
回答ありがとうございます。列で、1行目から最終行までが全部空白セルの列を非表示にすればよいとの回答ありがとうございます。早速実施します。
列の削除の仕方ではなく、列に値が何も無いのを確認して削除したいという意図であるという前提で回答します。
ctrlを押しながら↓を押すと、選択してるセルの次に値が入ってるセルまで移動しますので、最終行まで移動できたら、その列には何も値が無いことがわかりますので、それで列削除をすれば誤って消してしまう事はなくなりますよ。
お礼
2018/04/30 17:54
早急な回答ありがとうございます。Ctrl ↓ で列の空白セルは 1048576行まで確認できました。これだと、多数ある資格を一つずつ(一列ごとに)実施しないといけないので、私はめんどくさがり屋なのでもっと簡略化が有ったら良いと感じました。回答、ありがとうございました。
お礼
2018/05/04 11:08
ありがとうございます。
ゴールデンウイークなので、自宅で疑似データ作成して実施しました。
列(資格列)の●を数えて{0}を非表示は理解できました。自分一人の殻の中で考えていたら、どんどん蟻地獄に落ちて行きました。
ちょっと不明点の手ほどきを教えて下さい。
手順としては
【OKです】1. 任意の場所に行を2行追加し、1行は列番号、もう1行はCOUNTA関数を入力。
列番号の方は必要列に連続データで、関数の方はセルのコピー。
2. 資格名の列全てを選択してCOUNTA関数の行を指定して列を並べ替え。【教えて下さい】(並べ替えオプションで列単位に変更)⇒実施するとA列にCOUNTA関数結果{0}がきて、社員が、最終列(全部の資格表示の右列)に表示されます。
【OKです】3. COUNTA結果値が「0」(入力データなし)の列を選択して非表示に。
【よくわからないです】4. 残りの列を選択して列番号で並び替え。
社員を、A列に持ってい行く方法が、よくわからなかったです。
元に戻らなくなってしまいました。⇒回答者様の言う通り コピーして作成してよかったです。
回答頂き。再び質問になってしまい、ご無礼かと存じますが、気分を害さずに教えて頂きたいです。
関数の種類で、もし、カウントした範囲の結果が{0}であったら、カウントした範囲を非表示にするという関数はあるのでしょうか。調べましたが分かりませんでした。