Excel VBA 列の表示と非表示について

このQ&Aのポイント
  • Excel VBAで列の表示と非表示を行う方法について調べています。90以上の列があるデータを扱っているため、見づらさを感じることがあります。ユーザーフォームからコマンドボタンを使用して一度全ての列を非表示にし、必要な列だけを表示させる方法についてご教示いただけると助かります。
  • Excel VBAを使用して、90以上の列を扱うデータの表示と非表示を制御する方法について教えてください。ユーザーフォームからコマンドボタンで一度全ての列を非表示にし、必要な列だけを表示させる方法を知りたいです。
  • Excel VBAを使用して、90以上の列を効率的に表示と非表示する方法を教えてください。ユーザーフォームとチェックボックスを組み合わせて、必要な列だけを表示させる方法について知りたいです。
回答を見る
  • ベストアンサー

Excel VBA 列の表示と非表示について

Excel VBA 列の表示と非表示について いつも参考にさせて頂いています。 現在扱っているデータの列が90以上あり、データとしては便利なのですが時に見辛く感じる事があります。 (1).ユーザーフォームからコマンドボタンで一度全ての列を非表示にする。 (2).(1)を行ってからチェックボックスで表示させたい列を表示させる。 といった行程でVBAを組む事は可能でしょうか? 列の表示と非表示について自分なりに調べてみたのですが、消したい列をチェックボックスで消す方法は見つけたのですがそれでは90項目の列の中で5項目だけが必要な場合85回チェックを入れなくてはならなくなり、もう少し効率的な方法があればと考えております。 方法について分かる方は、例をご教示いただけますでしょうか? 宜しくお願いします。

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

  • ベストアンサー
noname#203218
noname#203218
回答No.3

下記マクロは,列番号1~90までの間で、選択された列(選択したセルでは無いのでお間違え無きように)以外の列を非表示にします。 チェックボックスを利用されるのであれば、 変数SelectCOLに表示させたい列番号、変数iに表示させる列数を指定すれば利用可能ではないでしょうか。 Sub Hidden_col() Dim c As Range Dim i, j, k, FLAG As Integer Dim ColNo As Integer Dim SelectCOL() ColNo = 90 ReDim SelectCOL(ColNo) i = 1 For Each c In Selection.Columns SelectCOL(i) = c.Column i = i + 1 Next c For j = 1 To ColNo FLAG = 0 For k = 1 To i If j = SelectCOL(k) Then FLAG = 1: Exit For Next If FLAG = 0 Then Columns(j).EntireColumn.Hidden = True Next End Sub

hiromizu0406
質問者

お礼

ありがとうございます!

hiromizu0406
質問者

補足

ありがとうございます。 「というのも、非表示にしたまま表示したい列をどのように確認するのかな?と思いまして。 どこかに対照表などがあるのでしょうか・・・」 実は、ユーザーフォームにチェックボックスを90個作りまして各列の表題を付けていました。 とはいえ、各チェックボックスのコードについてはこれからの状態ですが・・・。 これからではありますが、上記コードを参考にしてみたいと思います。

その他の回答 (2)

  • moon00
  • ベストアンサー率44% (315/712)
回答No.2

うーん、一度に入れる、はずすボタンを作れば、(1)の作業は不要な気がするのですが・・・ というのも、非表示にしたまま表示したい列をどのように確認するのかな?と思いまして。 どこかに対照表などがあるのでしょうか・・・ それともチェックボックスに明記されてるのかな。 表示状態のまま、チェックボックスでチェック。 非表示が多い場合は、一旦全部に入れるボタンでチェックを入れた後、表示したいものだけはずす。 もしくは、チェックを逆転できるボタンを作るかですね。

hiromizu0406
質問者

補足

おぉっ、確かにそうですね! 「チェック=非表示する として 非表示にしたい列が少ない場合⇒表示状態のまま、表示にしたい列のチェックボックスにチェック 非表示にしたい列が多い場合⇒全チェックボックスにチェックするボタンを押す→表示させたい列のチェックボックスにチェック」 という事でしょうか? 因みに各列の表示、非表示設定も含めてコードをご教示頂く事は可能でしょうか? 図々しいお願いではありますが、重ねて是非宜しくお願いします!

  • moon00
  • ベストアンサー率44% (315/712)
