- 締切済み
条件にあった(コンボボックスから選択した)列のみを表示したい。
おはようございます。 VBA初心者です。どうぞお力添えをお願いいたします。 office2003を使用しております。 Excelの表にて会社での物品の集計表を作っております。 A列に部署 B列に物品名 C~E列まで発注元・発注先などが記載 Fから右方向へ週一回ずつ発注数(列)が増えていきます。 A1、B1、C1・・・は見出しで、F1には集計した日付が入力されます。 マクロを使用し、各部門毎の注文書からVLOOKUP等で自動的にデータを集計し、F列に挿入していくという形を取っております。過去分はGHIJKと右方向へ移動していきます。 定期的に「過去のある月の注文状況」を確認したいときがあります。 現在は12月ですが、「8月の総務課の注文状況は?」といったときに、列数が多く、非常に煩雑です。 そこで、コンボボックスを設置し、1月~12月まで選択できるようにし、それを選んだ(もしくはボタン操作でも構いません)とき、F列以降のその月の列だけを表示したいと考えております。 どうか宜しくお願いいたします。 A B C~E F G H 部署 品目 12/2 11/28 11/21 総務 ボールペン ・・・ 0 12 5 総務 修正テープ ・・・ 22 0 0 総務 ・ ・ ・ 経理 ノート 10 0 12 経理 えんぴつ 1 12 0 ・ ・ ・
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
何行分あるのか良くわかりませんが、たくさんあってかつ可変ということなのですよね? G列以降の列(特に列のタイトル)は、人為的に変更されることはないものと仮定してよければ、以下の要領で・・・ (1)シートに直接コンボボックスを作成します。 (オブジェクト名が「ComboBox1」であることを確認してください。) コンボボックスにはセルのリンクを張らないでおくこと。 (ユーザーフォームだと、複雑で、ここに記載するのが面倒になるので、 直接のボックスにしました。) (2)対象とするシートのシートモジュールに以下をコピー (3)以上で、ボックスから選択したタイトルの行が、ウインドウの最左列に 表示されるようになります。 表示位置の調節や、その他は適宜アレンジしてください。 Private Sub ComboBox1_Change() Dim col As Integer col = ComboBox1.ListIndex + 6 If col < 6 Then Exit Sub ActiveWindow.SmallScroll toright:=col - ActiveWindow.VisibleRange.Column End Sub Private Sub ComboBox1_DropButtonClick() Dim dt() As String Dim i As Integer, col As Integer col = Cells(1, Columns.Count).End(xlToLeft).Column If col - 5 = ComboBox1.ListCount Then Exit Sub If col > 4 Then ReDim dt(0 To col - 6) For i = 6 To col dt(i - 6) = Cells(1, i).Text Next i ComboBox1.ColumnCount = 1 ComboBox1.List() = dt ComboBox1.Style = fmStyleDropDownList End Sub
お礼
回答ありがとうございます。 とりあえずコピーしてやってみました。 確かに希望の列が一番左に来ますが・・・。 すいません、私の質問が悪かったと思います。 まず、物品の名称等は隠さず(スクロールもせず)表示した状態であること、 希望の列(希望の月)のみを表示させ、それ以外は非表示にすること、 が希望でした。 今回の件は自分で何とか出来ました。 日付から月だけ取得して、それとコンボボックスの値を照らし合わせ、一列ずつループを使用して表示・非表示を選択する形を取りました。 ご検討いただきました皆様どうもありがとうございました。 fujillin様 非常に貴重なアドバイス・コードありがとうございました。 これからも参考にさせていただきます。