ExcelVBA

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

excelvbaで文字列をクリップボードにコピーしてから貼り付ける

DoEventsないと コケることある Dim buf As String, buf2 As String, CB As New DataObject buf = "tanaka" With CB .SetText buf ''変数のデータをDataObjectに格納する DoEvents .PutInClipboard ''DataObjectのデータをクリップボードに格納する DoEvents…

ExcelVBA アドインの関数を呼ぶ方法

Workbooks("アドインファイル名").Application.Run ("モジュールやシート名.関数やプロシジャ名") ネタ元 http://www.happy2-island.com/excelsmile/smile03/capter00712.shtml

Excelの参照設定で特定の項目をデフォルト環境オンにする方法

アドインとsite保存したモジュールでVBProject.References.AddFromGuidすればいいらしいが、Excelマクロのセキュリティで「VBAProjectプロジェクトへのアクセスを信頼する」をONにしないとエラーになる。自分で使う分にはいいが一般に広めるのに使うのは辛い…

ExcelVBAにてファイル保存ダイアログを使ってcsv/xlsで保存させる

拡張子をみて保存形式を切り替えてくれる Dim vntFileName As Variant 'ファイルを保存するダイアログを開きます vntFileName = _ Application.GetSaveAsFilename( _ InitialFileName:=ThisWorkbook.Name _ , FileFilter:="エクセルファイル(*.xls),*.xls" &…

ExcelVBAでIE操作 キャッシュ無効でNavigate

