![]() 画面表示を制御 |
|
'画面の描画を停止 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 の後の数値は、それぞれ現在の位置から移動先 ' セルまでの相対行と相対列を表します。 |
| トップページへ戻る | ▲このページの先頭へ |