• 締切済み

エクセルの質問。今、業務で膨大な資料の一覧表を作成しています。

エクセルの質問。今、業務で膨大な資料の一覧表を作成しています。 オートフィルターを使い、資料の中から欲しい情報を取り出せるようにしています。 ただ、項目(列)が多すぎる為、横長になっています。オートフィルターで検索できても横スクロールや矢印を使わないと全て見れません。 そこで、必要な項目だけを検索できるようにしたいのですが(見れる大きさで、必要最小限を画面内に収めたい)、なかなかよい機能が見つかりません。 例えば、「今はB列、D列のみをオートフィルターで表示(検索)したい」や、「今度はA列、G列、H列のみをオートフィルターで表示(検索)したい」など、その時必要な項目だけを検索できるようにしたいです。 出来れば最初にボタン機能等を使って自在にセルを表示、非表示したいです。 ネットで色々検索しましたが分かりません。アドバイス宜しくお願いします。 ※右クリックの「表示しない」、「再表示」以外の機能でお願いします。 あくまで、選んで検索できるようにしたいです。皆さんの知恵をお貸し下さい。 以上

みんなの回答

  • pc_net_sp
  • ベストアンサー率46% (468/1003)
回答No.4

データ範囲を選択して、選択範囲内で右クリック=>リストの作成を使ってみては如何でしょうか?? リストの作成・操作方法は、検索すれば一杯出てきますので、ご自分で調べて下さい。 リストを作成すると、表示・非表示を使わなくても、必要なデータのみピックアップ出来ます。    

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.3

ちょっと解説します。 「値」とか「名」は単なる変数名です。サンプルでは英字の変数名が 普通ですが、漢字の変数名も使用可能なので、私は可能な限り漢字の 変数名を使っています。 (2)のコードはワークブックのOpen時にでも実行される処理です。 例えば、Workbook_Openメソッドに記述します。又はシート上に ボタンを置いて、クリック時の動作としても良いでしょう。 Set シート = ThisWorkbook.Worksheets(1) 対象シートは自ワークブックの1番目のワークシートと想定して います。()内は("Sheet1")のように名前で指定もできます。 最終 = シート.Range("A1:IV1").End(xlToRight).Column A列からデータが始まるとして、有効な最右端の列位置を求めて います。つまり、リストに並べる最終列名を決めるためです。 名 = "" 値 = (列 - 1) \ 26 If 値 > 0 Then 名 = Chr(&H40 + 値) 値 = (列 - 1) Mod 26 リスト.AddItem 名 & Chr(&H41 + 値) リストに表示させる名(A、B、C、…)を作っています。 27列目からは"AA"、"AB"となるので、(列 - 1) \ 26 で27以上の 部分がある(1以上)か、ないか(0)を調べています。 Chr(&h41)は"A"、Chr(&h42)は"B"なので、Chr(&H40 + 値)は 例えば列"AC"の左側の"A"を形成しています。MODは剰余を求める 演算子です。名 & Chr(&H41 + 値)は例えば列"AC"の右側の"C"を 形成しています。 (3)はフォームのコマンドボタンクリック時の処理です。 Set シート = ThisWorkbook.Worksheets(1) (2)の処理と同じターゲット(ワークシート)が指定されます。 最終 = リスト.ListCount - 1 リストボックスの行数-1(0から数えるため、有効値は-1する)が 最終有効列位置と同じになります。(2)で1~最終列が行として 登録されているからです。 For 列 = 0 To 255 全ての列について処理するためのループです。 値 = 列 \ 26 以下は(2)で示した通り、列名を形成する操作です。 以下はTrueとFalseを間違えていましたので、変更して ください。下記サンプルは正しい記述です。 値 = True If 列 < リスト.ListCount Then     If リスト.Selected(列) Then 値 = False End If 値には初期値としてTrue(非表示)を設定します。 最初のIfは列位置がリスト内にあるかどうかを調べます。 リストになければ値はTrueのままです。次のIfはリストで 該当行が選択されているかどうかを調べています。 選択されていれば値をFalse(表示)にします。 With シート.Columns(名 & ":" & 名)     If .Hidden <> 値 Then .Hidden = 値 End With 列を表示/非表示にする操作です。HiddenがTrueならば 非表示、Falseなら表示です。現在値と同じ値を設定しても 問題は無いのですが、画面がチラつくので、値が異なる時 のみ、設定を行っています。

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

(1)リストボックス、コマンドボタンを持つユーザフォームを作る。 (2)例えばブックのOpen時に、選択可能な列名をリストボックスに仕込んで表示する。 (3)コマンドボタンクリックのイベントで、リスト指定の列以外は非表示にする。 (2)のコード Dim シート As Worksheet Dim リスト As MSForms.ListBox Dim 最終 As Long, 列 As Long Dim 値 As Long, 名 As String Set シート = ThisWorkbook.Worksheets(1) シート.Columns("A:IV").Hidden = False '全列表示 最終 = シート.Range("A1:IV1").End(xlToRight).Column Set リスト = UserForm1.ListBox1 For 列 = 1 To 最終     名 = ""     値 = (列 - 1) \ 26     If 値 > 0 Then 名 = Chr(&H40 + 値)     値 = (列 - 1) Mod 26     リスト.AddItem 名 & Chr(&H41 + 値) Next UserForm1.Show (3)のコード Dim シート As Worksheet Dim リスト As MSForms.ListBox Dim 最終 As Long, 列 As Long Dim 値 As Long, 名 As String Set シート = ThisWorkbook.Worksheets(1) Set リスト = UserForm1.ListBox1 最終 = リスト.ListCount - 1 For 列 = 0 To 255     名 = ""     値 = 列 \ 26     If 値 > 0 Then 名 = Chr(&H40 + 値)     値 = 列 Mod 26     名 = 名 & Chr(&H41 + 値)     値 = False     If 列 < リスト.ListCount Then         If リスト.Selected(列) Then 値 = True     End If     With シート.Columns(名 & ":" & 名)         If .Hidden <> 値 Then .Hidden = 値     End With Next UserForm1.Hide

diwali_sweat
質問者

お礼

返事遅れましたが、高度な回答ありがとう御座います。 今から内容を勉強しようと思います。ただ、私にこのような高度技術はないのでちんぷんかんぷんです・・。 名?値?といった感じです。多分(3)が目指しているものだと思います!! 取り急ぎお礼をさせていただきます。ありがとう御座います。

すると、全ての回答が全文表示されます。
  • ipsum11
  • ベストアンサー率21% (55/251)
回答No.1

マクロを使えば出来るのではないでしょうか。

diwali_sweat
質問者

補足

早速の回答ありがとう御座います。大変感謝致します。 マクロについて早速調べました。確かにこれを使えば消すことは出来ますが、少しやりたいことと違いました。説明が足りなかったかもしれませんので、もう少し補足させて頂きます。 空白ではなく、画面から列ごと非表示にしたいです。一番近いのは、やはり「列」、「行」の上で右クリック→「表示しない」、「再表示」機能です。 一番の理想は、この機能ををチェックボックスやオプションボタンを使用して簡単に行えるようにしたいです。 例えば○A ○B ○C ○D ・・・・・のようにオプションボタンがあったとします。 「◎A にチェックを入れる」→「A列のみ表示する」、「A列のみ非表示にする」といったようにしたいです。 無理でしょうか?? この集計データを使用する人が、「右クリックではなく、左クリックのみで」見たい情報を検索できるようにしたいです。 ALLオートフィルターみたいな便利なデータにしたいです。 宜しくお願いします。 以上

すると、全ての回答が全文表示されます。

関連するQ&A