読者です 読者をやめる 読者になる 読者になる

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") のところでこのエラーが出るといった…

ExcelVBAで配列の初期化するなら Arrayするっきゃない

こんな感じ。 Dim userAddress As Variant userAddress = Array("東京都", "北海道", "愛知県")ネタ元 http://www.officepro.jp/excelvba/array/index6.html

Assert するなら Debug.Assertメソッド

VBAにもあるのね。条件一致しなかったらブレークで止まってくれます。一般リリースするもので使うなら、テスト関数とか本番環境では呼ばれないところで使うこと。 ネタ元 http://note.phyllo.net/?eid=1106218

VBA/VBSでショートカットを作成する

Option Explicit Dim WSH,sc Set WSH=CreateObject("WScript.Shell") Set sc = WSH.CreateShortcut("C:\Documents and Settings\xxxx\デスクトップ\メモ帳.lnk") sc.TargetPath = "C:\WINDOWS\notepad.exe" sc.save Set sc = Nothing Set WSH = nothingネタ元…

ExcelVBAからexeを強制終了する

Shell("cmd.exe /c taskkill /F /IM excel.exe")ネタ元 http://oshiete.goo.ne.jp/qa/5490461.html

ExcelVBAでフォーム(ボタン)のあるセルの位置を取得

MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column ネタ元 http://oshiete.goo.ne.jp/qa/4129092.html

ExcelVBAでファイルの移動、ファイル名の変更、ファイルの削除

Name / Kill Option Explicit Private Const cnsSOUR = "C:\AAA\SAMPLE1.txt" ' 元ファイル Private Const cnsDEST = "C:\BBB\SAMPLE2.txt" ' 先ファイル ' ファイル移動のサンプル① Sub MOVE_SAMPLE1() ' ファイルを移動(この方法は同一ドライブのみ) Name …

ExcelVBAで特定のフォルダを開く

Sub Test() Dim myFol As String myFol = ThisWorkbook.Path & "¥hoge¥" Shell "C:¥Windows¥Explorer.exe " & myFol, vbNormalFocus End Subネタ元 http://hinekure.vba-soft.com/?eid=270237 すぐわかるExcelマクロ&VBAマネして使えるサンプル集 Excel 201…

ExcelVBAでいい感じに文字列を数値に変換する

Val()関数使うネタ元 http://www.geocities.jp/cbc_vbnet/function/mojireyu_function.html#val

EXCELVBAでフォルダーを選択してもらうサンプルマクロ

Sub ユーザーにフォルダーを選択してもらう() Dim dlg As FileDialog Dim fold_path As String Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 'キャンセルボタンクリック時にマクロを終了 If dlg.Show = False Then Exit Sub 'フォルダーの…

VBAで指定位置にCSV読み込み

参照の追加でMicrosoft Scripting Runtimeを追加すること 'X=列=aStartCols Y=行=aStartRows Sub CSV入力(aInputCsvPath, aStartCols, aStartRows) Dim varFileName As Variant Dim objFSO As New Scripting.FileSystemObject Dim inTS As TextStream Dim st…

VBAで指定のアプリ(*.exe)が立ち上がってるかのチェック

Win32_Process クラスを使う。 '指定のプロセスがいたらTrue いないならFalse Function CheckProcess(aExename) As Boolean 'WMIにて使用する各種オブジェクトを定義・生成する。 Dim oClassSet Dim oClass Dim oLocator Dim oService Dim sMesStr 'ローカル…

ExcelVBAでセルの折り返しOFF

折り返して全体を表示するを解除するVBAのコード Cells.WrapText = Falseネタ元 http://www.relief.jp/itnote/archives/excel-vba-off-wrap-text.php

excelvbaでファイルのダウンロード

URLDownloadToFile APIを使用してWebからファイルをダウンロードする方法 #If Win64 Then Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias _ "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long Private Declare Ptr…

ExcelVBAでモードレスな「お待ちください」メッセージの表示

フォームを作って vbModelessで表示 UserFormを強制表示させる効果があります。念のために書くおまじない。【標準モジュール】 Public flag As Boolean Sub Sample5() Dim TotalSize As Long, buf As String UserForm1.Show vbModeless UserForm1.Repaint fl…

フォームのXボタンを効かなくする

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/tips/tips18.htm

ワークブックの自動保存をしないようにする

10分毎に復帰用のファイルが作られるが、それを止める Private Sub Workbook_Open() ActiveWorkbook.EnableAutoRecover = False End Subネタ元 http://blog.livedoor.jp/katsuyausami/archives/52107517.html

ExcelVBAでJScript経由でJSONをデコード

消えると困るのでコピペ■ボタンクリック部分のコード Private Sub CommandButton1_Click() Dim obj As JSON Set obj = GetJSON("test.json") Do While obj.HasNext MsgBox obj.getValue("id") & ":" & obj.getValue("name") Loop End Sub ■ConnectModule '接…

excelvbaでレジストリ操作

書き込み SaveSetting appname, section, key, data読込 GetSetting(appname, section, key, default)ネタ元 http://officetanaka.net/excel/vba/tips/tips43.htm

ExcelVBAでWebページを取得する方法

3つあるInternetExplorerオブジェクト (WebBrowserコントロール) XMLHTTPオブジェクト HTMLDocumentオブジェクトどれでもけっきょくHTMLDocumentオブジェクトを取り出していろいろいじれる。ネタ元 http://so-zou.jp/software/tech/programming/vba/sample/…

ExcelVBAでカレンダー入力をする

意外なことにどのバージョンでもOKな標準コントロールがないみたい。以下で配布しているモジュールをインポートして使うといい感じ。 http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_020_025.html

ExcelVBAのユーザーフォームを「Esc」キーで閉じる CommandButtonの CancelプロパティをTrue

ESCキーを押した時にCancel=Trueのボタンを押したこととして処理するみたいネタ元 http://vba.doorblog.jp/archives/51316717.html

ExcelVBAのユーザーフォームでフォームの閉じ方

ダイアログを後でも出したり、情報を取得する用事があるならMe.Hide もう用事なしならUnload Me ネタ元 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_080.html

ExcelVBAで存在するIEオブジェクトを探して根こそぎQuitする

Public Sub ie_quit() Dim objShell Dim objWindow Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If TypeName(objWindow.Document) = "HTMLDocument" Then objWindow.Quit Sleep 100 End If Next Set objShell…

ExcelVBA・マクロを簡単に高速化する方法

VBA・マクロの先頭付近に次の3行を追加する : Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManualVBA・マクロの最後付近に次の3行を追加する : Application.ScreenUpdating = T…

Excelマクロ実行中にキーボード/マウスを受け付けなくする

Application.Interactive = False ネタ元 http://msdn.microsoft.com/ja-jp/library/office/ff841248%28v=office.15%29.aspx

ExcelVBAでファイル削除

Kill(pathname)ネタ元 http://www.openreference.org/articles/view/340

Excel:VBA:UTF-8/LFのファイルを読み込む

ADODB.Stream を使います。 Sub loadLogFile2(ByRef fileName As Variant) Dim rowNo As Integer Dim readString As String Dim st As Object Set st = CreateObject("ADODB.Stream") 'ADODB.Stream生成 st.Type = 2 'オブジェクトに保存するデータの種類を…

ExcelVBAでコントロールキーを押されているかチェック

#If Win64 Then Private Declare PtrSafe Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long #Else Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long #End If ... If 0 <> GetAsyncKeySta…

定番のVBA関数でコンパイルエラーが出たときの対処法

参照不可のライブラリができてる可能性アリ。チェックしてみよう ネタ元 http://www.moug.net/tech/exvba/0150128.html