ExcelVBA

ExcelVBAにてXMLHTTPRequestで上手くいかない場合はWinHttpRequestを使用しよう

ネタ元 https://www.ka-net.org/blog/?p=4855

ExcelVBAで現在の時間を数値で取得

時間判定用 Dim nowHHMM nowHHMM = CInt(Format(Now(), "hhmm")) ネタ元 https://vbabeginner.net/vba%E3%81%A7%E7%8F%BE%E5%9C%A8%E6%97%A5%E4%BB%98%E3%81%A8%E7%8F%BE%E5%9C%A8%E6%99%82%E5%88%BB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%EF%BC%88…

ExcelVBAで レジストリの値の名前と種類を列挙する

レジストリの指定パス内にある名前と種類を列挙するWMIというのを使う Option Explicit 'WMIにて使用する各種オブジェクトを定義・生成する。 Dim oClass Dim oLocator Dim oService Dim oRegName Dim oRegType Dim i Dim sMesStr Dim sTypeStr Const HKEY_L…

ファイルを一行ずつ読み込むLine InputはCR+LFじゃないと一行判定できない

LFだけだと全部一気に読み込まれちゃうSplit()使ってLFで分解するとかしましょう。 'CSVファイルの取り込み LFコードでスプリット→カンマでスプリットするパターン Sub getCSV2() Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets(1) Dim strPath As S…

ExcelVBAでクリップボード扱う PutInClipboard がうまくいかないことがある

色々やってみたけど原因不明。クリップボードを扱うアプリ入れてたりするとなりやすいかも?ダメだったときは素直に諦めたほうが良さそう。 ネタ元 https://byte.sakura.ne.jp/code/vbaexcel%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8…

応答が停止してしまったExcelのVBAを確実に中断させる

ESCを押したままタスクバーでExcel・VBE・他のウィンドウをランダムにクリック ネタ元 https://kotori-chunchun.hatenablog.com/entry/2019/01/13/010851

ExcelVBAでキャンセルボタン付き、プログレスバーフォームを表示する

キャンセルボタン&プログレスバー付きのフォーム作って UserForm1.Show vbModeless とモードレスで表示。 あとはボタン押された時にフラグ立てるとかでキャンセル処理を実装する。 ネタ元 http://kowaza.withinit.com/vba/vba_ProgressBarForm.html

ExcelVBAでブックを閉じる時の処理はWorkbook_BeforeCloseかAuo_Closeに書く

Workbook_BeforeClose は VBEの「Microsoft Excel Objects」内の「ThisWorkbook」に記述します。Auo_Close は 標準モジュールに記述します。 Workbook_BeforeClose ↓ Auto_Close この順序で実行されるのでWorkbook_BeforeCloseが先に起動されます。 使い方と…

vbaのFor Each~Nextループ逆順はないので For~Nextループのstep -1使うっきゃない

Sub ForNextループを逆から回すサンプル() Dim i as Long For i = Sheets.Count to 1 Step -1 Debug.Print Sheets(i).Name Next i End Sub ネタ元 https://www.relief.jp/docs/excel-vba-looping-reverse-for-each-next.html

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…