ExcelVBA

ExcelVBAで隣のセル参照

.Nextで右、.Previousで左。 ネタ元 http://www.moug.net/tech/exvba/0050161.html

ExcelVBA フォルダの確認 Dir(<path>,vbDirectory)

vbDirectoryつけ忘れると 中身がからっぽのフォルダだとエラーになる。 逆にファイルが一つでもあるとエラーにならない。紛らわしい仕様です。 ネタ元 https://vbabeginner.net/vba%E3%81%A7%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%AD%98%E5%9C%A8%E3%83%8…

ExcelVBAで連想配列

Scripting.Dictionary を使います。 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…

ExcelVBA Application.WorksheetFunctionで他ブックやシートを参照する方法

こんな感じ Workbooks("B.xls").Worksheets("sheet2").Range("A2")=Application.WorksheetFunction.Sum(Workbooks("A.xls").Worksheets("sheet1").Range("B2:B3")) ネタ元 http://yutechi.hatenablog.com/entry/2012/10/22/121430

ExcelVBA 条件に一致したセルのある行を検索

Match関数がいいらしい。 でも同じ条件の行があったら最初の行しか返してくれない見つからないと例外にあんるので on error resume next も欠かせない。 Sub match() Dim workSh, prefSh As Worksheet Set workSh = ThisWorkbook.Worksheets("Sheet1") Set p…

Excel VBAでシート全体をクリア

Sub test() Worksheets("Sheet1").Cells.Clear End Sub ネタ元 http://www.koikikukan.com/archives/2016/10/04-003333.php

ExcelVBA 新しいシートを挿入する

Sub Sample03() Worksheets.Add End Sub ネタ元 http://officetanaka.net/excel/vba/sheet/sheet03.htm

ExcelVBAでシートが存在するか調べる

力技 Sub Sample03() Dim ws As Worksheet, flag As Boolean For Each ws In Worksheets If ws.Name = "合計" Then flag = True Next ws If flag = True Then MsgBox "[合計]シートがあります", vbInformation Else MsgBox "[合計]シートはありません", vbIn…

ExcelVBA シートを削除する

Sheets(1).Delete ' 1 番目のシートを削除 Sheets("Sheet1").Delete '「Sheet1」のシートを削除 Worksheets(1).Delete ' 1 番目のシートを削除 Worksheets("Sheet1").Delete '「Sheet1」のシートを削除 ネタ元 https://www.tipsfound.com/vba/10005

ExcelVBAでシートに高速にCSVを読み込む

Dim ws As Worksheet Set ws = ActiveSheet ' CSV のデータを取り込むシート Dim qt As QueryTable Set qt = ws.QueryTables.Add(Connection:="TEXT;D:\Tips.csv", Destination:=ws.Range("A1")) ' CSV を開く With qt .TextFilePlatform = 932 ' 文字コード…

ExcelVBA フォームのコンボボックス初期化手順

_Initialize() で初期化する Private Sub UserForm_Initialize() 'コンボボックスに項目を追加 ComboBox1.AddItem "2009年1月" ComboBox1.AddItem "2009年2月" ComboBox1.AddItem "2009年3月" ComboBox1.AddItem "2009年4月" ComboBox1.AddItem "2009年5月" …

ExcelVBAでレジストリ操作

結構簡単書き込み SaveSetting "MyMacro", "Main", "Data", "123"読み込み GetSetting("MyMacro", "Main", "Data1") ネタ元 http://officetanaka.net/excel/vba/tips/tips43.htm

ExcelVBA CStr()とStr()は違う

0.2をStr()したら".2"となって頭のゼロがなくなった。 0.2をCStr()したら"0.2"だった。なにかミス?他にも以下の特徴があるらしい。 Str()は、符号の1桁分が必ず確保されていて、 数値が正の時の戻り値の頭にはスペース(空白)が入ります。 Cstr()は、プラ…

ExcelVBAのModは整数しか返さない

余りを計算するModは小数点はくれないそうです。10倍 100倍してから使うなど工夫が必要 ネタ元 https://oshiete.goo.ne.jp/qa/3456153.html

Excel VBAでUnix Timestamp(ミリ秒付き)を取得する

Option Explicit Private Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type Private Declare Sub GetSystemTime Lib…

ExcelVBAで小数計算の誤差対策としてCurrency(通貨)型にすると精度が上がる

万事解決というわけではないが おかしい数値になるケースが減る Dim d As Currency ネタ元 https://thom.hateblo.jp/entry/2015/07/04/232318

ExcelVBAでこの配列は固定されているか、または一時的にロックされています (エラー 10)

配列がトラブルことがあるみたい。goto使ってcontinue的な処理作るとなりやすい?はっきりと理由はわからないが、配列初期化する処理する前にgotoする処理移動したら治った。 ネタ元 https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/…

シートの保護

シートの保護しつつ以下は許可する設定 ・ロックされたセル範囲の選択 ・ロックされていないセル範囲の選択 ・セルの書式設定 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True ネタ元 http://of…

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…