ExcelVBA

Internet Explorerのタブを切り替えるVBAマクロ

UI Automationを使う。これを使うとダウンロード通知バーを操作できたり、UI周りを細かくいじれるっぽい ネタ元 https://www.ka-net.org/blog/?p=7697 https://www.ka-net.org/blog/?p=4628 https://www.ka-net.org/blog/?p=4617

vbaでマクロのタイマー起動

Sub 現在より一定時間後にマクロを実行する() 指定時刻 = Now + TimeValue("HH:MM:SS") '現在時刻より何分後 ※2 待ち時間 = TimeValue("HH:MM:SS") '指定時刻に他プロシージャが実行中の場合の待ち時間 ※2 Application.OnTime TimeValue(指定時刻), _ "一定…

Excelを終了する

Sub QuitSamp1() Dim wb As Workbook For Each wb In Workbooks '開いている全てのブックに対して If wb.Saved = False Then wb.Save '保存されていないブックは上書き保存 Next wb Application.Quit 'Excelを終了します End Subネタ元 https://www.moug.net…

VBAで特殊フォルダのパスを取得する

デスクトップの取得方法 Sub Sample3() Dim Path As String, WSH As Variant Set WSH = CreateObject("WScript.Shell") Path = WSH.SpecialFolders("Desktop") & "\" ActiveWorkbook.SaveAs Path & "Sample1.xls" Set WSH = Nothing End Subマイドキュメント…

VBAで2つの画像ファイルを比較して内容が同一かどうかを判定する方法

バイナリでファイル読み込んで無理やりテキスト変換&比較する技 Function ReadBmpAsString(file_name As String) As String Dim bmp() As Byte Open file_name For Binary As #1 ReDim bmp(LOF(1)) Get #1, , bmp Close #1 ReadBmpAsString = bmp End Functi…

ExcelVBAで複数のセル範囲の重なる範囲を取得する

Dim Rng1 As Range, Rng2 As Range Dim Target As Range Set Rng1 = Range("A1:D5") Set Rng2 = Range("C4:E10") Set Target = Intersect(Rng1, Rng2) MsgBox Target.Addressネタ元 http://www.moug.net/tech/exvba/0050074.html http://officetanaka.net/ex…

ExcelVBAで選択範囲の背景色をクリアする

Selection.Interior.ColorIndex = xlNoneネタ元 https://www.moug.net/tech/exvba/0110010.html

ExcelVBAにてメッセージボックスを最前面に表示させる

普通にMsgBoxだと他のウィンドウに隠れちゃったりして不便な時ある。 #If Win64 Then Public Declare PtrSafe Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal u…

ExcelVBAで文字列を16進数に変換

文字列→16進法 Private Function StrToHex(ByVal strData As String) As String '文字列→16進法 Dim strChar As String ReDim strHex(1 To Len(strData)) As String ReDim lngNu(1 To Len(strData)) For i = 1 To Len(strData) strChar = Mid$(strData, i, 1…

ExcelVBAでIEを全部閉じる

Dim objShell As Object Dim objWin As Object Set objShell = CreateObject("Shell.Application") For Each objWin In objShell.Windows If TypeName(objWin) = "IWebBrowser2" Then Set objIE = objWin objIE.Quit End If Nextネタ元 http://loveparin.blo…

ExcelVBAでJSONを扱うためのモジュール「VBA-JSON」

https://github.com/VBA-tools/VBA-JSON

excelvbaで列番号を文字に変換する

'列番号を文字に変換するユーザー定義関数 Function ColNum2Txt(lngColNum As Long) As String On Error GoTo ErrHandler Dim strAddr As String strAddr = Cells(1, lngColNum).address(False, False) ColNum2Txt = Left(strAddr, Len(strAddr) - 1) Exit F…

ExcelVBAでIE操作サンプルサイト

http://tonari-it.com/vba-ie-login/ http://www.vba-ie.net/library/ http://www.vba-ie.net/function/sleep.html

excelVBAでロックしたセルに、シート保護を解除せずにデータを書き込む

こんな感じでシート保護を設定(UIのみ)を設定する Option Explicit Private Sub Workbook_Open() ' 一旦、シート保護を解除 ActiveSheet.Unprotect ' シート保護を設定(UIのみ) ActiveSheet.Protect UserInterfaceOnly:=True ActiveWindow.ScrollRow = 1 End…

ExcelVBAで特定のセル範囲が変更されたときに処理を実行する

Intersectメソッドと、ワークシートのChangeイベントを組み合わせることで、特定のセル範囲が変更されたときのみ処理を実行することができます。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:B5")) Is Nothing The…

excelVBAで連想配列

