プロが教える店舗&オフィスのセキュリティ対策術

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


A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

とりあえずコピーしてやってみました。
確かに希望の列が一番左に来ますが・・・。

すいません、私の質問が悪かったと思います。
まず、物品の名称等は隠さず(スクロールもせず)表示した状態であること、
希望の列(希望の月)のみを表示させ、それ以外は非表示にすること、
が希望でした。

今回の件は自分で何とか出来ました。
日付から月だけ取得して、それとコンボボックスの値を照らし合わせ、一列ずつループを使用して表示・非表示を選択する形を取りました。

ご検討いただきました皆様どうもありがとうございました。

fujillin様
非常に貴重なアドバイス・コードありがとうございました。
これからも参考にさせていただきます。

お礼日時:2008/12/05 17:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!