Z.その他





画面表示を制御


'画面の描画を停止

  Application.ScreenUpdating = False

'画面の描画を再開

  Application.ScreenUpdating = True


'注 1.マクロの開始時に描画を停止させ、終了前に再開させ
'   ると便利です。




画面のスクロール


'視点を左上角に移動

 'ウィンドウ枠固定をしていない場合

  ActiveWindow.ScrollRow = 1         '※ 1
  ActiveWindow.ScrollColumn = 1       '※ 2

 'ウィンドウ枠固定の場合(ここでは、セルC2位置で固定)

  ActiveWindow.ScrollRow = 2         '※ 1
  ActiveWindow.ScrollColumn = 3       '※ 2


'一画面単位(1ページ単位)でスクロール

 '下方向

  ActiveWindow.LargeScroll Down:=1      '※ 3
  '又は
  ActiveWindow.LargeScroll Up:=-1      '※ 3

 '上方向

  ActiveWindow.LargeScroll Up:=1       '※ 3
  '又は
  ActiveWindow.LargeScroll Down:=-1     '※ 3

 '右方向

  ActiveWindow.LargeScroll ToRight:=1    '※ 3
  '又は
  ActiveWindow.LargeScroll ToLeft:=-1    '※ 3

 '左方向

  ActiveWindow.LargeScroll ToLeft:=1     '※ 3
  '又は
  ActiveWindow.LargeScroll ToRight:=-1    '※ 3


'注 1.アクティブシート以外を対象にするには、先ず対象
'   シートをアクティブにして下さい。

'注 2.一行(列)単位でスクロールさせる場合は、LargeScroll
'   の箇所を SmallScroll に変更してお使い下さい。

'※ 1.最後の数字は、ウィンドウ内で上端に表示される行
'   番号です。


'※ 2.最後の数字は、ウィンドウ内で左端に表示される列
'   番号です。


'※ 3.最後の数字は、スクロールさせる回数(例:2 なら、
'   2 画面分)です。





オートフィルタ


'設定、解除する

 '@セル単位 (例は、Sheet2のC1〜Z100)

  Worksheets("Sheet2"). _
   Range("C1:Z100").AutoFilter       '※ 1

 'A行単位  (例は、Sheet2の1行目〜100行目)

  Worksheets("Sheet2"). _
   Rows("1:100").AutoFilter         '※ 1

 'B列単位  (例は、Sheet2のC列〜Z列)

  Worksheets("Sheet2"). _
   Columns("C:Z").AutoFilter        '※ 1

 'Cシート全部(例は、Sheet2の全セル)

  Worksheets("Sheet2").Cells.AutoFilter   '※ 1


'特定の値で選択フィルタをかける

  Worksheets("Sheet2").Range("C1:Z100"). _
   AutoFilter Field:=3, Criteria1:="東京"  '※ 2


'選択フィルタを解除する(上で行った選択のみが、
'解除されます。)

  Worksheets("Sheet2").Range("C1:Z100"). _
   AutoFilter Field:=3           '※ 3


'※ 1.設定と解除は、現在設定状態であれば解除、未設定
'   状態であれば設定されます。


'※ 2.例では、E 列が 東京 の行だけが選択されます。
'   また、オートフィルタが未設定の場合は、エラーに
'   なります。


'※ 3.Criteria1 を省略するだけで解除になります。なお
'   空白セルのみを選択したい場合は、 Criteria1 = ""
'   として下さい。





不特定セル範囲の取得


'空白行と空白列で囲まれたセル領域を取得します。

 '領域をアクティブにする

  Sheets("Sheet2").Select          '※ 1
  Range("C1").CurrentRegion.Select      '※ 2

 '領域の行・列数を取得する

  Dim AAA As Range
  Dim a, b As Integer
  Sheets("Sheet2").Select          '※ 1
  Set AAA = Range("C1").CurrentRegion    '※ 3
  a = AAA.Rows.Count             '※ 3
  b = AAA.Columns.Count           '※ 3


'※ 1.目的シートがアクティブでない場合は、アクティブに
'   する必要があります。


'※ 2.セルC1から右下を領域対象にします。ただし B列が
'   空白列でないと意味がありません。


'※ 3.AAAに領域範囲、aに領域の行数、bに領域の列数が格納
'   されます。





整列


'例では、 Sheet2 の C1〜Z100 の範囲を、
'C列昇順→G列昇順→D列降順で整列させます。

  Worksheets("Sheet2").Range("C1:Z100").Sort _
   Key1:=Range("C1"), Order1:=xlAscending, _
   Key2:=Range("G1"), Order2:=xlAscending, _
   Key3:=Range("D1"), Order3:=xlDescending




カーソル移動方向変更


'Enter押下で、カーソルが移動する方向を変更します。

 '上移動

  Application.MoveAfterReturnDirection = xlUp

 '下移動

  Application.MoveAfterReturnDirection = xlDown

 '左移動

  Application.MoveAfterReturnDirection = xlToLeft

 '右移動

  Application.MoveAfterReturnDirection = xlToRight




右クリックメニュー追加


'以下は、右クリックメニューの一番上に新しい項目(項目名:
'H10.11.12 日付形式に変更)を追加し、その項目をクリック
'する事で、他のマクロ(特別日付方式)を実行させます。

  With Application.CommandBars("CELL"). _
   Controls.Add(Before:=1)         '※ 1
   .Caption = "H10.11.12 日付形式に変更"
   .OnAction = "特別日付方式"
  End With


