- 追加された行はこの色です。
- 削除された行はこの色です。
→言語・開発環境
→ExcelのVBA
→PowerShell他
#contents
*関連ニュース [#t5ba906d]
-[[Visual Basic 6.0の100%互換性 TwinBASICの紹介 - Qiita>https://qiita.com/yaju/items/6ed4a4c3fcd7b0c24cab]] 2021.12
-[[Windows 11はVB6.0アプリのサポートを継続するか - Qiita>https://qiita.com/yaju/items/1ba0fd5466230c963052]] 2021.6
--[[Support Statement for Visual Basic 6.0 | Microsoft Docs>https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy]] 2021.11
-[[Rubberduck>https://github.com/rubberduck-vba/Rubberduck]]
--Rubberduck is a COM add-in for the VBA IDE (VBE).
-[[物言わぬ多数派: Visual Basic 6 が今でも成功している理由>http://msdn.microsoft.com/ja-jp/magazine/jj133828.aspx]] 2012.7.13
-[[VB6アプリをVistaで動かすための基礎知識>http://www.atmarkit.co.jp/fdotnet/vblab/vb6onvista_01/vb6onvista_01_01.html]] 2008.1.8
-[[Visual Basicの200X年問題>http://itpro.nikkeibp.co.jp/article/COLUMN/20070807/279201/?L=rss]] 2007.8.10
--2005年:VBメインストリームサポート終了
--2008年:VB延長サポート終了 ←VB6での開発がサポートなしの状態になる
--2009年:WindowsXPのメインストリームサポート終了
--2010年:Windows 2003 Serverメインストリームサポート終了
--2014年:WindowsXPの延長サポート終了
--2015年:Windows 2003 Server延長サポート終了
--2018年頃:Vista/Server 2008の延長サポート終了 ←VB6アプリが本当に使えなくなるのはココ
-[[開発者によるVBの利用が急減>http://itpro.nikkeibp.co.jp/article/USNEWS/20061129/255223/]] 2006.11.29
--北米の開発者430人以上を対象に調査を実施したこところ,昨年の春と比べVisual Basic系を使用する開発者が35%減少したという。
--Visual Basic 6.0以前のユーザーが減少しているほか,Visual Basic .NETを使用する開発者も26%減少した。
--現在,最も利用率が高いのはJava(45%)で,以下C/C++(40%)とC#(32%)が続く。
*ファイルの存在確認 [#g54e043e]
-参照:http://atomsware.co.jp/cima/archives/2005/09/vb_1.html
Private Function FileExist(sFileName As Variant) As Boolean
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
FileExist = fso.FileExists(sFileName)
Set fso = Nothing
End Function
--Microsoft Scripting Runtime (scrrun.dll)を参照するとよい
*フルパスの文字列からファイル名とパスを別々に切り出す [#h83212dc]
-参照で Microsoft Scripting Runtime を参照する
Dim fso As FileSystemObject
Set fso = New FileSystemObject
fnam = fso.GetFileName(fullpath)
path = fso.GetParentFolderName(fullpath)
*VBでハッシュテーブル [#lceac96c]
-http://ziomatrix18.blog68.fc2.com/blog-entry-502.html
-参照設定で「Microsoft Scripting Runtime」にチェックを入れる。
Dim hash As Scripting.Dictionary
Set hash = New Scripting.Dictionary
If hash.Exists("Key1") Then
hash.Item("Key1") = "Item1"
Else
hash.Add "Key1", "Item1"
End If
MsgBox hash.Item("Key1")
hash.RemoveAll
Set hash = Nothing
-注意点:このハッシュテーブルにはなんでも入れられるわけではない。例えば構造体の配列などはセットできない
*文字列操作 [#fc157d87]
-[[VBの文字列操作>http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k06.htm]]
chr キャラクタコードの文字を返す
asc 文字のキャラクタコードを返す
str 数値を文字列に変換
val 文字列を数値に変換
space n 個の空白を生成
string 特定文字を n 個生成
trim 左右の全角半角空白を削除
ltrim 左側の全角半角空白を削除
rtrim 右側の全角半角空白を削除
lcase 小文字に変換
ucase 大文字に変換
left 左側より n 個の文字列を切り出し
mid n 番目から n 個の文字列を切り出し
mid ステートメントして使用すると文字列を置き換える
right 右側より n 個の文字列を切り出し
len 何文字あるか数える
instr 指定文字列が何番目から存在するか調べる
format 書式指定変換をする
now format と組み合わせて、today などを生成する
*配列のソート [#q7f7424e]
-http://www.geocities.co.jp/SilkRoad/4511/vb/strsort.htm
-VBには簡単なソートの仕組みは用意されてないので自分でソートアルゴリズムを実装する必要がある
Public Sub StrSort _
(ByRef strArray() As String, _
ByVal lngStart As Long, _
ByVal lngEnd As Long, _
Optional ByVal lngCompare As Long)
Dim lngBaseNumber As Long '中央の要素番号を格納する変数
Dim strBaseValue As String '基準値を格納する変数
Dim lngCounter As Long '格納位置カウンタ
Dim strBuffer As String '値をスワップするための作業域
Dim i As Long 'ループカウンタ
If lngStart >= lngEnd Then Exit Sub '終了番号が開始番号以下の場合、プロシージャを抜ける
lngBaseNumber = (lngStart + lngEnd) \ 2 '中央の要素番号を求める
strBaseValue = strArray(lngBaseNumber) '中央の値を基準値とする
strArray(lngBaseNumber) = strArray(lngStart) '中央の要素に開始番号の値を格納
lngCounter = lngStart '格納位置カウンタを開始番号と同じにする
For i = (lngStart + 1) To lngEnd Step 1 '開始番号の次の要素から終了番号までループ
If StrComp(strArray(i), strBaseValue, lngCompare) = -1 Then '値が基準値より小さい場合
lngCounter = lngCounter + 1 '格納位置カウンタをインクリメント
strBuffer = strArray(lngCounter) 'strArray(i) と strArray(lngCounter) の値をスワップ
strArray(lngCounter) = strArray(i)
strArray(i) = strBuffer
End If
Next i
strArray(lngStart) = strArray(lngCounter) 'strArray(lngCounter) を開始番号の値にする
strArray(lngCounter) = strBaseValue '基準値を strArray(lngCounter) に格納
Call StrSort(strArray(), lngStart, lngCounter - 1) '分割された配列をクイックソート(再帰)
Call StrSort(strArray(), lngCounter + 1, lngEnd) '分割された配列をクイックソート(再帰)
End Sub
*指定フォルダ内のファイル名列挙 [#k3d3b362]
'ファイル名列挙
Dim Path As String
Path = folder & "\" & "*.*"
Dim fname As String
fname = Dir(path)
Dim fnames() As String
Dim i As Integer
i = 0
Do While fname <> ""
ReDim Preserve fnames(i)
fnames(i) = fname
i = i + 1
fname = Dir()
Loop
*他プロセスの同期的実行 [#k8360c9f]
-参考:http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html#exec
Option Explicit
'プロセス処理用の宣言とか
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Const SYNCHRONIZE As Long = &H100000
Public Const PROCESS_QUERY_INFORMATION As Long = &H400
Public Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Public Const PROCESS_ALL_ACCESS As Long = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Public Const NORMAL_PRIORITY_CLASS = &H20
Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" ( _
ByVal lpApplicationName As String, ByVal lpCommandLine As String, _
lpProcessAttributes As Any, lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
lpEnvironment As Any, ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Public Function Execute(cmd As String) As Integer
Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim lngRet As Long
Dim ecode As Long
sInfo.cb = LenB(sInfo)
lngRet = CreateProcess(vbNullString, _
cmd, _
ByVal 0&, _
ByVal 0&, _
1&, _
NORMAL_PRIORITY_CLASS, _
ByVal 0&, _
vbNullString, _
sInfo, _
pInfo)
WaitForSingleObject pInfo.hProcess, 100000
GetExitCodeProcess pInfo.hProcess, ecode ' 終了コード取得
CloseHandle pInfo.hThread ' スレッドハンドルを閉じる
CloseHandle pInfo.hProcess ' プロセスハンドルを閉じる
End Function
*コントロールのフォントの異常? [#i593e55b]
-文字をMS Pゴシック サイズ9で作成したコントロールがExeにすると使用環境によって文字化けします
--(パソコンにログインだとOKだけど、ドメインでログインでアウトみたいな…)
-で、その状態でソースをいじるとWindowsまで落ちます
-対処方法は、MS UIゴシックに変更したら治りました
-(しかし本当にこんな基本的なバグがあるのか?何らかの特定環境だけでは?)
*Round関数は四捨五入ではない [#vbd313f6]
-http://code.nanigac.com/source/view/74
VB6において、丸め関数は"INT","FIX","ROUND"があります。
このうち、"ROUND"は「最も近い偶数に丸める」という四捨五入であり、
一般的なものとは違います(よく嵌るワナ)。
多くの Round() 関数の挙動もこの IEEE 754 に則った「偶数丸め」です。
*VistaでのVB6対応 [#w23ef853]
-Vista でもVB6ランタイムは、提供される。
-また、IDEも動作させることができる(ようにする)。
-ただし、MSDEは未サポート。
-そのため、MSDEで実行しているアプリケーションは、SQL Server 2005 Expressに移行する必要がある。
*VBからVB.NETへの移行 [#c7a7db2b]
-[[VB6業務アプリはいつまで使えるの?:http://www.atmarkit.co.jp/fdotnet/vblab/opensemi_01/opensemi_01_01.html]] 2006.8.30
-[[Upgrading Visual Basic 6.0 Applications to Visual Basic .NET and Visual Basic 2005:http://www.microsoft.com/downloads/details.aspx?FamilyID=3D99C39F-4E9A-4F45-A4C5-6C76ADFAB6FC&DisplayLang=ja]]
-[[VB6->VB.NETへの移行にかかる工数の見積もりツール:http://www.microsoft.com/downloads/details.aspx?FamilyId=10C491A2-FC67-4509-BC10-60C5C039A272&displaylang=en]]
*特殊なディレクトリの取得 [#v0e21937]
-My Documents やデスクトップなど、特殊フォルダの物理的フルパスを取得するための関数です。
-Windows2000 などでは、ユーザー毎にシステムフォルダのパスが異なったりするので、
-勝手に "C:\My Documents" などと決めず、この関数を用いて取得しましょう。
-なお、Windows フォルダや System フォルダを取得したい場合はこちらを参照してください。
-標準モジュールに記述します。
Option Explicit
OS が管理する特殊フォルダのItemIDListのポインタを取得する
Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" _
(ByVal hwndOwner As Long, ByVal nFolder As Long, ppidl As Long) As Long
ItemIDList のポインタからフォルダの名前を取得する
Private Declare Function SHGetPathFromIDList Lib "Shell32" _
(ByVal pidl As Long, ByVal pszPath As String) As Long
タスクメモリブロックを解放する
Private Declare Sub CoTaskMemFree Lib "Ole32" (ByVal pv As Long)
ID の値
Public Enum IDL_LIST
CSIDL_DESKTOP = &H0 '\デスクトップフォルダ
CSIDL_PROGRAMS = &H2 '\プログラムグループ
CSIDL_PERSONAL = &H5 '\My Doucutents
CSIDL_FAVORITES = &H6 '\お気に入り
CSIDL_STARTUP = &H7 '\スタートアップ
CSIDL_RECENT = &H8 '\最近使ったファイル
CSIDL_SENDTO = &H9 '\送る
CSIDL_STARTMENU = &HB '\スタートメニュー
CSIDL_DESKTOPDIRECTORY = &H10 '\デスクトップディレクトリ
CSIDL_NETHOOD = &H13 '\NetHood
CSIDL_FONTS = &H14 '\フォント
CSIDL_TEMPLATES = &H15 '\テンプレート
CSIDL_COMMON_STARTMENU = &H16 '\All User スタートメニュー
CSIDL_COMMON_PROGRAMS = &H17 '\All User プログラムグループ
CSIDL_COMMON_STARTUP = &H18 '\All User スタートアップ
CSIDL_COMMON_DESKTOPDIRECTORY = &H19 '\All User デスクトップ
CSIDL_APPDATA = &H1A '\アプリ定義データ用共通フォルダ
CSIDL_PRINTHOOD = &H1B '\プリンタリンク
CSIDL_COMMON_FAVORITES = &H1F '\All User お気に入り
CSIDL_INTERNET_CACHE = &H20 '\IEのキャッシュ
CSIDL_COOKIES = &H21 '\クッキー用フォルダ
CSIDL_HISTORY = &H22 '\IEの履歴
CSIDL_INTERNET = &H1 'Virtual folder representing the Internet.
CSIDL_CONTROLS = &H3 'Virtual folder containing icons for the Control Panel applications.
CSIDL_PRINTERS = &H4 'Virtual folder containing installed printers.
CSIDL_BITBUCKET = &HA 'Virtual folder containing the objects in the user's Recycle Bin.
CSIDL_DRIVES = &H11 'My Computer - virtual folder containing everything on the local computer:
'storage devices, printers, and Control Panel.
'The folder may also contain mapped network drives.
CSIDL_NETWORK = &H12 'Network Neighborhood - virtual folder representing
'the root of the network namespace hierarchy.
CSIDL_ALTSTARTUP = &H1D 'File system directory that corresponds to the user's nonlocalized Startup program group.
CSIDL_COMMON_ALTSTARTUP = &H1E 'File system directory that corresponds to the nonlocalized Startup program group
'for all users. Valid only for Windows NT(R) systems.
End Enum
Private Const MAX_PATH = 260
Public Function GetSPFolderPath(ItemID As IDL_LIST) As String
'機能
' 特殊フォルダのフルパスを取得します
'引数
' ItemID : 特殊フォルダを表す ID (インテリセンスが機能します)
'戻り値
' 特殊フォルダのフルパス名(文字列)
Dim lngRet As Long 'API からの戻り値
Dim pidlFolder As Long 'ItemIDList のポインタ ( pidl )
Dim strBuf As String '文字列を受け取るバッファ
'pidl 取得
lngRet = SHGetSpecialFolderLocation(0, ItemID, pidlFolder)
If lngRet >= 0 Then
'文字列のバッファ確保
strBuf = String$(MAX_PATH, vbNullChar)
'pidl からフルパス取得
If SHGetPathFromIDList(pidlFolder, strBuf) <> 0 Then
'余った部分の不要なヌル文字を除去
strBuf = Left$(strBuf, InStr(strBuf, vbNullChar) - 1)
Else
'取得に失敗した場合は空文字を返す
strBuf = ""
End If
'後始末
CoTaskMemFree pidlFolder
GetSPFolderPath = strBuf
End If
End Function
-実行例:
--イミディエイトウィンドウでの実行例です。
?GetSPFolderPath(CSIDL_PERSONAL)
C:\Documents and Settings\lionel\My Documents
*Format関数で西暦→和暦に変換するには [#rf350a2f]
-Format("20060101", "GGGEE") のようにする
*Format関数の日付/時刻表示書式指定文字 [#vbbcbadb]
|記号|意味|h
|(:)|時刻の区切り記号です。オペレーティング システムの国別情報の設定によっては、時刻の区切り記号として他の記号が使用されることがあります。時刻を時間、分、および秒で区切ることができます。変換後の時刻の区切り記号は、コントロール パネルの設定によって決まります。 |
|(/)|日付の区切り記号です。オペレーティング システムの国別情報の設定によっては、他の記号が使用されることがあります。日付を年、月、および日で区切ることができます。変換後の区切り記号は、コントロール パネルの設定によって決まります。 |
|c|ddddd および t t t t t の書式で表した日付と時刻を、日付、時刻の順序で返します。指定された値に小数部がない場合は日付のみ、整数部がない場合は時刻のみを表す文字列を返します。 |
|d|日付を返します。1 桁の場合、先頭に 0 が付きません (1 〜 31)。 |
|dd|日付を返します。1 桁の場合、先頭に 0 が付きます (01 〜 31)。 |
|ddd|曜日を英語 (省略形) で返します (Sun 〜 Sat)。 |
|aaa|曜日を日本語 (省略形) で返します (日〜土)。 |
|dddd|曜日を英語で返します (Sunday 〜 Saturday)。 |
|aaaa|曜日を日本語で返します (日曜日〜土曜日)。 |
|ddddd|年、月、日を含む短い形式 (コントロール パネルで設定) で表した日付を返します。既定の短い日付形式は、m/d/yy です。 |
|dddddd|年、月、日を含む長い形式 (コントロール パネルで設定) で表した日付を返します。既定の長い日付形式は mmmm dd, yyyy です。 |
|w|曜日を表す数値を返します (日曜日が 1、土曜日が 7 となります)。 |
|ww|その日が一年のうちで何週目に当たるかを表す数値を返します (1 〜 54)。 |
|m|月を表す数値を返します。1 桁の場合、先頭に 0 が付きません (1 〜 12)。ただし、h や hh の直後に m を指定した場合、月ではなく分と解釈されます。 |
|mm|月を表す数値を返します。1 桁の場合、先頭に 0 が付きます (01 〜 12)。ただし、h や hh の直後に mm を指定した場合、月ではなく分と解釈されます。 |
|mmm|月の名前を英語 (省略形) の文字列に変換して返します (Jan 〜 Dec)。 |
|mmmm|月の名前を英語で返します (January 〜 December)。 |
|oooo|月の名前を日本語で返します (1 月 〜 12 月)。 |
|q|1 年のうちで何番目の四半期に当たるかを表す数値を返します (1 〜 4)。 |
|g|年号の頭文字を返します (M、T、S、H)。 |
|gg|年号の先頭の 1 文字を漢字で返します (明、大、昭、平)。 |
|ggg|年号を返します (明治、大正、昭和、平成)。 |
|e|年号に基づく和暦の年を返します。1 桁の場合、先頭に 0 が付きません。 |
|ee|年号に基づく和暦の年を 2 桁の数値を使って返します。1 桁の場合、先頭に 0 が付きます。 |
|y|1 年のうちで何日目に当たるかを数値で返します (1 〜 366)。 |
|yy|西暦の年を下 2 桁の数値で返します (00 〜 99)。 |
|yyyy|西暦の年を 4 桁の数値で返します (100 〜 9999)。 |
|h|時間を返します。1 桁の場合、先頭に 0 が付きません (0 〜 23)。 |
|hh|時間を返します。1 桁の場合、先頭に 0 が付きます (00 〜 23)。 |
|n|分を返します。1 桁の場合、先頭に 0 が付きません (0 〜 59)。 |
|nn|分を返します。1 桁の場合、先頭に 0 が付きます (00 〜 59)。 |
|s|秒を返します。1 桁の場合、先頭に 0 が付きません (0 〜 59)。 |
|ss|秒を返します。1 桁の場合、先頭に 0 が付きます (00 〜 59)。 |
|t|t t t t コントロール パネルで設定されている形式で時刻を返します。先頭に 0 を付けるオプションが選択されていて、時刻が午前または午後 10 時以前の場合、先頭に 0 が付きます。既定の形式は、h:mm:ss です。 |
|AM/PM|時刻が正午以前の場合は大文字で AM を返し、正午〜午後 11 時 59 分の間は大文字で PM を返します。 |
|am/pm|時刻が正午以前の場合は小文字で am を返し、正午〜午後 11 時 59 分の間は小文字で pm を返します。 |
|A/P|時刻が正午以前の場合は大文字で A を返し、正午〜午後 11 時 59 分の間は大文字で P を返します。 |
|a/p|時刻が正午以前の場合は小文字で a を返し、正午〜午後 11 時 59 分の間は小文字で p を返します。 |
|AMPM|"12 時間制" が選択されていて、時刻が正午以前の場合は午前を表すリテラル文字列を、正午〜午後 11 時 59 分の間は午後を表すリテラル文字列を返します。これらの文字列の設定および "12 時間制" の選択は、コントロール パネルで行います。AMPM は大文字、小文字のどちらでも指定できます。既定の形式は、AM/PM です。 |
*VBでの構造体の書き方 [#k78a39ef]
-最近VB使ってないので意外と忘れてしまうためメモ
Public Type Character
Name As String
Hp As Byte
Mp As Byte
Level As Byte
Exp As Byte
Gold As Byte
End Type
*VBでフォームの表示とクローズ [#u63506ef]
-しばらく使ってないとこんな基本も忘れてしまう…
-表示は
Dim f As New XxxForm
f.Show(vbModal)
-Closeは
Call Unload(Me)
Callをつけないと引数が値渡しとみなされてエラーになるので注意
*VBの割り算での注意点 [#r451b29e]
-VBでは割り算の演算子は / と \ の2種類ある。/の場合、Integerなどの整数を割り算しても結果の少数以下の値は四捨五入になる。C言語と同じつもりで使っていると意外とこれに気づかずハマる。切り捨てて欲しいときは/ではなく\を使うか、もしくはint(a/b)などとする。
-ExcelのVBAでの検証プログラム↓これだとa=128以後はbの値が切り上げられて1になる
Sub test()
Dim a As Integer
Dim b As Integer
For a = 1 To 256
b = a / 256
ActiveSheet.Cells(a, 1) = b
ActiveSheet.Cells(a, 1).Select
DoEvents
Next
End Sub
-参考:http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=30147&forum=7
*VBで基数変換 [#y7a0918a]
-http://oshiete.goo.ne.jp/qa/872647.html
10進->16進
strTMP$ = Hex(intTMP$)
16進->10進
intTMP$= Val("&H" & "16進文字列")
*VBで正規表現 [#ve02bdf8]
-[[Microsoft Visual Basic 6.0 で正規表現を使用する方法>http://support.microsoft.com/kb/818802/ja]] 2014.4.9
[プロジェクト] メニューの [参照設定] をクリックします。
[Microsoft VBScript Regular Expressions 5.5] をダブルクリックし、[OK] をクリックします。
ツールボックスの [CommandButton] をダブルクリックします。
デフォルトで Command1 がフォームに追加されます。
[Command1] をダブルクリックして、コード ウィンドウを開きます。
次のコードを Command1_Click イベント ハンドラに貼り付けます。
MsgBox(TestRegExp("is.", "IS1 is2 IS3 is4"))
注 : この例では、「is.」というパターンが「IS1 is2 IS3 is4」という文字列内にある
かどうかが判定されます。特殊文字の ピリオド (.) はワイルドカード文字として
使用できるため、任意の 1 文字と一致し、検索パターンと一緒に表示されます。
ピリオド (.) を 2 つ検索パターンに追加した場合は、任意の 2 文字が表示されます。
ピリオド (.) を使用しない場合は、 検索パターンのみが表示されます。
次の関数を Command1_Click イベン ト ハンドラの後に追加します。
Function TestRegExp(myPattern As String, myString As String)
'Create objects.
Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatches As MatchCollection
Dim RetStr As String
' Create a regular expression object.
Set objRegExp = New RegExp
'Set the pattern by using the Pattern property.
objRegExp.Pattern = myPattern
' Set Case Insensitivity.
objRegExp.IgnoreCase = True
'Set global applicability.
objRegExp.Global = True
'Test whether the String can be compared.
If (objRegExp.Test(myString) = True) Then
'Get the matches.
Set colMatches = objRegExp.Execute(myString) ' Execute search.
For Each objMatch In colMatches ' Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & objMatch.FirstIndex & ". Match Value is '"
RetStr = RetStr & objMatch.Value & "'." & vbCrLf
Next
Else
RetStr = "String Matching Failed"
End If
TestRegExp = RetStr
End Function
[実行] メニューの [開始] をクリックして、アプリケーションを実行します。
[Command1] をクリックします。