回答No.1

全くの非表示にしてしまう、ということでしょうか・・・ 例えばA列からZ列まで一気に非表示ということであれば、 下記コードで実現できます。 Sub Macro1() Columns("A:Z").Select Selection.EntireColumn.Hidden = True End Sub 範囲を変更すれば、お好みの範囲を非表示にできます。 というか、チェックボックスを作るなら、一気にチェックを入れる、はずすボタンを実装する方が ラクなのでは?

hiromizu0406
質問者

補足

「というか、チェックボックスを作るなら、一気にチェックを入れる、はずすボタンを実装する方が ラクなのでは?」 確かにご指摘の通りなんです。 ただし部署によって見たい列の項目が異なる為、マルチに対応が出来つつ、表示にさせたい列だけチェックで表示させる事で作業工程を効率良く出来れば・・・と考えておりました。

関連するQ&A

  • エクセル VBA フォーム設定について

    いつもお世話になっています。 エクセル VBAでユーザーフォームについて教えてください。 あるシートのデータをフォームに読み込み、違うシートにそのデータを書き込んでいます。元データの列順と書き込むシートの列順が違うので、VBAで設定して使っています。 書き込みはうまくいっています。ただ、書き込む際にフォーム上で少しデータを修正して書き込みを行うのですが、編集したいフォーム上のテキストボックスをクリックすると、データの最後のほうにカーソルが飛んでしまいます。 テキストボックスをできるだけ大きくして対応していますが、限度があります。テキストボックスをクリックした際にデータの最後(文字データで言うと文章の最後を表示してしまう)まで動かずに、クリックしても先頭のままになるようにするにはどうすればいいのでしょうか。 同じように、コンボボックスもクリックするとリストの最後から表示されます。リストの先頭から表示させる方法を教えてください。

  • EXCEL VBA チェックボックスについて

    仕事上システムを作り始めたVBA初心者です。すみませんが、ご享受下さい。 ユーザーフォームにてチェックボックスを作成後、セルへ転載するものを作っております。 その中でチェックボックスが15個ほどあり、onの場合にはその行の25列目に"有"、OFFの場合は"無"と表示させたいのです。 現状はTRUEといった表示はされるところまではいったのですが、その先がどうしてもできません。 見よう見まねで始めた初心者ですので、コードもどこが必要かもあまりわからないのが現状です。お答え頂く上で必要であればアップしますので、よろしくお願い致します。尚、作ろうとしてるのはデータベースで設備項目に有、無をつける予定です。

  • エクセル2007VBAで検索するコードを知りたい。

    エクセル2007(Excel2007)のVBAで【検索と置換】と同等の機能をもった検索アプリケーションを作りたいのですが、 そのコード(コマンドボタンを実行したときのコード)を教えていただけないでしょうか。 (おそらくですが、リストボックスのコードも必要だと思います。) 正しくは、【検索と置換】から【置換】機能を無くしたものとイメージしていただきたいです。 ●設置するもの ユーザーフォーム(UserForm1) テキストボックス(TextBox1) コマンドボタン(CommandButton1) リストボックス(ListBox1) ●仕様 ユーザーフォームのテキストボックスに入力してコマンドボタンを押すと、検索対象を見つけ、 リストボックスにその対象一覧を行ごとに表示するものになります。 ●検索するときの条件 (1)大文字と小文字を区別しない (2)半角と全角を区別しない (3)部分一致すれば(一部でも一致すれば)検索対象にする (4)今、開いているワークシート上の「全てのセルが検索対象(列や行を指定しない)」 ※検索されたセルの存在する行ごとに、ユーザーフォームのリストボックスに(1行ずつ)表示したいです。 そして、リストボックスに表示されたデータのうち、どれか1つを選ぶと、その選択対象の行の【D列】にアクティブセルを移動するようにしたいです(画面もアクティブセルが見える位置にスクロールします)。 ●リストボックスに(1行ごとに)表示するもの● ↓↓↓ (左から)I列の値、D列の値、O列の値、Q列の値(→4列の値になります) ※リストボックスにQ列の値が表示された場合のみ(Q列に何かしらのデータがある場合のみ)、 リストボックス上の【その行の(I列の値、D列の値、O列の値、Q列の値の)文字すべてを赤色】にして表示していただきたいです。 分かる方がいましたらよろしくお願いいたします。

  • エクセルVBAでコンボボックス

    エクセルVBAのコンボボックスの使い方について質問します。 実現したいプログラムは 「チェックボックスから選んだ数字で計算するプログラム」 です。 具体的には… まず、コンボボックスをシート上に配置します。そのコンボボックスには 数字の1から10を選べるようにしておきます。 次に、コマンドボタンを配置します。これは単にプログラムをスタート させる目的です。 ユーザーは、まずコンボボックスから好きな数字を選択します。 そしてスタートボタン(コマンドボタン)を押します。 すると、選んだ数字の2倍がセルに表示されます。 さらに発展系としては… チェックボックスを4つ配置します。各チェックボックス には、+、-、×、÷を割り振っておきます。 また、コンボボックスを2つ用意し、それぞれ1~10の数字をリストにします。 ユーザーは、チェックボックスから好きな記号を選び、さらにコンボボックスから 好きな数字を選びます。そしてスタートボタンを押すと、選んだ数字を選んだ記号 で計算した値がセルに表示されます。 というようなプログラムを考えているのですが、うまくできません。 ポイントは、 ・チェックボックスにリストを入力する方法 ・チェックボックスの選択状態や、リストボックスから選ばれた数字を、  変数として取得する方法 インターネットで調べているのですが、リストボックスに値を入れるのにもマクロを走らせ なければならない方法とか、ユーザーフォームでの説明ばかりでなかなか実現に至りません。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_userform05.html プログラムのイメージ図としては添付の図の通りです。 どのようにプログラムを書けばいいのでしょうか。

  • エクセル VBA 

    エクセルのユーザーフォームのチェックボックスについて 教えて下さい。 現在チェックボックスが15個あるのですが 例えばテキストボックスが2個あり テキストボックス1に数字の2 テキストボックス2に数字の6 を入れ、コマンドボタンを押すと チェックボックスの2から6にまとめてチェックが入るようなコードが組みたいです。 宜しくお願いします。

  • vbaで列を非表示にする方法はありますか?(フォームのデータシートビュー)

    手動でちまちま「列を表示しない」をすると稼動がかかるので VBAで列を非表示にしたり、表示したりしたいのですがどうすればいいのでしょうか? フォームのデザインビューでテキストボックスのプロパティの可視を「いいえ」にして フォームを開いても列が表示されてしまいます。 ご存知の方がいらっしゃいましたら、教えてください。

  • エクセルVBAでコンボボックスの非表示について

    最近VBAを勉強し始めたのですが、コントロールについてわかりませんので、ご教授お願いします。 コンボボックスを初期では非表示、トグルボタンをクリックすると、コンボボックスを表示させる方法を教えてください。 ユーザーフォームについてまだ未熟なので、すみませんがよろしくお願いします。

  • Excel VBAについて質問です。

    VBA初心者です。 フォームを2つ作成しております。 1つはフォーム名[入力用] もう1つはフォーム名[要求元]です。 フォーム[要求元]はリストボックス[リスト]と コマンドボタン[入力]と[終了]があります。 リストボックスのデータはRowsourceでセル番地を直接指定してます。 フォーム[要求元]においてリストボックスでデータを選びコマンドボタン[登録]を押すと、 フォーム[入力用]のテキストボックスに代入する方法がわかりません。 どなたか御教授お願い致します。

  • 【VBA】ユーザーフォームでvbYesNo

    VBA ユーザーフォームのコマンドボタンで「はい」「いいえ」を作成し、ダイアログボックスのvbYesNoと同等の事をしたいのですが、どうすればよろしいでしょうか? コマンドボタンを押すと「0」か「1」が返ってくるようにしたのですが、ユーザーフォームだけ表示され、回答を待たず次へ進んでしまいます。 ダイアログボックスのように選択の回答待ちのような状態にするにはどうすればよいかご教授おねがいします。

  • エクセルVBAの質問です。

    こんばんわ! エクセルVBAのユーザーフォーム上のテキストボックス等をマクロを実行した状態で、動かしたりしたいのですが、可能でしょうか? 具体的には、コマンドボタン1をクリックすると、テキストボックス等を移動したりできるようにしたいです。 参考URL、あるいは方法があればご教授お願いいたします。

専門家に質問してみよう