MW211 EXIT

devlog
ExcelVBA/列幅自動調整
2018年11月06日
以下のように列幅を自動調整することができる。
┌──────────────────────────────────────┐
│With シート                                                                 │
│    With .Range(.Columns(1), .Columns(9))                                   │
│        .AutoFit                                                            │
│    End With                                                                │
│End With                                                                    │
└──────────────────────────────────────┘

但し、非表示の列があった場合には、表示になってしまう。
そこでそれを考慮した場合には以下のようになる。
┌──────────────────────────────────────┐
│Dim x As Long                                                               │
│With シート                                                                 │
│    For x = 1 To 9                                                          │
│        With .Columns(x)                                                    │
│            If .Hidden = False Then                                         │
│                .AutoFit                                                    │
│            End If                                                          │
│        End With                                                            │
│    Next x                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/For Each文で値は変更できない
2018年11月03日
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
For Each文は上記のように値を参照できるのだが、
以下のように値を代入したりはできない。
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│For Each 要素 In 配列                                                       │
│   要素 = "値を変更"                                                        │
│Next 要素                                                                   │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
上記における変数「要素」は一時変数のようなもので、
次から次へと配列の要素が上書されるので、値を変えても効果はない。

PHPではアドレス参照にする方法もあるが、ExcelVBAではそれがないので
もしも値を変えたい場合には、スカラ配列ならばFor文でループする。
┌──────────────────────────────────────┐
│Dim 配列 As Variant, 要素 As Variant                                        │
│Dim i As Long                                                               │
│For i = LBound(配列) To UBound(配列)                                        │
│   配列(i) = "z"                                                            │
│Next i                                                                      │
│For Each 要素 In 配列                                                       │
│   MsgBox 要素                                                              │
│Next 要素                                                                   │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/枠線を消すマクロ
2018年11月02日
リボンメニュー「表示」の(「表示」の部にある)「■枠線」のチェックをはずすと
枠線が消えるがそれをマクロで実行する方法。

以下のようにすればチェックがはずれる。
┌──────────────────────────────────────┐
│ActiveWindow.DisplayGridlines = False                                       │
└──────────────────────────────────────┘

しかしながら、これはシートを指定しての実行はできない。
┌──────────────────────────────────────┐
│シート.DisplayGridlines = False                                             │
└──────────────────────────────────────┘

任意のシートにて実行したい場合には、以下のようにそのシートへ移動してから
実行するしかないようだ。
┌──────────────────────────────────────┐
│Application.GoTo シート.Cells(1, 1)                                         │
│ActiveWindow.DisplayGridlines = False                                       │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/フィルタリングと非表示
2018年11月01日
┌──────────────────────────────────────┐
│Dim yMax As Long, y As Long                                                 │
│With ActiveSheet                                                            │
│    yMax = .UsedRange.Rows(.UsedRange.Rows.Count).Row                       │
│    MsgBox yMax                                                             │
│    For y = 2 To yMax                                                       │
│        MsgBox .Cells(y, 1).Value                                           │
│    Next y                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
  上記のようなシートを走査する処理にて、
  実際のシート(の行)が非表示でも影響は受けない。

  フィルタリングによる非表示も、非表示化による非表示も同じ(影響なし)。
分類:ExcelVBA
前へ 1 2 次へ