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