Sub 支社別集計() Dim Sheet1, Sheet2 As Worksheet Const COL店舗CD = 1 ' 店舗CDの列 Const COL分類CD = 3 ' 分類CDの列 Const COL売上額 = 10 ' 売上額 Dim MaxRow As Long ' 最終行 Dim key As String ' 検索キー Dim c, r As Long Set dicT = CreateObj…

excelvbaで動的配列やるならRedimだけど、中身壊したくないならPreserveつけよう

Sub Sample37() Dim Member() As String MsgBox "要素数を再定義します" ReDim Member(2) Member(1) = "tanaka" Member(2) = "yamada" ReDim Preserve Member(3) Member(3) = "sato" MsgBox "1人目は" & Member(1) End Subネタ元 http://officetanaka.net/ex…

excelvbaでファイルに書き込む

Public Sub sample() Dim intNo As Integer Dim strFileName As String ' テキストを出力するファイルを設定 strFileName = "C:\tmp\sample.txt" ' ファイルの書き込み intNo = FileSystem.FreeFile() ' フリーファイルNoを取得 Open strFileName For Output…

excelVBAでstrtokの代わりはSplit関数

Sub Sample1() Dim tmp As Variant tmp = Split("123,田中,tanaka", ",") MsgBox tmp(0) MsgBox tmp(1) MsgBox tmp(2) End Subネタ元 http://officetanaka.net/excel/vba/tips/tips62.htm

excelVBAで一時(テンポラリ)ファイル名を取得する

Sub Sample05() Dim FSO As Object, TempName As String Set FSO = CreateObject("Scripting.FileSystemObject") ''新しいブックを挿入します With Workbooks.Add ''作業用ブック名を生成します With FSO TempName = .GetSpecialFolder(2) & "\" & .GetBaseN…

セルのカーソル移動

ActiveCell.Offset(2, 0).Activate-->下方向へ2つ移動 ActiveCell.Offset(0, 3).Activate-->右方向へ3つ移動 ActiveCell.Offset(1, 2).Activate-->下へ1右へ2移動 ActiveCell.Offset(-2, -1).Activate-->上へ2左へ1移動 ネタ元 http://www…

ExcelVBAにもEnumはある

Enum FontColor Normal Black White Red Green Yellow Blue End Enumネタ元 https://www.moug.net/tech/exvba/0150119.html

VBAで正規表現HITした文字列取得方法

$1,$2みたいな取り方ね。 Sub RegExpSample4() Dim regEx As Object, Matches As Object, Match As Object Set RE = CreateObject("VBScript.RegExp") Dim targetString As String targetString = "kakeru@yabuki @kyogokudo hisao@nanao " With RE .Pattern…

excelvbaでファイル読み込み

Sub Sample2() Dim buf As String Open "C:\Sample\Data.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf セル = buf Loop Close #1 End Sub ネタ元 http://officetanaka.net/excel/vba/file/file08b.htm

excelvbaでDir()を使わないファイル確認

Dir()でも確認できるけど、ファイル検索中など困るときにはこっち使うと吉。 'Dir()を使わないファイル確認 Function FileExist(path) Dim objFileSys Dim strScriptPath Dim strCopyFrom Dim strCopyTo Set objFileSys = CreateObject("Scripting.FileSyste…

ExcelVBAで日付をYYYYMMDD形式の文字列にする

▼日付データをYYYYMMDD形式の文字列にするユーザー定義関数 Function YYYYMMDD(日付 As Date) As Variant If 日付 >= #3/1/1900# Then YYYYMMDD = Format(日付, "yyyymmdd") Else YYYYMMDD = CVErr(xlErrValue) End If End Functionネタ元 http://www.relief…

ExcelVBAで引数を文字列で受けて、日付/時間に変換して使う

マイナス1とか減算指定なら、今日の日付から引いて日付/時間にする例 Function FUNC(aDate As String,aTime As String) Dim dDate As Date Dim dTime As Date If IsDate(aDate) Then dDate = CDate(aDate) ElseIf CInt(aDate) <= 0 Then dDate = DateAdd("d"…

excelVBAで音を鳴らす

APIを使う Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Sub Sample2() Di…

ExcelVBAでマクロがたまに"実行時エラー 50290" で止まる場合の対処方法

WorksheetFunction.RTD()がうまくいく時とうまくいかない時があるExcelが忙しいらしいので、Application.Ready = Trueをチェックする。 'Excel のバージョンが 2002 以降の時 If Val(Application.Version) >= 10 Then 'アプリケーションの状態を確認し、準備…

ExcelのVBAマクロからIE操作:「オートメーションエラーです。 システムのシャットダウンは既にスケジュールされています。」対処法

何度も Nothing -> CreateObject しようとするとエラーになることがある。 Set oIE = Nothing での処理がすぐ完結しないときがあるようで、その後に実行される Set oIE = CreateObject("InternetExplorer.Application") のところでこのエラーが出るといった…