ExcelVBA

excelvbaでArray()に引数で配列を渡すと2次元配列になる

Dim items() As Variant ... '2次元配列になっちゃうので1次元配列にする t100_array = Array(items) t100_array = t100_array(0)

excel VBAで今日の日付をyyyymmdd形式で取得する

Format(Date, "yyyymmdd") ネタ元 https://www.relief.jp/docs/excel-vba-today-yyyymmdd.html

excelvbaにてVBA-JSONを利用したjsonのパース&読み込み例

こういうデータの場合 { "20191031":[ 1605,1878,1925,1928,2502,2503,2802,2914,3382,3402, 3407,4063,4188,4452,4502,4503,4507,4519,4523,4528, 4543,4568,4578,4661,4901,4911,5020,5108,5401,5713, 5802,6098,6178,6273,6301,6326,6367,6501,6503,6594,…

excel vba でファイルを一気に読み込む

Dim fso As FileSystemObject Set fso = New FileSystemObject ' インスタンス化 Dim f As file Set f = fso.GetFile("c:\hoge.json") ' ファイルを取得 Dim JsonText As String JsonText = f.OpenAsTextStream.ReadAll ネタ元 http://officetanaka.net/exce…

ExcelVBAのフォームのxボタンで閉じなくさせる方法

QueryCloseイベントを捕まえる Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then MsgBox "[×]ボタンでは閉じられません。", 48 Cancel = True End If End Sub ネタ元 http://officetanaka.net/excel/vba/ti…

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