'※ 1.Add(Before:=1)は、右クリックメニューの一番上の
'   更に上に項目を追加する事を意味します。適宜変更
'   してお使い下さい。


Sub 特別日付方式()
  Selection.NumberFormatLocal = """'""yy""/""m""/""d"
End Sub


'注.なお上の記述では、対象セルが日付ではなく、文字列で
'  あったとしても、エラーになりません。




右クリックメニュー削除


'追加した右クリックメニューの項目を削除します。

  Application.CommandBars("CELL").Controls(1).Delete

'右クリックメニューをデフォルト(初期値)に戻します。

  Application.CommandBars("CELL").Reset


'注.Controls(1) は一番上を意味します。追加した位置に
'  よって数値を変更して下さい。



イベント


'ここでは、ユーザーが起こす各種イベントをキッカケ
'にして、マクロを始動させる方法をいくつか紹介します。

'@ユーザーがブックを開く
 '例では、ブックを開いた後にメッセージを表示します。

Private Sub Workbook_Open()
  MsgBox "今日は" & CStr(Day(Now())) & "日です。"
End Sub

'Aユーザーがブックを閉じる
 '例では、ブックを閉じる前にメッセージを表示します。

Private Sub Workbook_BeforeClose _
  (Cancel As Boolean)            '※ 1

  MsgBox "お疲れさまでした。m(_ _)m"

End Sub

'Bユーザーがブックを保存する
 '例では、ブックを保存する前にメッセージを表示します。

Private Sub Workbook_BeforeSave _
 (ByVal SaveAsUI As Boolean, Cancel As Boolean) '※ 2

 Dim AA As String
  AA = ActiveWorkbook.Name
  MsgBox "現在のファイル名は、『" & AA & "』です。"

End Sub

'Cユーザーがシートをアクティブにする
 '例では、シートがアクティブになった時に計算方法を
 '自動に設定します。

Private Sub Worksheet_Activate()
  Application.Calculation = xlAutomatic
End Sub

'Dユーザーがシートを非アクティブにする
 '例では、シートが非アクティブになった時に計算方法を
 '手動に設定します。

Private Sub Worksheet_Deactivate()
  Application.Calculation = xlManual
End Sub
'Eユーザーがシートのセル内容を変更する
 '例では、シートのセル内容が変更されたら、変更された
 'セルの色を赤色にします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Target.Font.ColorIndex = 3
End Sub

'Fワークシートが再計算される
 '例では、シートが再計算されると、A〜C列の列幅を自動
 '調整します。

Private Sub Worksheet_Calculate()
  Columns("A:C").AutoFit
End Sub


'注.@〜Bは、ThisWorkbookのコードとして記述して
'  下さい。また、C〜Fは、各シートのコードとして
'  記述して下さい。

'※ 1.なお Cancel = True の一行を追加すれば、ブックを
'   閉じさせない様に設定できます。


'※ 2.なお SaveAsUI = True の一行を追加すれば、強制的に
'   [名前を付けて保存]ダイアログボックスを表示させる
'   ことができます。また Cancel = True と記述すれば、
'   ユーザーにブックを保存させない様に設定できます。





ツールバー


 現在作成中です。m(_ _)m





応用 Z


'Enter 押下によりカーソル位置が、矩形セル範囲内しか
'移動できない様に制限します。例では、C2〜F10の範囲
'内を無限にカーソル移動させます。なお、以下の記述は、
'Worksheet_SelectionChangeイベントで記述して下さい。

'右方向移動

  Dim a, b As Long               '※ 1
  a = ActiveCell.Row             '※ 2
  b = ActiveCell.Column           '※ 3

  If a = 10 And b = 7 Then   'G10セルの場合C2
                 ' セルにジャンプ

   ActiveCell.Offset(-8, -4).Select     '※ 4
  ElseIf a >= 2 And a <= 9 _
   And b = 7 Then       'G2〜G9セルの場合C列
                 '  の次行にジャンプ

   ActiveCell.Offset(1, -4).Select     '※ 4
  End If


'下方向移動

  Dim c, d As Long               '※ 1
  c = ActiveCell.Row             '※ 2
  d = ActiveCell.Column           '※ 3

  If c = 11 And d = 6 Then   'F11セルの場合C2
                 ' セルにジャンプ

   ActiveCell.Offset(-9, -3).Select     '※ 4
  ElseIf c = 11 And d >= 3 _
   And d <= 5 Then       'C11〜E11セルの場合
                 '2行目の次列にジャンプ

   ActiveCell.Offset(-9, 1).Select     '※ 4
  End If


'注.上記マクロは、別マクロで Enter押下時のカーソル移動
'  方向を、それぞれ右と下に設定してから、使用して下さ
'  い。(カーソル移動方向変更を参照)

'※ 1.Excel の最大行番号が 65,536 の為、長整数型(Long)
'   で定義します。


'※ 2.カーソルのあるアクティブセルの行番号を取得します

'※ 3.カーソルのあるアクティブセルの列番号を取得します

'※ 4.Offset の後の数値は、それぞれ現在の位置から移動先
'   セルまでの相対行と相対列を表します。




トップページへ戻る ▲このページの先頭へ