MW211 EXIT

devlog
ExcelVBA/印刷範囲内をループ
2018年11月13日
範囲内をただループするだけなら以下。
┌──────────────────────────────────────┐
│Dim y As Long                                                               │
│With シート                                                                 │
│    With Range(.PageSetup.PrintArea)                                        │
│        For y = 1 To .Rows.Count                                            │
│            .Cells(y, 1).Interior.Color = RGB(255, 255, 0)                  │
│        Next y                                                              │
│    End With                                                                │
│End With                                                                    │
└──────────────────────────────────────┘

セル座標から制御する場合には以下。
┌──────────────────────────────────────┐
│Dim y As Long                                                               │
│Dim 開始行 As Long, 終了行 As Long                                          │
│With シート                                                                 │
│    With Range(.PageSetup.PrintArea)                                        │
│        開始行 = .Rows.Row                                                  │
│        終了行 = 開始行 + .Rows.Count - 1                                   │
│    End With                                                                │
│    For y = 開始行 To 終了行                                                │
│        .Cells(y, 1).Interior.Color = RGB(255, 255, 0)                      │
│    Next y                                                                  │
│End With                                                                    │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/Application.Goto
2018年11月12日
【1】任意のシートに飛ぶ
┌──────────────────────────────────────┐
│Application.Goto Reference:=シート.Cells(1, 1)                              │
├──────────────────────────────────────┤
│Application.Goto シート.Cells(1, 1)                                         │
└──────────────────────────────────────┘
  任意のシートの任意のセルへ飛ぶ。
  飛んだ後の画面表示としては、当該セルが表示される(が末尾に表示される)

【2】任意のシートに飛び左上に位置付ける
┌──────────────────────────────────────┐
│Application.Goto Reference:=シート.Cells(1, 1), Scroll:=True                │
├──────────────────────────────────────┤
│Application.Goto シート.Cells(1, 1), True                                   │
└──────────────────────────────────────┘
  任意のシートの任意のセルへ飛ぶ。
  飛んだ後の画面表示としては、当該セルが左上に位置付く(そこまでスクロールする)。

【3】ソースコードを表示する
┌──────────────────────────────────────┐
│Application.Goto Reference:="関数名"                                        │
├──────────────────────────────────────┤
│Application.Goto "関数名"                                                   │
└──────────────────────────────────────┘
  VBE(Visual Basic Editor)を起動し、当該関数のソースコードを表示する。
分類:ExcelVBA
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
ExcelVBA/日時型の分離
2018年10月31日
Date型は日時型である。
この値を日付型と時刻型に分けたいという場合について。
Date型は、整数部が日付型、小数部が時刻型なので、それぞれに分ければよい。
ただ、一番確実な方法は、DateValue()やTimeValue()を使う方法であろう。
┌──────────────────────────────────────┐
│日付 = DateValue(日時)                                                      │
├──────────────────────────────────────┤
│時刻 = TimeValue(日時)                                                      │
└──────────────────────────────────────┘
これらは、主に文字列を日時に変換する関数だが、日時をインプットにしても動くのだ。

他には、一旦各要素に変換して、そこから生成し直すというやり方もある。
┌──────────────────────────────────────┐
│日付 = DateSerial(Year(日時), Month(日時), Day(日時))                       │
├──────────────────────────────────────┤
│時刻 = TimeSerial(Hour(日時), Minute(日時), Second(日時))                   │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/日付を年度に変換
2018年10月29日
日付を年度に変換する関数。(年度開始月が4月の場合)
┌──────────────────────────────────────┐
│Public Function 年度変換(ByVal 日付 As Variant) As Long                     │
│    If IsDate(日付) Then                                                    │
│        年度変換 = IIf(Month(日付) < 4, Year(日付) - 1, Year(日付))         │
│    Else                                                                    │
│        年度変換 = 0                                                        │
│    End If                                                                  │
│End Function                                                                │
└──────────────────────────────────────┘
日付じゃないもの(空欄も含む)が入力された場合は、「0」年度を返す。
分類:ExcelVBA
ExcelVBA/Chr関数の全貌
2018年09月28日
Chr関数の全貌を出力するマクロ。
┌──────────────────────────────────────┐
│Public Sub Chr関数の全貌()                                                  │
│    Dim i As Long                                                           │
│    With ActiveCell                                                         │
│        For i = 0 To 255                                                    │
│            With .Offset(i)                                                 │
│                .Offset(, 0).Value = i                                      │
│                .Offset(, 1).Value = Chr(i)                                 │
│                With .Offset(, 2)                                           │
│                    Select Case i                                           │
│                        Case 8:     .Value = "[BS]"                         │
│                        Case 9:     .Value = "[TAB]"                        │
│                        Case 10:    .Value = "[LF]"                         │
│                        Case 13:    .Value = "[CR]"                         │
│                        Case 32:    .Value = "[SPACE]"                      │
│                    End Select                                              │
│                End With                                                    │
│            End With                                                        │
│        Next i                                                              │
│    End With                                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
Excel2010/例外の起こし方
2018年09月07日
ActiveXコントロールでボタンを追加し、
そのイベントとして以下のような感じで改頁設定全削除を仕込む。
┌──────────────────────────────────────┐
│Private Sub CommandButton1_Click()                                          │
│    ActiveSheet.ResetAllPageBreaks                                          │
│End Sub                                                                     │
└──────────────────────────────────────┘
後は、ボタンを押すだけで(ボタンを押してイベントを実行するだけで)
Excelが例外で落ちる。

なぜだろう?
分類:ExcelVBA
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 27 次へ