Option Explicit
Dim objExcel
'Excelオブジェクトを取得
Set objExcel = CreateObject("Excel.Application")
'ExcelファイルをOPEN(※注1)
objExcel.Workbooks.Open("C:\Users\ユーザー名\Desktop\Book1.xlsm")
'Excelファイルを非表示
objExcel.Visible = False
'「Module1」のSubプロシージャ「StartMacro」を実行(※注2)
objExcel.Run "Module1.StartMacro"
'Excelを終了
objExcel.Quit
※注1
" "内は「.xlsm」ファイルの保存先を指定
※注2
" "内はExcelマクロの"モジュール名.プロシージャ名"を指定
2023年02月15日
2023年01月10日
VBA 特定のExcelファイルだけマクロを有効にする
マクロは便利だが、様々な事が出来てしまうため、セキュリティリスクとなる場合がある。
そのため、「警告を表示してすべてのマクロを無効にする」が初期設定されている。
しかし、この設定だとその都度マクロを有効にしなければならず、
だからといって「すべてのマクロを有効にする」にしてしまうと、セキュリティリスクが高まってしまう(※)。
※ダウンロードしたものやメールで入ってきた悪意のあるファイルに対しても無条件でマクロが有効となってしまうため
では、特定のファイルだけ常にマクロを有効にしたい場合はどうすればよいか。
どうやら特定のファイルだけマクロを有効にするという設定は無い様子。
だが、Excel 2007以降では「信頼できる場所」に存在するファイルだけは常にマクロを有効にすることが可能となっている。
そのため、自分で作ったマクロなど、安全であることが分かっているファイルは「信頼できる場所」へ移動させ、セキュリティリスクを高めることなくマクロを利用する。
なお、「信頼できる場所」へ移動したファイルは「警告を表示せずに全てのマクロを無効にする」の設定になっていてもマクロの利用が可能。
「信頼できる場所」への追加設定方法
1.「ファイル」を選択
2.「オプション」を選択
3.「セキュリティ センター」を選択
(利用しているExcelのバージョンにより「セキュリティ センター」「トラスト センター」など表記が違う)
4.「セキュリティ センターの設定」を選択
(利用しているExcelのバージョンにより「セキュリティ センターの設定」「トラスト センターの設定」など表記が違う)
5.「信頼できる場所」を選択
6.初期設定されているフォルダにExcelファイルを保存する。
(もしくは、「新しい場所の追加」ボタンからExcelファイルを保存しているフォルダを指定する)
2022年12月05日
VBA Bookを上書き保存する際に複製したファイル(バックアップファイル)を自動で作成する
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim path As String
Dim name As String
path = ThisWorkbook.path
name = Format(Now(), "yyyymmdd") & "_" & "backup" & ThisWorkbook.name
ThisWorkbook.SaveCopyAs Filename:=path & "\" & name
End Sub
【補足】
上書き保存の際にVBAを起動するには、「ThisWorkbook」から「BeforeSave」を選択する。
2022年11月01日
Eclipse JRE システム・ライブラリーがアンバインドされています
Eclipseでプロジェクトをインポートしたところ、次のエラーが発生した。
'JRE システム・ライブラリー [〇〇]' がアンバインドされています
このエラーが発生した場合は、システム・ライブラリーを一旦除去し、再度追加することでビルドエラーが解消する可能性がある。
1.プロジェクトを選択し右クリック
2.「プロパティ」を選択
3.「Java のビルドパス」を選択
4.「ライブラリー」タブを選択
5.「JRE システム・ライブラリ(アンバインド済み)」を「除去」
6.「ライブラリの追加」ボタンを押下
7.「JRE システム・ライブラリ」を選択し「次へ」
8.「ワークスペースのデフォルト」を選択し「完了」
上記設定後、「プロジェクト」メニューから「クリーン」を実施
'JRE システム・ライブラリー [〇〇]' がアンバインドされています
このエラーが発生した場合は、システム・ライブラリーを一旦除去し、再度追加することでビルドエラーが解消する可能性がある。
設定手順
1.プロジェクトを選択し右クリック
2.「プロパティ」を選択
3.「Java のビルドパス」を選択
4.「ライブラリー」タブを選択
5.「JRE システム・ライブラリ(アンバインド済み)」を「除去」
6.「ライブラリの追加」ボタンを押下
7.「JRE システム・ライブラリ」を選択し「次へ」
8.「ワークスペースのデフォルト」を選択し「完了」
上記設定後、「プロジェクト」メニューから「クリーン」を実施
2022年09月28日
VBA Excel起動時に目印となる線を現在の時間へ移動する
Excel起動時に目印となる線を現在の時間へ移動するプログラム
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Worksheets(1).Activate
'1行目より一致する時間を選択する
Rows(1).Find(What:=Hour(Now()), LookIn:=xlValues).Select
'線を移動させる
With ActiveSheet.Shapes("時間").Select
Selection.ShapeRange.Top = ActiveCell.Top '開始行を指定
Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 '横位置をセルの中央に指定
End With
'A1セルを選択
Range("A1").Activate
Application.ScreenUpdating = True
End Sub
【補足1】
目印となる線を事前に作成しておく。
また、線の名前は「時間」にする。
【補足2】
ファイルを開いた際にVBAを起動するには、「ThisWorkbook」から「Open」を選択する。
2022年08月23日
VBA 最終行までの空白セルを選択する
B2セルから最終行までの空白セルを選択するプログラム
Sub SelectBlankCell()
Dim blankCell As Range
Set blankCell = Range("B2", "B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
blankCell.Select
MsgBox Selection.Count '選択したセル数を確認する
End Sub
Sub SelectBlankCell()
Dim blankCell As Range
Set blankCell = Range("B2", "B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
blankCell.Select
MsgBox Selection.Count '選択したセル数を確認する
End Sub
2022年07月20日
Windows アプリケーションを常に管理者として実行させる
アプリケーションを実行すると通常は管理者ではない権限で実行される。
だが、色々なアプリケーションを利用していると、まれに管理者として実行する必要があるアプリケーションに遭遇する。
このような場合、通常はアイコンを右クリックし「管理者として実行」で起動させるのだが、毎回そのアイコンを右クリックして「管理者として実行」するのは意外と手間がかかる。
また、「管理者として実行」を忘れて起動してしまった場合には、もれなくエラーが発生し、再度起動し直すこととなってしまう。
そのため、管理者として実行する必要があるアプリケーションを、常に管理者として起動するよう設定する。
1)アプリケーションの実行ファイルを右クリックし「プロパティ」を選択する
2)「互換性」タブをクリックする
3)設定にある「管理者としてこのプログラムを実行する」にチェックを付ける
4)「OK」をクリックしてウィンドウを閉じる
1)ショートカットアイコンを右クリックし「プロパティ」を選択する
2)「詳細設定」ボタンをクリックする
3)詳細プロパティにて『管理者として実行』にチェックを付ける
4)「OK」をクリックしてウィンドウを閉じる
だが、色々なアプリケーションを利用していると、まれに管理者として実行する必要があるアプリケーションに遭遇する。
このような場合、通常はアイコンを右クリックし「管理者として実行」で起動させるのだが、毎回そのアイコンを右クリックして「管理者として実行」するのは意外と手間がかかる。
また、「管理者として実行」を忘れて起動してしまった場合には、もれなくエラーが発生し、再度起動し直すこととなってしまう。
そのため、管理者として実行する必要があるアプリケーションを、常に管理者として起動するよう設定する。
実行ファイルでの設定手順
1)アプリケーションの実行ファイルを右クリックし「プロパティ」を選択する
2)「互換性」タブをクリックする
3)設定にある「管理者としてこのプログラムを実行する」にチェックを付ける
4)「OK」をクリックしてウィンドウを閉じる
ショートカットでの設定手順
1)ショートカットアイコンを右クリックし「プロパティ」を選択する
2)「詳細設定」ボタンをクリックする
3)詳細プロパティにて『管理者として実行』にチェックを付ける
4)「OK」をクリックしてウィンドウを閉じる
2022年06月20日
VBScript MsgBoxで日本語を使うと文字化けが発生する
MsgBoxを作成した際に文字化けが発生することがある。
このような場合は文字コードを「UTF-8」から「ANSI」へ変更する。
1)名前を付けて保存の際「文字コード」をクリック
2)プルダウンリストから「ANSI」を選択する
【関連記事】
MsgBox関数でメッセージボックスを表示する
MsgBox関数で定数を利用する
タスクスケジューラのメッセージを最前面に表示するスクリプト
2022年05月17日
JAVA 多次元配列のイメージ
2次元以上の配列のことを多次元配列と呼ぶ。
2次元配列は、既に配列(※)されているものを、さらにまとめた(配列した)もの。
※配列:データをメモリ上に隙間をあけずに並べたもの
添字と値を確認するサンプルプログラム
public class MultidimensionalArrays{
public static void main(String[] args){
int[][] array = {{12,23,34}, {45,56,67}, {78,89,90}};
for (int i = 0; i < array.length; i++){
for (int j = 0; j < array[i].length; j++){
System.out.println("array[" + i + "][" + j + "] = " + array[i][j]);
}
}
}
}
2次元配列は、既に配列(※)されているものを、さらにまとめた(配列した)もの。
※配列:データをメモリ上に隙間をあけずに並べたもの
添字と値を確認するサンプルプログラム
public class MultidimensionalArrays{
public static void main(String[] args){
int[][] array = {{12,23,34}, {45,56,67}, {78,89,90}};
for (int i = 0; i < array.length; i++){
for (int j = 0; j < array[i].length; j++){
System.out.println("array[" + i + "][" + j + "] = " + array[i][j]);
}
}
}
}
2022年04月15日
VBScript 特定のキー押下を検知したら処理を実行するスクリプト(キー入力待ちスクリプト)
Option Explicit
Dim Excel
Dim strFunction
Dim Shift : Shift = &H10
Dim Control : Control = &H11
Dim Alt : Alt = &H12
Dim Esc : Esc = &H1B
Set Excel = CreateObject("Excel.Application")
Do While true
If CheckKey(Shift) AND CheckKey(Control) = true Then
'「Shift」+「Control」+「Alt」押下にて処理実行
If CheckKey(Alt) = true Then
' /// ボタン押下時に処理したい内容を記述 ///
'「Shift」+「Control」+「Esc」押下にて待ち受け処理終了
ElseIf CheckKey(Esc) = true Then
Exit Do
End If
End If
WScript.Sleep 100
Loop
MsgBox "キー入力待ちを終了します" ,vbSystemModal + vbExclamation
Excel.Quit
'キー判定
Function CheckKey(Key)
strFunction = "CALL(""user32.dll"", ""GetKeyState"", ""JJ"", " & key & ")"
CheckKey = (Excel.ExecuteExcel4Macro(strFunction) And &h8000) <> 0
End Function
※注1
利用するコンピュータにExcelが入っていることが条件
※注2
待ち受け処理終了時(「Shift」+「Control」+「Esc」)には同時にタスクマネージャーも起動する
Dim Excel
Dim strFunction
Dim Shift : Shift = &H10
Dim Control : Control = &H11
Dim Alt : Alt = &H12
Dim Esc : Esc = &H1B
Set Excel = CreateObject("Excel.Application")
Do While true
If CheckKey(Shift) AND CheckKey(Control) = true Then
'「Shift」+「Control」+「Alt」押下にて処理実行
If CheckKey(Alt) = true Then
' /// ボタン押下時に処理したい内容を記述 ///
'「Shift」+「Control」+「Esc」押下にて待ち受け処理終了
ElseIf CheckKey(Esc) = true Then
Exit Do
End If
End If
WScript.Sleep 100
Loop
MsgBox "キー入力待ちを終了します" ,vbSystemModal + vbExclamation
Excel.Quit
'キー判定
Function CheckKey(Key)
strFunction = "CALL(""user32.dll"", ""GetKeyState"", ""JJ"", " & key & ")"
CheckKey = (Excel.ExecuteExcel4Macro(strFunction) And &h8000) <> 0
End Function
※注1
利用するコンピュータにExcelが入っていることが条件
※注2
待ち受け処理終了時(「Shift」+「Control」+「Esc」)には同時にタスクマネージャーも起動する