[PR]今日のニュースは
「Infoseek モバイル」

VBA閻魔帳 小技編

小技編は、我輩がこれはいいな って思うものを載せていきたいと思います。


●列を表示させない方法
たとえばたくさんの項目がある表で、
内容が入っていない場合は列を表示しないということを考えたいと思います

列の非表示、再表示には プロパティのEntireColumnを使います

 EntireColumn.Hidden = False で再表示となります

たとえばA列からX列まで項目があると仮定しますと列の再表示は

 Columns("A:X").EntireColumn.Hidden = False

と記述すればいいわけです

次の例はA列〜X列で各列の30行目にその列の合計があって、
その列の合計が0のときは
その列は表示させないと言う場合、つぎのようにします

Sub Test()
 Dim MyR As Range

  Set MyR = Range(Range("A30"), Range("X30"))

   For Each r In MyR 'For Each r In Range("A30:X30") でも OK

    If  r = 0  Then 
     r.EntireColumn.Hidden = True

    End If 

   Next 

End Sub

※ まぁ、あくまで我輩が使用しているコードですから、大したものではありません
   (H18/6/16作成)

●リストボックスを表示させて、素早く表示!!

コントロールボックスの中に リストボックスという便利なものがあるので
これを使って、素早く表示させるものを考えてみよう
まぁ、リスト表示も100個ぐらいまでが丁度いいぐらいじゃないかと思いますね
あまり、おおいとリストから探すのも大変だし・・・

まず、エクセルを立ち上げたときに、リストボックスにリスト表示させることを
考えます。

シート1でシート2のデータをリスト表示させるには
【This WorkBook】内で次のコードを記述します
Private Sub Workbook_Open()

 With Worksheets(1)
     .ListBox1.List = Worksheets(2).Range("E3:E103").Value
 End With

End Sub

   .Range("E3:E103") は あくまで 任意の範囲です。
 
例えば、範囲がちょこちょこ変るようであれば
 Dim Sh as WorkSheets
 Set Sh = Worksheets(2)
    Sh.Range(Sh.Range("E3"),Sh.Range("E65536").End(xlUp)).value
 といった、方法もあります  
 次にシート1でのリストの番号を取得するには

 Private Sub ListBox1_Click()
   i = ListBox1.ListIndex + 1
   表示 i
 End Sub

  ListIndexによりリスト番号の習得をします
  通常なにも明記しなければ0から始るので、
  +1にすることにより先頭が1番ということです
  表示 i にするとこにより リストボックスの番号を引き継がせることが
  できます
   シート2のデータをシート1で表示させるようなコードを
   【表示】で記述すればいいわけです

 Sub 表示(i)
  ・
  ・
  ・
 End Sub