ExcelVBA

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 20…

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…