Flagsに4を指定 Const navNoReadFromCache = 4 ... objIE.Navigate "https://www.yahoo.co.jp", navNoReadFromCache なぜ4なのかはここの定義参照 typedef enum BrowserNavConstants { navOpenInNewWindow = 0x1, navNoHistory = 0x2, navNoReadFromCache = …

ExcelVBAで動いているExcelが32bitか64bitか判断する

#ifで Function GetExcelProcessBit() As String #If Win64 Then GetExcelProcessBit = "64" #Else GetExcelProcessBit = "32" #End If End Function

ExcelVBAで動いているWindowsが32bitか64bitか判断する

Function GetProcessBit() As String Dim colItems As Object Dim itm As Object Set colItems = CreateObject("WbemScripting.SWbemLocator").ConnectServer.ExecQuery("Select * From Win32_OperatingSystem") GetOSProcessBit = "32" For Each itm In col…

ExcelVBAでHTMLタグを外す

正規表現を使って簡単に Private Function cdataConv(str As String) As String Dim regEx As New RegExp regEx.Pattern = "<[^>]*>" regEx.Global = True cdataConv = regEx.Replace(str, "") End Function ネタ元 http://news.mynavi.jp/articles/2012/04/…

ExcelVBAのにはMAXが無いのでApplication.WorksheetFunction.Max()を使う

数式に使うMAXとMINのような関数が 当然、VBAの関数にもあると思っていました。 しかし実際にはありません。 最大と最小をVBAで求めるには、 ワークシート関数を使います。 ワークシート関数とは 数式に使うMAXとMINのような関数です。 すべてのワークシート…

ワークブックのカレントパスを知りたければActiveWorkbook.path

CurDir()だと、イマイチ思ったドライブのフォルダが取れないネタ元 http://stackoverflow.com/questions/19824164/how-to-get-current-working-directory-using-vba

VBAでIE操作 縦幅横幅指定

Height / Width というプロパティがあるので指定。 Dim IE As InternetExplorer Set IE = CreateObject("InternetExplorer.Application") With IE .Visible = True .Top = 200 .Left = 100 .Height = 400 .Width = 1000 .Resizable = False End Withネタ元 h…

セルの中の数字の部分だけを抽出

標準のVALUE()だと数字以外の文字が入っているとエラーになっちゃう。 オリジナルマクロにするのが楽みたい 'オリジナルValue() '最初の数字部分を返す '整数でいいなら As Integer でいいよ Function convValue(aArg) As Double Dim objRE As Object Dim st…

フォームのsubmitじゃなくて、画のボタンをクリックする

IMGタグ探してsrcが一定条件のもの見つけてClick Dim objImage For Each objImage In objIE.Document.getElementsByTagName("IMG") If InStr(objImage.src, "/pc/images/gm_home.gif") > 0 Then objImage.Click Exit For End If Next

エクセルシート内の全画像を削除

' シート内の全画像を削除 Sheets("シートA").Activate Dim pic For Each pic In ActiveSheet.Pictures pic.Delete Next

VBAでスクリーンキャプチャ(画面キャプチャ) API使ってファイルに保存版

鮮やかにキャプチャするモジュールが公開されていた。多謝!なくなると困るのでコピペ '****************************************************************************** '* 【参考元】 '* Microsoft Support '* 画面、フォーム、ウィンドウを取り込んで印…

IEの拡大率指定

.ExecWBメソッドで指定。.ExecWB メソッド では いろいろなコマンドを発行できるみたい。 Sub test2() Const OLECMDID_OPTICAL_ZOOM = 63 Const OLECMDEXECOPT_DODEFAULT = 0 Dim ObjIE As Object Dim ZoomRate As Variant ZoomRate = 70 '拡大率 Set ObjIE …

Excel VBAでIEを操作 最小化と最大化

ShowWindowを使う Dim ObjIE As Object '変数を定義 'Sleepを使用する場合のお約束 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'ShowWindowを使用する場合のお約束 Declare Function ShowWindow Lib "user32" (ByVal hwindow As Long…

VBAでスクリーンキャプチャ(画面キャプチャ) keybd_event版

keybd_eventというAPIを利用。ただOSからのイベントになるようなので、マクロが動いてる最中だとキーイベントが通らなくてキャプチャ失敗ということがよくある。DoEventsやSleepでごまかしながらやってみる必要あり。 Private Declare Sub keybd_event Lib "…

IE操作。特定文字のあるaタグをクリック

[ExcelVBA]InnerTEXTでaタグの内側のテキストをとれる On Error Resume Next Dim i For i = 0 To 9 If InStr(objIE_livestar.Document.Links(i).InnerTEXT, "項目3") <> 0 Then objIE.Document.Links(i).Click IE_Complete objIE '表示終わるまで待つ処理(オ…

IEのバージョンを調べる

[excelVBA] Dim IEA As Object Dim FSO As Object Set IEA = CreateObject("InternetExplorer.Application") Set FSO = CreateObject("Scripting.FileSystemObject") MsgBox "IEのバージョンは" & FSO.GetFileVersion(IEA.FullName) & "です。" Set FSO = No…

C#で作成したDLLをExcelVBAで利用するにはregsvr32じゃなくてRegAsm.exeを使う

.NET で作成した COM 対応コンポーネントのレジストリ登録には regasm.exe を利用する。 regasm.exe /codebase XXX.DLL regasm.exeにはパスが通ってないので、 C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exeとかで。ちなみにcodebaseというのは…

Excelのバージョン値

[excelvba]Excel Version Excel Versionプロパティの戻り値 Excel 2013 15.0 Excel 2010 14.0 Excel 2007 12.0 Excel 2003 11.0 Excel 2002 10.0 Excel 2000 9.0 Excel 97 8.0 Excel 95 7.0 Excel 5.0 5.0 ネタ元 http://unsolublesugar.com/20130120/144522/

HTMLソースをダウンロードする

[excelVBA] XMLHTTPオブジェクトで簡単に習得できる Sub Sample() Dim Http, buf As String Set Http = CreateObject("MSXML2.XMLHTTP") Http.Open "GET", "http://www.officetanaka.net/other/index.htm", False Http.Send buf = StrConv(Http.ResponseBody…

Excelのバージョン

[excelvba]VBAでこうやってExcelのバージョンがとれます。 Sub Sample1() MsgBox Application.Version End Sub Versionプロパティは、次の文字列を返します。 Excel 2010 → 14.0 Excel 2007 → 12.0 Excel 2003 → 11.0 Excel 2002 → 10.0 Excel 2000 → 9.0 Ex…