こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

excelで特定の列だけ表示させたい

添付画像のような表を作成し、
B列にチェックを入れたら、その項目の列だけが表示されるようにしたいのですが、
どうしたらいいでしょうか。
添付の図の場合だと、D列とJ列だけが表示されるようにしたい。
(A、B、C列は常に表示されたまま)、E、F、G、I、J、K列を消し、D、H列を表示させたい。

投稿日時 - 2017-04-19 23:18:26

QNo.9319552

すぐに回答ほしいです

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

VBAによる回答です。
(1)シートタブのシート名を右クリックして「コードの表示」でVBEを開く。
(2)最下のVBAコードを張り付ける。
(3)右上の「×」でVBEを閉じる。
(4)D~J列までの列を選択し、列記号を右クリックして「非表示」を選択。
(5)B列に何か入っていればいったん値を削除。

B列に「レ」全角のカタカナの「れ」を入力すると該当列が表示されます。
制約として以下の条件となります。
・A1:A7と、D1:J1の内容は同じでないと機能しません。
・内容が同じであれば、セルの並びが変わっても対応できます。
・項目名が重複する場合は正常に機能しません。

また、
ファイルの保存形式はxlsmまたはxlsで保存してください。
マクロが保存できるファイル形式となります。
また、エクセルのセキュリティ設定によりますが、
ファイルを開いた際にマクロの警告が出る場合は許可しないと動作しません。
http://www.start-macro.com/55/w/s010.html


チェック列をB列から変更する場合や、項目行が1行目から変更される場合などはコードを変更する必要があります。補足願います。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column <> 2 Then Exit Sub
  Dim myRng As Range, myTar As Range
  For Each myTar In Target
    Set myRng = sh(myTar.Offset(0, -1).Value, Range(Cells(1, "D"), Cells(1, Columns.Count)))
    If myRng Is Nothing Then Exit Sub
    If myTar.Value = "レ" Then
      'チェックした時
      myRng.EntireColumn.Hidden = False
    ElseIf Len(myTar.Value) = 0 Then
      'チェック外した時
      myRng.EntireColumn.Hidden = True
    End If
  Next myTar
End Sub
Function sh(shStr As String, shRng As Range) As Range
  On Error GoTo era
    Set sh = Columns(WorksheetFunction.Match(shStr, shRng, 0) + shRng(1).Column - 1)
  Exit Function
era:
  Set sh = Nothing
End Function

投稿日時 - 2017-04-20 14:56:57

お礼

チェック列も項目行も変更することはありません。
示していただいたコードで解決しました。

お礼が遅くなってしまって、申し訳ありませんでした。
ありがとうございます。

投稿日時 - 2017-05-04 17:19:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

#3です。
なかなか、補足もしない質問者が多いのですが、補足してくれてありがとう。
印刷時の「印刷したくない部分を印刷しない」方法を知りたいのようだ。
当初の質問には、「印刷」をうかがわせる言葉は出ていないのでは。質問がお粗末だよ。
再質問すべきくらいだよ。
小生は、securityの問題を気にしているように誤解した。
ーー
.(1)VBAのはなしになるが、イベントとして、BeforePrintがあるし
(2)シートで、いろいろな部分を非表示(Hiddenなど)にしたら、印刷時には印刷しない、という仕組みが多い(エクセルでもある)。この機能に乗っかれば、質問の意図は解決するかもしれない。しかしいろいろ実際のテストが必要だろうが。
印刷なら文字などを白文字にすれば印刷しても空白になり、内容が抜けるだろう。

投稿日時 - 2017-04-22 10:53:39

ANo.3

VBAで、例えばDからH列かつM列からS列までについて
Sub test01()
Columns("D:H").EntireColumn.Hidden = True
Columns("m:s").EntireColumn.Hidden = True
End Sub
を実行してみたらどうかな。こういう結果の表示状態でよければ、できるよ。しかし、IーL列やT列以右の列は、左へ押し寄せてくるがよいか。
元に戻すのはFALSEで普通の表示に戻る。
ーー
Excelはシートの行や列は表示するのが常態で、あまり活用できるものではないと思う。
正方形の部分(セル範囲)だけみえなくするのはむつかしい。
フォント色を一時的に白にして、見えにくくする(わずかに痕跡が見えるが)ぐらいだ。
>列にチェックを入れたら、その項目の列だけが表示されるようにしたいのですが、
これはVBAに組み込むことは簡単。しかしチェックを外したらもとに戻すなどのことは、VBAの高等な仕様の部類で、さらなる勉強が必要だと思う。
熟達者ならいざ知らず、凝った仕様にしない方がよい。
見えないようにする目的は何?好みの問題では?質問までしてやらないといけないの。

投稿日時 - 2017-04-20 10:11:08

補足

添付の画像では項目行が7つしかありませんが、実際はもっとたくさんあって、a4サイズで印刷すると収まりません。あるいは読めないほどに小さな文字にするか。
一度に全ての項目を印刷する必要はないので、必要な項目だけ選んで印刷する、というのが今回の目的です。

投稿日時 - 2017-04-22 01:53:53

ANo.2

条件付き書式で「B列の対象セルに✔が無いとき文字列の色を白にする」と言う条件にすれば見えなくなるでしょう。
但し、見えなくなったセルを選択すると数式バーに表示されてしまいます。
また、セルに塗りつぶしで着色しているときは文字の色を塗りつぶしの色と同じにしないと見えてしまいます。
マクロを使えば列の非表示や再表示がコントロールできると思います。
私はマクロの経験が無いのでコードを提示できませんので他の回答者からのアドバイスを待ってください。

投稿日時 - 2017-04-20 07:42:40

ANo.1

「表示される」情報(内容)が何処にどういうレイアウトで纏めてあるかを示さないと、表示することは不可能なことはお分かりでしょ?

投稿日時 - 2017-04-20 01:58:23