• 締切済み

条件にあった(コンボボックスから選択した)列のみを表示したい。

おはようございます。 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 ・ ・ ・

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

何行分あるのか良くわかりませんが、たくさんあってかつ可変ということなのですよね? 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

kyo1308
質問者

お礼

回答ありがとうございます。 とりあえずコピーしてやってみました。 確かに希望の列が一番左に来ますが・・・。 すいません、私の質問が悪かったと思います。 まず、物品の名称等は隠さず(スクロールもせず)表示した状態であること、 希望の列(希望の月)のみを表示させ、それ以外は非表示にすること、 が希望でした。 今回の件は自分で何とか出来ました。 日付から月だけ取得して、それとコンボボックスの値を照らし合わせ、一列ずつループを使用して表示・非表示を選択する形を取りました。 ご検討いただきました皆様どうもありがとうございました。 fujillin様 非常に貴重なアドバイス・コードありがとうございました。 これからも参考にさせていただきます。

関連するQ&A