Function LogN(x, n) As Double
'**********************************************
'組み込み関数から対数を求める
'**********************************************
LogN = Log(x) / Log(n)
End Function
Function HSin(x) As Double
'**********************************************
'双曲線サイン Hyperbola-Sine を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
HSin = (Exp(x) - Exp(-x)) / 2
End Function
Function HCos(x) As Double
'**********************************************
'双曲線コサイン Hyperbola-Cosine を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
HCos = (Exp(x) + Exp(-x)) / 2
End Function
Function HTan(x) As Double
'**********************************************
'双曲線タンジェント Hyperbola-Tangent を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
HTan = (Exp(x) - Exp(-x)) / (Exp(x) + Exp(-x))
End Function
Private Sub test1()
Debug.Print 4 * HTan(1)
End Sub
Function HSec(x) As Double
'*****************************************************
'双曲線セカント Hyperbola-Secant を求める
'*****************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HSec = 2 / (Exp(x) + Exp(-x))
End Function
Function HCosec(x) As Double
'*****************************************************
'双曲線コセカント Hyperbola-Cosecant を求める
'*****************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HCosec = 2 / (Exp(x) - Exp(-x))
End Function
Function HCotan(x) As Double
'*****************************************************
'双曲線コタンジェント Hyperbola-Cotangent を求める
'*****************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HCotan = (Exp(x) + Exp(-x)) / (Exp(x) - Exp(-x))
End Function
Private Sub test1()
Debug.Print 4 * HCotan(1)
End Sub
Function HArcsec(x) As Double
'**************************************************************
'双曲線アークセカント Hyperbola-Arc-Secant を求める
'**************************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArcsec = Log((Sqr(-x * x + 1) + 1) / x)
End Function
Function HArccosec(x) As Double
'**************************************************************
'双曲線アークコセカント Hyperbola-Arc-Cosecant を求める
'**************************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArccosec = Log((Sgn(x) * Sqr(x * x + 1) + 1) / x)
End Function
Function HArccotan(x) As Double
'**************************************************************
'双曲線アークコタンジェント Hyperbola-Arc-Cotangent を求める
'**************************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArccotan = Log((x + 1) / (x - 1)) / 2
End Function
Option Explicit
'組み込み関数から三角関数-セカント-コセカント-コタンジェントを求める
'SecCosecCotan
Function Sec(x) As Double
'*********************************
'セカント Secant を求める
'*********************************
'三角関数 Trigonometric Function
'返値はラジアン
Sec = 1 / Cos(x)
End Function
Function Cosec(x) As Double
'*********************************
'コセカント Cosecant を求める
'*********************************
'三角関数 Trigonometric Function
'返値はラジアン
Cosec = 1 / Sin(x)
End Function
Function Cotan(x) As Double
'*********************************
'コタンジェント Cotangent を求める
'*********************************
'三角関数 Trigonometric Function
'返値はラジアン
Cotan = 1 / Tan(x)
End Function
Function HArcsin(x) As Double
'********************************************************
'双曲線アークサイン Hyperbola-Arc-Sine を求める
'********************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArcsin = Log(x + Sqr(x * x + 1))
End Function
Function HArccos(x) As Double
'********************************************************
'双曲線アークコサイン Hyperbola-Arc-Cosine を求める
'********************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArccos = Log(x + Sqr(x * x - 1))
End Function
Function HArctan(x) As Double
'********************************************************
'双曲線アークタンジェント Hyperbola-Arc-Tangent を求める
'********************************************************
'三角関数 Trigonometric Function
'返値はラジアン
HArctan = Log((1 + x) / (1 - x)) / 2
End Function
Option Explicit
Function FileDate(PathName As String) As String
'********************************
'指定したファイルの作成日を返す
'********************************
'返り値はString型
'日付だけを"yyyy/mm/dd"形式で返す
'エラー時は"yyyy/mm/dd"を返す
Dim GetDate As String
On Error GoTo MyERR:
GetDate = FileDateTime(PathName)
Function Arcsin(x) As Double
'***************************************
'アークサイン Arc-Sine を求める
'***************************************
'三角関数 Trigonometric Function
'返値はラジアン
Arcsin = Atn(x / Sqr(-x * x + 1))
End Function
Function Arccos(x) As Double
'***************************************
'アークコサイン Arc-Cosine を求める
'***************************************
'三角関数 Trigonometric Function
'返値はラジアン
Arccos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function
Function Arctan(x) As Double
'***************************************
'アークタンジェント Arc-Tangent を求める
'***************************************
'三角関数 Trigonometric Function
'返値はラジアン
'※アークタンジェントはVB関数に存在します。
Arctan = Atn(x)
End Function
Private Sub test1()
Debug.Print 4 * Arctan(1)
'3.14159265358979
End Sub
Atn 関数
指定した数値のアークタンジェントを倍精度浮動小数点数型 (Double) で返します。
構文
Atn (Number)
引数 number は必ず指定します。
引数 number には、倍精度浮動小数点数型 (Double) の数値または任意の数式を指定します。
Function Arcsec(x) As Double
'**********************************************
'アークセカント Arc-Secant を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
Arcsec = Atn(x / Sqr(x * x - 1)) + Sgn((x) - 1) * (2 * Atn(1))
End Function
Function Arccosec(x) As Double
'**********************************************
'アークコセカント Arc-Cosecant を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
Arccosec = Atn(x / Sqr(x * x - 1)) + (Sgn(x) - 1) * (2 * Atn(1))
End Function
Function Arccotan(x) As Double
'**********************************************
'アークコタンジェント Arc-Cotangent を求める
'**********************************************
'三角関数 Trigonometric Function
'返値はラジアン
Arccotan = Atn(x) + 2 * Atn(1)
End Function
Private Sub test1()
Debug.Print 4 * Arccotan(1)
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgYZ_DegreeX(ByVal y As Double, ByVal z As Double _
, ByRef Dgr As Double, ByRef x As Double)
'************************************************
'逆三角関数-正弦yと正接zから角度と余弦xを算出する
'************************************************
'引数 y:正弦 123.456cmなど
'引数 z:正接 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
'縦位置(Y座標・正弦)÷斜位置(Z座標・正接)=Sine(サイン・正弦)
Dim vPI As Double
'円周率(π)
vPI = 4 * Atn(1)
Dim ARC As Double
ARC = y / z
Dim ARCsin As Double
ARCsin = Atn(ARC / Sqr(-ARC * ARC + 1))
Dim dblDegree As Double
'ラジアンからディグリー(角度)を求る
dblDegree = (180 / vPI) * ARCsin
Dgr = dblDegree
x = z * Cos(ARCsin)
'x = y / Tan(ARCsin)
End Function
Private Sub test_TrgYZ_DegreeX()
Dim Dgr As Double, x As Double
Call TrgYZ_DegreeX(14.9982662331051, 18.02775638, Dgr, x)
Debug.Print Dgr
Debug.Print x
' 56.3
' 10.0026001668331
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgXZ_DegreeY(ByVal x As Double, ByVal z As Double _
, ByRef Dgr As Double, ByRef y As Double)
'************************************************
'逆三角関数-余弦xと正弦zから角度と正弦yを算出する
'************************************************
'引数 x:余弦 123.456cmなど
'引数 z:正弦 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
'横位置(X座標・余弦)÷斜位置(Z座標・正接)=Cosine(コサイン・余弦)
Dim vPI As Double
'円周率(π)
vPI = 4 * Atn(1)
Dim ARC As Double
ARC = x / z
Dim ARCcos As Double
ARCcos = Atn(-ARC / Sqr(-ARC * ARC + 1)) + 2 * Atn(1)
Dim dblDegree As Double
'ラジアンからディグリー(角度)を求る
dblDegree = (180 / vPI) * ARCcos
Dgr = dblDegree
y = x * Tan(ARCcos)
'y = z * Sin(ARCcos)
End Function
Private Sub test_TrgXZ_DegreeY()
Dim Dgr As Double, y As Double
Call TrgXZ_DegreeY(10.0026001668331, 18.02775638, Dgr, y)
Debug.Print Dgr
Debug.Print y
' 56.3000000000001
' 14.9982662331051
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgXY_DegreeZ(ByVal x As Double, ByVal y As Double _
, ByRef Dgr As Double, ByRef z As Double)
'************************************************
'逆三角関数-余弦xと正弦yから角度と正接zを算出する
'************************************************
'引数 x:余弦 123.456cmなど
'引数 y:正弦 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
'縦位置(Y座標・正弦)÷横位置(X座標・余弦)=Tangent(タンジェント・正接)
Dim vPI As Double
'円周率(π)
vPI = 4 * Atn(1)
Dim ARC As Double
ARC = y / x
Dim Arctan As Double
Arctan = Atn(ARC)
Dim dblDegree As Double
'ラジアンからディグリー(角度)を求る
dblDegree = (180 / vPI) * Arctan
Dgr = dblDegree
z = y / Sin(Arctan)
'z = x / Cos(Arctan)
End Function
Private Sub test_TrgXY_DegreeZ()
Dim Dgr As Double, z As Double
Call TrgXY_DegreeZ(10.0026001668331, 14.9982662331051, Dgr, z)
Debug.Print Dgr
Debug.Print z
' 56.3
' 18.02775638
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgDegreeZ_YX(ByVal Dgr As Double, ByVal z As Double _
, ByRef y As Double, ByRef x As Double)
'************************************************
'三角関数-角度と正接zから正弦yと余弦xを算出する
'************************************************
'引数 Dgr:角度 45度など
'引数 z:正接 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
Dim dblRadian As Double, vPI As Double
vPI = 4 * Atn(1) '円周率(π)
dblRadian = (vPI / 180) * Dgr 'ディグリー(角度)からラジアンを求る
End Function
Private Sub test_TrgDegreeZ_YX()
Dim y As Double, x As Double
Call TrgDegreeZ_YX(56.3, 18.02775638, y, x)
Debug.Print y
Debug.Print x
' 14.9982662331051
' 10.0026001668331
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgDegreeX_ZY(ByVal Dgr As Double, ByVal x As Double _
, ByRef z As Double, ByRef y As Double)
'************************************************
'三角関数-角度と余弦xから正接zと正弦yを算出する
'************************************************
'引数 Dgr:角度 45度など
'引数 x:余弦 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
Dim dblRadian As Double, vPI As Double
vPI = 4 * Atn(1) '円周率(π)
dblRadian = (vPI / 180) * Dgr 'ディグリー(角度)からラジアンを求る
End Function
Private Sub test_TrgDegreeX_ZY()
Dim z As Double, y As Double
Call TrgDegreeX_ZY(56.3, 10.0026001668331, z, y)
Debug.Print z
Debug.Print y
' 18.02775638
' 14.9982662331051
End Sub
Option Explicit
'Trigonometric & Inverse Trigonometric Function
'三角関数と逆三角関数
Function TrgDegreeY_ZX(ByVal Dgr As Double, ByVal y As Double _
, ByRef z As Double, ByRef x As Double)
'************************************************
'三角関数-角度と正弦yから正接zと余弦xを算出する
'************************************************
'引数 Dgr:角度 45度など
'引数 y:正弦 123.456cmなど
'角度:Thetaシータθ∠A
'条件:∟直角三角形
Dim dblRadian As Double, vPI As Double
vPI = 4 * Atn(1) '円周率(π)
dblRadian = (vPI / 180) * Dgr 'ディグリー(角度)からラジアンを求る
End Function
Private Sub test_TrgDegreeY_ZX()
Dim z As Double, x As Double
Call TrgDegreeY_ZX(56.3, 14.9982662331051, z, x)
Debug.Print z
Debug.Print x
' 18.02775638
' 10.0026001668331
End Sub
Option Explicit
Function SquareRoot(y As Double, x As Double) As Double
'*************************************
'高さと幅から斜線辺を求める-平方根
'*************************************
'正弦と余弦から正接を求める
'引数yには高さ、xには幅
'ピタゴラス
If (x ^ 2 + y ^ 2) > 0 Then
SquareRoot = Sqr(x ^ 2 + y ^ 2)
Else
SquareRoot = 0
End If
'Sqr 関数
'数式の平方根を倍精度浮動小数点数型 (Double) の値で返す数値演算関数です。
'
'構文
'Sqr (Number)
'
'引数 number は必ず指定します。
'引数 number には、0 以上の倍精度浮動小数点数型 (Double) の数値または
'任意の有効な数式を指定します。
End Function
Private Sub test()
Debug.Print SquareRoot(15, 10)
'18.0277563773199
End Sub
Option Explicit
Function vbPI() As Double
'**********************************
'円周率(π)を求る
'**********************************
'Atn関数を利用(アークタンジェント)
'VB・VBAには円周率関数が無い
'返値=近似値
'ワークシート関数を使わないで求める
vbPI = 4 * Atn(1)
'※エクセルVBAの場合、ワークシート関数からでも求める事が可能
'vbPI = Application.WorksheetFunction.PI
End Function
Function Radian(Degrees As Double) As Double
'**********************************
'ディグリー(角度)からラジアンを求る
'**********************************
'返値=近似値
'ラジアン=円周率÷180×ディグリー
'円周率π=3.14159265358979
Radian = (vbPI / 180) * Degrees
End Function
Function Degree(Radian As Double) As Double
'**********************************
'ラジアンからディグリー(角度)を求る
'**********************************
'返値=近似値
'ディグリー=円周率÷180×ラジアン
'円周率π=3.14159265358979
Degree = (180 / vbPI) * Radian
End Function
Private Sub test()
''円周率πを求る
Debug.Print vbPI()
'3.14159265358979
Option Explicit
Function Atan2VBversion(x As Double, y As Double) As Double
'**********************************************************
'逆三角関数x-y座標のアークタンジェントを返しますAtan2無使用
'**********************************************************
'戻り値の角度は度
'引数x:x座標を指定
'引数y:y座標を指定
'※エクセルWorksheetFunctionAtan2無使用
Dim vPI As Double, At2 As Double
vPI = 4 * Atn(1) '円周率(π)
If x > 0 Then
At2 = Atn(y / x)
ElseIf x < 0 Then
At2 = Sgn(y) * (vPI - Atn(Abs(y / x)))
ElseIf y = 0 Then
At2 = 0
Else
At2 = Sgn(y) * vPI / 2
End If
'====================================
'ラジアン値が必要な場合は削除 |
'ラジアンからディグリー(角度)を求る |
At2 = (180 / vPI) * At2 ' |
'====================================
Atan2VBversion = At2
End Function
Function Atan2XLSversion(x As Double, y As Double) As Double
'**********************************************************
'逆三角関数x-y座標のアークタンジェントを返します
'**********************************************************
'戻り値の角度は度
'引数x:x座標を指定
'引数y:y座標を指定
'※エクセルWorksheetFunctionAtan2使用
Dim MyIndex, FileNumber
' ループを 5 回繰り返します。
For MyIndex = 1 To 5
' 未使用のファイル番号を取得します。
FileNumber = FreeFile
' ファイル名を作成します。
Open "TEST" & MyIndex For Output As #FileNumber
' 文字列を出力します。
Write #FileNumber, "これはサンプルです。"
' ファイルを閉じます。
Close #FileNumber
Next MyIndex
Dim InputData
' シーケンシャル入力モードで開きます。
Open "MYFILE" For Input As #1
' ファイルの終端かどうかを確認します。
Do While Not EOF(1)
' データ行を読み込みます。
Line Input #1, InputData
' イミディエイト ウィンドウに表示します。
Debug.Print InputData
Loop
' ファイルを閉じます。
Close #1
' 次のユーザー定義関数は、引数として渡された値の平方根を返します。
Function CalculateSquareRoot(NumberArg As Double) As Double
If NumberArg < 0 Then ' 引数を評価します。
Exit Function ' 終了して、呼び出し側のプロシージャに戻ります。
Else
CalculateSquareRoot = Sqr(NumberArg)
' 平方根を返します。
End If
End Function
Option Explicit
Public Function WorksheetFunctionVLookup(ByVal Geton As String) As String
'********************************************
'[WorksheetFunction.VLookup]の便利な使い方VBA
'********************************************
Dim str(1 To 3, 1 To 5) As String, Ans As String
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Dim str(3, 5) As String
'注意 下記は上記と同じ変数ですが
'「Application.WorksheetFunction.VLookup」を使用する場合
'は上記のように範囲を1から○○までと指定しないと使えません。
'これはWorksheetFunctionではセル値に「0」が無く「1」から始まる為です。
'追記 str(3, 5)はstr(0 to 3, 0 to 5)と同じです。
Option Explicit
Function SquareRoot(y As Double, x As Double) As Double
'*************************************
'高さと幅から斜線辺を求める-平方根
'*************************************
'正弦と余弦から正接を求める
'引数yには高さ、xには幅
'ピタゴラス
If (x ^ 2 + y ^ 2) > 0 Then
SquareRoot = Sqr(x ^ 2 + y ^ 2)
Else
SquareRoot = 0
End If
'Sqr 関数
'数式の平方根を倍精度浮動小数点数型 (Double) の値で返す数値演算関数です。
'
'構文
'Sqr (Number)
'
'引数 number は必ず指定します。
'引数 number には、0 以上の倍精度浮動小数点数型 (Double) の数値または
'任意の有効な数式を指定します。
End Function
Private Sub test()
Debug.Print SquareRoot(15, 10)
'18.0277563773199
End Sub
Option Explicit
Function CharacterInJapanese(Character As String) As Boolean
'******************************************
'文字列中に2バイト文字が含まれているか判定
'******************************************
Dim cntLen As Long
Dim cntByt As Long
If (cntLen <> cntByt) Then
CharacterInJapanese = True
Else
CharacterInJapanese = False
End If
End Function
Private Sub test()
Dim a As String
Dim b As String
a = "abc"
b = "あいう"
Debug.Print CharacterInJapanese(a)
Debug.Print CharacterInJapanese(b)
'False
'True
a = "abcあいう"
b = "123abc"
Debug.Print CharacterInJapanese(a)
Debug.Print CharacterInJapanese(b)
'True
'False
End Sub
Public Function Fnc文字内禁止有無(strInTEXT As String) As Boolean
'*******************************************************************************
'文字列中に「,」「"」「'」「Cr」「Lf」有無判定なければTrue
'*******************************************************************************
Dim IDX As Integer
Dim strTEXT As String
Dim strCHAR As String * 1
Fnc文字内禁止有無 = False
strTEXT = Trim$(strInTEXT)
If strTEXT = "" Then
Fnc文字内禁止有無 = True
Exit Function
End If
For IDX = 1 To Len(strTEXT)
strCHAR = Mid$(strTEXT, IDX, 1)
If ((strCHAR = ",") Or (strCHAR = """") Or (strCHAR = "'") Or _
(strCHAR = ",") Or (strCHAR = Chr(&H818D)) Or (strCHAR = "’") Or _
(strCHAR = Chr(&H8167)) Or (strCHAR = Chr(&H8168)) Or _
(strCHAR = vbCr) Or (strCHAR = vbLf)) Then
Exit Function
End If
Next IDX
Fnc文字内禁止有無 = True
End Function
Option Explicit
Public Function Fnc文字内空白(strInTEXT As String) As String
'*******************************************************************************
'文字内の空白文字削除及び誤変換文字修正
'*******************************************************************************
Dim IDX As Integer
Dim strTEXT As String
Dim strCHAR As String
Fnc文字内空白 = ""
strTEXT = Trim$(strInTEXT)
IDX = 1
Do While IDX <= Len(strTEXT)
strCHAR = Mid(strTEXT, IDX, 1)
If ((strCHAR <> " ") And (strCHAR <> " ") And (Asc(strCHAR) <> 63)) Then
Fnc文字内空白 = Fnc文字内空白 & strCHAR
End If
IDX = IDX + 1
Loop
End Function
Sub 文字変換()
'*******************************************************************************
'文字変換
'*******************************************************************************
Dim sht As Worksheet, a As Long, b As Long, c As Long, d As String, e As String
Set sht = ThisWorkbook.Worksheets("Sheet2")
With sht
b = Fnc最終行(sht)
For a = 2 To b
For c = 4 To 4
d = .Cells(a, c).Value
' e = UCase(d) 'アルファベット文字列をすべて大文字に変換して返します。
' e = LCase(d) 'アルファベットの大文字を小文字に変換する。
' e = StrConv(d, 4)
'vbUpperCase 1 大文字に変換
'vbLowerCase 2 小文字に変換
'vbProperCase 3 各単語の先頭の文字を大文字に変換
'vbWide 4 半角文字を全角文字に変換
'vbNarrow 8 全角文字を半角文字に変換
'vbKatakana 16 ひらがなをカタカナに変換
'vbHiragana 32 カタカナをひらがなに変換
If IsDate(d) = False Then
e = CDate(InputBox(d, "", d))
Else
e = CDate(d)
End If
.Cells(a, c).Value = e
Next c
Next a
End With
Option Explicit
Function CharacterLenb(ByVal Character As String) As Long
'*************************************
'文字列をUnicodeでバイト数を取得する
'*************************************
CharacterLenb = LenB(StrConv(Character, vbFromUnicode))
End Function
Private Sub test()
Dim i As String
i = "12あAb亞"
Debug.Print CharacterLenb(i)
Debug.Print LenB(i)
Function 改行コード検索削除(str As String) As String
'*********************************************
'文字列の改行コードの箇所を見つけ削除して返す
'*********************************************
'※見つからない場合は[原文字列]が返ります
'※引数は文字型
'※辺値も文字型
Public Function pfnCntMoji(taishou As String, kensaku As String) As Long
'*******************************************************************************
'指定文字数を数える
'*******************************************************************************
Dim argArray As Variant, cnt As Long
Dim arg As Variant
argArray = Split(taishou, kensaku)
cnt = 0
For Each arg In argArray
cnt = cnt + 1
Next
pfnCntMoji = cnt - 1
End Function
Sub ファイル内文字置換(対象ファイル$, 検索字$, 置換字$)
'***************************************************
'指定ファイル内の指定文字を検索し置換える
'***************************************************
Dim RetrievalCharacter$, ConversionCharacter$
Dim OriginalFile$, ReproductionFile$
Dim WritingFile As Integer, ReadingFile As Integer
Dim strDAT$, lngCnt&
'エラーが発生した場合
If Err <> 0 Then
MsgBox "Error" & Err, vbCritical, "Error"
Exit Sub
End If
'元のファイル削除
Kill OriginalFile
'使用可能なファイル番号取得
WritingFile = FreeFile()
Open ReproductionFile For Input As #WritingFile
'使用可能なファイル番号取得
ReadingFile = FreeFile()
Open OriginalFile For Output As #ReadingFile
'変数初期化
lngCnt = 0
'グローバル変数の初期化
lngNo = 0
Do Until EOF(WritingFile) '最後(全て)
'ファイル読込
Line Input #WritingFile, strDAT
'置換実行(Function)---------------↓対象文字列------↓検索文字------↓置換文字
lngCnt = lngCnt + FncstrReplace(strDAT, RetrievalCharacter, ConversionCharacter)
'ファイルに挿入
Print #ReadingFile, strDAT
Loop
'それぞれのファイルを閉じる
Close #WritingFile
Close #ReadingFile
'最初にコピーしたファイルを削除
Kill ReproductionFile
End Sub
Private Function FncstrReplace&(ByRef 対象文字列$, 検索文字$, 置換文字$)
'***********************************************************************
'指定文字列内の指定文字を検索し置換える
'***********************************************************************
Dim RetrievalResultPosition&, RetrievalBeginningNumber&
Dim ReplacementCharacterNumber&, ConversionCharacterNumber&
Do
'対象文字列の検索文字位置取得
RetrievalResultPosition = InStr(RetrievalBeginningNumber, 対象文字列, 検索文字, vbBinaryCompare)
'検索文字が[0]の場合
If RetrievalResultPosition = 0 Then Exit Do
Function 改行コード検索(str As String) As Long
'****************************************
'改行コードの箇所を見つけ位置を返す
'****************************************
'※見つからない場合は[0]が返ります
'※引数は文字型
'※辺値はLONG型数値です
'※見つかった先頭位置を返します
End Sub
Function RepeatAllLetter(Number As Long, strLetter As String) As String
'*************************************************
'指定した文字全部を指定した数だけ並べる(繰り返す)
'*************************************************
'オリジナル関数
'文字全部を、指定した文字数だけ並べた文字列を返す文字列処理関数
Dim MyString As String, i As Long
MyString = ""
For i = 1 To Number
MyString = MyString & strLetter
Next i
RepeatAllLetter = MyString
End Function
Private Sub test()
' "ABCABCABCABC" を返します。
MsgBox RepeatAllLetter(4, "ABC")
End Sub
Function FirstStrSearchLast(str As String, searchStr As String)
'*********************************************
'指定文字列を最後から検索した文字を2分割する
'*********************************************
'返値:最初(左)の文字が返ります。
Dim FirstStr As String, LastStr As String, i As Long
If InStr(1, str, searchStr) = 0 Then GoTo ErrEnd:
i = InStrRev(str, searchStr)
FirstStr = Left(str, i - 1)
LastStr = Mid(str, i + 1)
FirstStrSearchLast = FirstStr
Exit Function
ErrEnd:
FirstStrSearchLast = ""
End Function
Function LastStrSearchLast(str As String, searchStr As String)
'*********************************************
'指定文字列を最後から検索した文字を2分割する
'*********************************************
'返値:最後(右)の文字が返ります。
Dim FirstStr As String, LastStr As String, i As Long
If InStr(1, str, searchStr) = 0 Then GoTo ErrEnd:
i = InStrRev(str, searchStr)
FirstStr = Left(str, i)
LastStr = Mid(str, i + 1)
LastStrSearchLast = LastStr
Exit Function
ErrEnd:
LastStrSearchLast = ""
End Function
'最初から検索
Function FirstStrSearchFirst(str As String, searchStr As String)
'*********************************************
'指定文字列を最初から検索した文字を2分割する
'*********************************************
'返値:最初(左)の文字が返ります。
Dim FirstStr As String, LastStr As String, i As Long
If InStr(1, str, searchStr) = 0 Then GoTo ErrEnd:
i = InStr(str, searchStr)
FirstStr = Left(str, i - 1)
LastStr = Mid(str, i + 1)
FirstStrSearchFirst = FirstStr
Exit Function
ErrEnd:
FirstStrSearchFirst = ""
End Function
Function LastStrSearchFirst(str As String, searchStr As String)
'*********************************************
'指定文字列を最初から検索した文字を2分割する
'*********************************************
'返値:最後(右)の文字が返ります。
Dim FirstStr As String, LastStr As String, i As Long
If InStr(1, str, searchStr) = 0 Then GoTo ErrEnd:
i = InStr(str, searchStr)
FirstStr = Left(str, i)
LastStr = Mid(str, i + 1)
LastStrSearchFirst = LastStr
Exit Function
ErrEnd:
LastStrSearchFirst = ""
End Function
Private Sub test()
Dim strTest As String, SearChTest As String
strTest = "本日 は 晴天 なり"
SearChTest = " "
Debug.Print FirstStrSearchLast(strTest, SearChTest) '本日 は 晴天
Debug.Print LastStrSearchLast(strTest, SearChTest) 'なり
Debug.Print FirstStrSearchFirst(strTest, SearChTest) '本日
Debug.Print LastStrSearchFirst(strTest, SearChTest) 'は 晴天 なり
strTest = "本日-は-晴天-なり"
SearChTest = "-"
Debug.Print FirstStrSearchLast(strTest, SearChTest) '本日 は 晴天
Debug.Print LastStrSearchLast(strTest, SearChTest) 'なり
Debug.Print FirstStrSearchFirst(strTest, SearChTest) '本日
Debug.Print LastStrSearchFirst(strTest, SearChTest) 'は 晴天 なり
End Sub
'参考
Function GetFileName(strPath As String)
'*********************************
'パス文字列からファイル名だけ検出
'*********************************
'パスらしくない場合は空白を返す
'パスは最後の\を除く
Dim Pth As String, Fl As String
If InStr(1, strPath, ".") = 0 Then GoTo ErrEnd:
If InStr(1, strPath, "\") = 0 Then GoTo ErrEnd:
Fl = Dir(strPath)
Pth = Replace(strPath, Fl, "")
Pth = Mid(Pth, 1, Len(Pth) - 1)
GetFileName = Fl
Exit Function
ErrEnd:
GetFileName = ""
End Function
Function GetPathName(strPath As String)
'*********************************
'パス文字列からパスだけ検出
'*********************************
'パスらしくない場合は空白を返す
'パスは最後の\を除く
Dim Pth As String, Fl As String
If InStr(1, strPath, ".") = 0 Then GoTo ErrEnd:
If InStr(1, strPath, "\") = 0 Then GoTo ErrEnd:
Fl = Dir(strPath)
Pth = Replace(strPath, Fl, "")
Pth = Mid(Pth, 1, Len(Pth) - 1)
GetPathName = Pth
Exit Function
ErrEnd:
GetPathName = ""
End Function
Private Sub testg()
Dim strTest As String
strTest = ThisWorkbook.Path & "\" & ThisWorkbook.Name
Debug.Print GetFileName(strTest)
Debug.Print GetPathName(strTest)
End Sub
Sub 文字空白削除と禁止有無()
'*******************************************************************************
'文字空白削除と禁止有無
'*******************************************************************************
Dim sht As Worksheet, a As Long, b As Long, c As Long, d As String, e As String
Set sht = ThisWorkbook.Worksheets("Sheet2")
With sht
b = Fnc最終行(sht)
For a = 1 To b
For c = 1 To 16
d = .Cells(a, c).Value
e = Fnc文字内空白(d)
.Cells(a, c).Value = e
If Fnc文字内禁止有無(e) = False Then
MsgBox e, vbCritical, "ERRR "
End If
Next c
Next a
End With
Sub SearchAllLettersBetween(str As String, strFoundFront As String, strFoundBack As String)
'************************************************
'文字中の指定文字と指定文字間の文字を全て検索
'************************************************
'引数strは対象文字群
'引数strFoundFrontは前方検索対象文字
'引数strFoundBackは後方検索対象文字
Option Explicit
Private Function LetterNo(letter As String) As Byte
'****************************************************
'Like演算子で英語数字漢字ひらがなカタカナを判別する
'****************************************************
'英語[1]・数字[2]・漢字[3]
'全角ひらがな大[4]・全角ひらがな小[4]
'全角カタカナ大[5]・全角カタカナ小[5]
'長音ー[0]・その他[6]を返す
'※引数letterには1文字だけ
'※返り値はバイト数
'※長音[ー]で始まるひらがなカタカナは無いとみなす。
'※特殊文字は対象外[6]する
If letter = "_" Then LetterNo = 6: Exit Function
If letter Like "[A-Z]" = True Then LetterNo = 1: Exit Function
If letter Like "[a-z]" = True Then LetterNo = 1: Exit Function
If letter Like "[A-z]" = True Then LetterNo = 1: Exit Function
If letter Like "[0-9]" = True Then LetterNo = 2: Exit Function
If letter Like "[0-9]" = True Then LetterNo = 2: Exit Function
If letter Like "[一-龠]" = True Then LetterNo = 3: Exit Function
If letter Like "[あ-ん]" = True Then LetterNo = 4: Exit Function
If letter Like "[ア-ン]" = True Then LetterNo = 5: Exit Function
If letter = "ー" Then LetterNo = 0: Exit Function
LetterNo = 6
End Function
Function LetterKeyword(LongLetter As String)
'****************************************************
'文字列をキーワード毎に分ける
'****************************************************
'※特殊文字は除外する
'※1文字は除外する
Dim i As Long
Dim NowNumber As Byte '現在番号
Dim FncNo As Byte '関数から得た番号
Dim PreviousNumber As Byte '前の番号
Dim MemoryNumber As Byte '記憶番号
Dim ExclusionNumber As Byte '除外番号
Dim TmpLetter As String '仮の文字
Dim Character As String '処理中の1文字
Dim Spl As Variant
PreviousNumber = 9: MemoryNumber = 9 '初期化
ExclusionNumber = 9 '初期化
For i = 1 To Len(LongLetter)
Character = Mid(LongLetter, i, 1)
FncNo = LetterNo(Character) 'Function LetterNo
'長音[ー]処理
If FncNo = 0 Then
NowNumber = MemoryNumber
ElseIf FncNo = 6 Then
ExclusionNumber = ExclusionNumber + 1
NowNumber = ExclusionNumber
MemoryNumber = ExclusionNumber
Else
NowNumber = FncNo
MemoryNumber = FncNo
End If
'区切り処理
If NowNumber <> PreviousNumber Then
TmpLetter = TmpLetter & "," & Character
PreviousNumber = NowNumber
Else
TmpLetter = TmpLetter & Character
End If
Next i
Spl = Split(TmpLetter, ",")
TmpLetter = "" '初期化
For i = LBound(Spl) To UBound(Spl)
'※1文字は除外する
If Not Len(Spl(i)) <= 1 Then
TmpLetter = TmpLetter & Spl(i) & ","
End If
Next i
LetterKeyword = TmpLetter
End Function
Private Sub test()
Dim str As String
str = "XP_Office_2000/[XP]/2003用SP統合ソフト_SP+メーカーOffice_2000編"
MsgBox LetterKeyword(str)
Debug.Print LetterKeyword(str)
'XP,Office,2000,XP,2003,SP,統合,ソフト,SP,メーカー,Office,2000,
End Sub
Sub AddCSV()
'*******************************
'CSV形式テキストファイル出力
'*******************************
'フィールド名に「日」の文字を含む場合"yyyy/mm/dd"形式にする。
On Error GoTo error:
Dim sht(1 To 2) As Worksheet
Dim bok As Workbook
Dim MyPath As String
Dim MyPath2 As String
Dim i As Byte
Dim j As Long
Const shtFol As String = "\Backup"
Dim Fso As Object
Dim Chack As Boolean
Set bok = Workbooks("pdpData.xls")
Set sht(1) = bok.Worksheets("会計伝票")
Set sht(2) = bok.Worksheets("カルテ")
Application.ScreenUpdating = False
Set Fso = CreateObject("Scripting.FileSystemObject")
MyPath2 = bok.Path & shtFol
Chack = Fso.Folderexists(MyPath2)
If Chack = False Then '無ければ作成
Fso.createfolder (MyPath2)
End If
Set Fso = Nothing
MyPath = bok.Path & shtFol & "\"
For i = 1 To 2
With sht(i)
If Dir(MyPath & .Name & ".csv") <> "" Then Kill MyPath & .Name & ".csv"
Application.DisplayAlerts = False
For j = 1 To .Range("A1").SpecialCells(xlCellTypeLastCell).Column
If InStr(1, .Cells(1, j).Value, "日") <> 0 Then
.Columns(j).NumberFormat = "yyyy/mm/dd"
End If
Next j
.Copy
ActiveWorkbook.SaveAs Filename:=MyPath & .Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close SaveChanges:=False
Application.DisplayAlerts = True
End With
Set sht(i) = Nothing
Next i
Dim MyCheck
MyCheck = letter Like "[A-Z]"
Debug.Print MyCheck
MyCheck = letter Like "[a-z]"
Debug.Print MyCheck
MyCheck = letter Like "[A-z]"
Debug.Print MyCheck
MyCheck = letter Like "[A-Z]"
Debug.Print MyCheck
MyCheck = letter Like "[a-z]"
Debug.Print MyCheck
MyCheck = letter Like "[A-z]"
Debug.Print MyCheck
MyCheck = letter Like "[0-9]"
Debug.Print MyCheck
MyCheck = letter Like "[0-9]"
Debug.Print MyCheck
MyCheck = letter Like "[一-龠]"
Debug.Print MyCheck
MyCheck = letter Like "[あ-ん]"
Debug.Print MyCheck
MyCheck = letter Like "[ぁ-ゎ]"
Debug.Print MyCheck
MyCheck = letter Like "[あ-ゎ]"
Debug.Print MyCheck
MyCheck = letter Like "[ア-ン]"
Debug.Print MyCheck
MyCheck = letter Like "[ァ-ヮ]"
Debug.Print MyCheck
MyCheck = letter Like "[ア-ヮ]"
Debug.Print MyCheck
角かっこの中に指定する文字リスト charlist には、文字コードの並びの上限と下限をハイフン (-) で区切ることによって、特定の文字範囲を指定することもできます。2
バイト文字も範囲指定でき、漢字の範囲の指定もできます。たとえば、[A-Z] と指定すると、大文字の A から Z までの文字をすべてリストの中に指定したときと同じ意味になり、文字列式
string の中の対応する位置の文字が大文字のアルファベットのいずれか 1 文字であるときに一致します。1 組の角かっこの中に複数の範囲を指定するときは、それぞれの範囲の間を区切らずに記述します。
指定した範囲の意味は、Option Compare ステートメントの設定と、実行時のオペレーティング システムの国別情報の設定によって異なります。Option
Compare Binary ステートメントの例では、[A-E] の範囲を指定すると、A、B および E が一致します。Option Compare
Text ステートメントでは、[A-E] の範囲を指定すると、A、a、A、a、B、b、E、および e が一致します。この範囲を指定すると、E
または e と一致しません。並べ替え順序では、アクセント記号付きの文字はアクセント記号の付いていない文字の後になります。
Function TAGletterConversion(strLetter As String) As String
'***********************************
'HTML文法では使えない文字を変換
'***********************************
'strLetter 通常のテキストデータ
Dim cntWord As Long
Dim strWord As String
Dim strNewWord As String
Dim i As Long
Dim strNewLetter As String
cntWord = Len(strLetter) '文字数
For i = 1 To cntWord
strWord = Mid(strLetter, i, 1)
Select Case Asc(strWord) '文字コード判別
Case 13: strNewWord = "<br>"
Case 32: strNewWord = " "
Case 34: strNewWord = """
Case 38: strNewWord = "&"
Case 60: strNewWord = "<"
Case 62: strNewWord = ">"
Case Else: strNewWord = strWord
End Select
strNewLetter = strNewLetter & strNewWord
Next i
TAGletterConversion = strNewLetter
'-------------------------------------------------------------------
'Asc 関数
'指定した文字列内にある先頭の文字の文字コードを返す変換関数です。
Debug.Print Asc(vbCr)
Debug.Print Asc(" ")
Debug.Print Asc("""")
Debug.Print Asc("&")
Debug.Print Asc("<")
Debug.Print Asc(">")
'13
'32
'34
'38
'60
'62
'※実際はこのような2重な使い方はしません。
End Sub
Function OthersBookFun(strPath As String, FileName As String, ModuleName As String _
, StatementName As String, vrn As Variant) As Variant
'**********************************************
'他のブックのFunctionステートメントを実行する
'**********************************************
'※使用するブックは開かれているものとする
'strPath: 呼び出すブックのパス(C:\など)
'FileName: 呼び出すブック名(パスは不要)
'ModuleName: 呼び出すモジュール名
'StatementName: 呼び出すFunctionステートメント名
'vrn: 呼び出すFunctionステートメントの引数
Dim bk As Workbook, vr As Variant
'※実際はこのような2重な使い方はしません。
End Function
Private Sub test()
Dim sht As Worksheet, strad As String, Lad As String
Dim XlsName As String
XlsName = "test.xls"
Set sht = ThisWorkbook.Worksheets("test")
With sht
strad = .Cells(.Cells(65536, 4).End(xlUp).Row, 2).Value
End With
Lad = ServerAddressLocal(strad) & "\"
OthersBookSub Lad, XlsName, "testModule", "testsub"
End Sub
Option Explicit
Sub MakingPDF()
'*****************************************
'実行コード
'*****************************************
'PDFCreator.exeの参照設定が不可の場合は終了
If PDFCreatorFromFile = False Then Exit Sub
'作成実行
PrintToPDF_Early
End Sub
Function PDFCreatorFromFile() As Boolean
'*****************************************
'PDFCreator.exe参照設定
'*****************************************
If Dir(objName) = "" Then
MsgBox "「PDFCreator.exe」が見つかりません!", vbCritical, "参照設定Error!"
PDFCreatorFromFile = False
Else
ThisWorkbook.VBProject.References.AddFromFile (objName)
PDFCreatorFromFile = True
End If
End Function
Sub PrintToPDF_Early()
'*****************************************
'選択中のシートをPDFファイルに変換する
'*****************************************
'無料オープンソース[PDFCreator]
'http://sourceforge.net/projects/pdfcreator/
'参考ソース
'http://www.excelguru.ca/node/21
'PDFCreator参照設定必要
'試した動作環境:XP HE SP3,EXCEL2000(VB6.0)
Dim PDFオブジェクト As PDFCreator.clsPDFCreator
Dim PDFファイル名 As String
Dim PDF作成パス As String
'空の値の場合は終了(シート空白)
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
'IsEmpty:Empty 値の場合に、真 (True) を返す
'UsedRange:指定されたワークシートで使われたセル範囲 (Range オブジェクト) を返す
Set PDFオブジェクト = New PDFCreator.clsPDFCreator
'PDFCreatorへの命令
With PDFオブジェクト
If .cStart("/NoProcessingAtStartup") = False Then '(※注意)
MsgBox "PDFCreatorが初期化されていません!", vbCritical + _
vbOKOnly, "PDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = PDF作成パス
.cOption("AutosaveFilename") = PDFファイル名
.cOption("AutosaveFormat") = 0 ' 0 = PDF
.cClearCache
End With
'(※注意)PDFCreatorが挙動がおかしく動作しない場合は
'タスクマネージャープロセスからPDFCreatorを強制終了させる。
'タスクマネージャー[alt]+[ctrl]+[del]
Option Explicit
Private Sub Workbook_Open()
MsgBox "Workbook_Open"
End Sub
Private Sub Workbook_Activate()
MsgBox "Workbook_Activate"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox "Workbook_BeforeClose"
End Sub
Workbookイベント一覧<2000>
イベント
対象
働き(タイミング)
Workbook
Activate
ブック
アクティブになったら発生
AddinInstall
アドインとして組み込まれたら発生
AddinnUninstall
アドインから解除されたら発生
BeforeClose
閉じられる前
BeforePrint
印刷される前
BeforeSave
保存される前
Deactive
アクティブでなくなったら発生
NewSheet
新規シートを追加されたら発生
Open
開かれたら発生
SheetActive
シート
アクティブになったら発生
SheetBeforeDoubleClick
ダブルクリックされたら発生
SheetBeforeRightClick
右クリックされたら発生
SheetCalculate
再計算されたら発生
SheetChange
セルの値が変更されたら発生
SheetDeactive
アクティブでなくなったら発生
SheetFollowHyperlink
ハイパーリンクをクリックしたら発生
SheetSelectionChange
セルの選択範囲が変更されたら発生
WindowActivate
ウインドウ
アクティブになったら発生
WindowDeactivate
アクティブでなくなったら発生
WindowResize
大きさが変更されたら発生
Worksheetkイベント一覧
Option Explicit
Private Sub Worksheet_Activate()
'アクティブになったら発生
End Sub
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean) '引数が必要
'ダブルクリックされたら発生
End Sub
Private Sub Worksheet_BeforeRightClick _
(ByVal Target As Range, Cancel As Boolean) '引数が必要
'右クリックされたら発生
End Sub
Private Sub Worksheet_Calculate()
'再計算されたら発生
End Sub
Private Sub Worksheet_Change _
(ByVal Target As Range) '引数が必要
'セルの値が変更されたら発生
End Sub
Private Sub Worksheet_Deactivate()
'アクティブでなくなったら発生
End Sub
Private Sub Worksheet_FollowHyperlink _
(ByVal Target As Hyperlink) '引数が必要
'ハイパーリンクをクリックしたら発生
End Sub
Private Sub Worksheet_SelectionChange _
(ByVal Target As Range) '引数が必要
'セルの選択範囲が変更されたら発生
End Sub
Set shell = WScript.CreateObject( "Shell.Application" )
For Each DesktopFolder In shell.NameSpace( 0 ).Items
If DesktopFolder.Name = "ごみ箱" Then
DesktopFolder.InvokeVerb "ごみ箱を空にする(&B)"
WScript.Quit 0
End If
Next
Private Function GetDriveObjectStr(str As String) As String
'*******************************************************************************
'ドライブを表す文字を返します。
'*******************************************************************************
Dim Fso
Set Fso = CreateObject("Scripting.FileSystemObject")
''C:を返します
GetDriveObjectStr = Fso.GetDriveName(str)
End Function
Option Explicit
Sub TxtOpen()
'Tool_Name
'テキストファイル読込(y=レコード数5)
Dim strTarget As String
Dim x As Integer
'y=Dim y As Integer
Dim sht As Worksheet
Dim txtTar As String
Dim MyPath As String
Open MyPath & "\" & txtTar For Input As #1 'ターゲットテキストオープン
Do Until EOF(1)
Input #1, strTarget
'y=Input #1, strTarget(1),strTarget(2),strTarget(3),strTarget(4),strTarget(5)
'y=For y = 1 to 5
x = x + 1
Cells(x, 1) = strTarget 'y=(y)
'y=Next y
Loop
'Option Base ステートメントの使用例
'次の例では、Option Base ステートメントを使って、
'配列の添字の既定の最小値 0 を変更します。LBound
'関数は、配列内の指定された次元の添字の最小値を返します。
'Option Base ステートメントは、モジュール レベルでのみ使います。
Option Base 1 ' 配列の添字の既定値を 1 に設定します。
Dim Lower
Dim MyArray(20), TwoDArray(3, 4) ' 配列変数を宣言します。
Dim ZeroArray(0 To 5) ' 添字の既定の最小値を変更します。
' 配列の添字の最小値を求めるには、LBound 関数を使います。
Lower = LBound(MyArray) ' 1 が返ります。
Lower = LBound(TwoDArray, 2) ' 1 が返ります。
Lower = LBound(ZeroArray) ' 0 が返ります。
Option Explicit
Sub TxtSarch()
'
Dim strTarget As String
Dim x As Long
Dim y As Long
Dim z As Integer
Dim i As Integer
Dim j As Long
Dim k As Byte
Dim sht As Worksheet
Dim shtOut As Worksheet
Dim strFind As String
Dim strFind2 As String
Dim strOutTXT As String
Set sht = Workbooks("Test.xls").Worksheets("Sheet1") '**SET**
Set shtOut = Workbooks("Test.xls").Worksheets("Sheet2") '**SET**
k = Len(strFind)
x = sht.Range("a65536").End(xlUp).Row
For y = 1 To x
strTarget = sht.Range("a" & y).Value
i = InStr(strTarget, strFind)
If i <> 0 Then
z = InStr(strTarget, strFind2)
If z <> 0 Then
strOutTXT = Mid(strTarget, z, i - z + k)
j = shtOut.Range("a1").CurrentRegion.Rows.Count + 1
shtOut.Range("a" & j).Value = strOutTXT
End If
End If
Next y
Dim strTwo(64, 2) As String, strOne(85, 2) As String
Public Function RomajiConversion(ByVal HiraKata As String) As String
'****************************************************
'ひらがな・カタカナをローマ字(英字)変換
'****************************************************
'引数[HiraKata]を全てローマ字小文字(英字)変換
'引数[HiraKata]はひらがな・カタカナ何れも変換可能(※1)
'注意 サブプロシージャー[ReadTable]が同じモジュール内に必要
'「なっとう」等の[っ]の場合、ローマ字特有の「na[tt]ou」[tt]を処理(※2)
Dim CnvOne As String, CnvTwo As String
Dim strTemporary As String
Dim str As String
Dim blnFlg As Boolean
Dim cnt As Long
Dim intMach As Integer
'2文字の該当値検索
str = Mid(HiraKata, cnt, 2) '該当文字格納
For intMach = 1 To 64
If str = strTwo(intMach, 1) Then
CnvTwo = strTwo(intMach, 2)
Exit For '合致なら抜ける
End If
Next intMach
'1文字の該当値検索
str = Mid(HiraKata, cnt, 1) '該当文字格納
For intMach = 1 To 85
If str = strOne(intMach, 1) Then
CnvOne = strOne(intMach, 2)
Exit For '合致なら抜ける
End If
Next intMach
If CnvTwo <> "" Then '2文字変換完了の場合
If blnFlg Then 'フラグが該当する場合
strTemporary = strTemporary & Left(CnvTwo, 1)
'2文字変換中1文字だけ余分に追加
End If
strTemporary = strTemporary & CnvTwo '2文字追加
cnt = cnt + 2 '処理を2つ進める
blnFlg = False '該当フラグを降ろす
ElseIf CnvOne <> "" Then '1文字変換完了の場合
If blnFlg Then 'フラグが該当する場合
strTemporary = strTemporary & Left(CnvOne, 1)
'1文字余分に追加
End If
strTemporary = strTemporary & CnvOne '1文字追加
cnt = cnt + 1 '処理を1つ進める
blnFlg = False '該当フラグを降ろす
ElseIf Mid(HiraKata, cnt, 1) = "っ" Then
'(※2)両方無変換の場合で該当文字が「っ」の場合
End Function
Private Sub ReadTable()
'***********************************
'RomajiConversion用テーブル
'***********************************
'*ひらがな・カタカナをローマ字変換テーブル
'「っ」はありません
'「ん」は「n」にて変換、用途により「nn」変更してください。
'長音「ろーま」は「ro-ma」[-]で処理
Option Explicit
Function CharacterFind(ByVal Character As String, _
ByVal FirstStr As String, ByVal LastStr As String) As String
'****************************************************
'バイナリモードで指定文字列から指定文字を抜き出す
'****************************************************
'どちらか一方でも見つからない場合は=""を返します。
'引数LastStrの文字は、引数FirstStrの文字の後から探します。
'引数LastStrは引数FirstStrの文字の次の文字からの検索になります。
Dim i As Long, n As Long
i = InStr(1, Character, FirstStr, vbBinaryCompare)
If i = 0 Then CharacterFind = "": Exit Function
n = InStr(i, Character, LastStr, vbBinaryCompare)
If n = 0 Then CharacterFind = "": Exit Function
CharacterFind = Mid(Character, i, n + Len(LastStr) - i)
'<モードの違い>
'┌─────────┬───┬────┬────┐
'│内容 │例 │バイナリ│テキスト│
'├─────────┼───┼────┼────┤
'│大文字/小文字 │A/a │異 │同 │
'│全角/半角 │A/A │異 │同 │
'│ひらがな/カタカナ │あ/ア │異 │同 │
'└─────────┴───┴────┴────┘
End Function
Private Sub test()
Dim a As String
a = "ちワあ dい うえおちワkoんにちワお元気zですか"
'「ちワ」は3つ目をヒットさせます。
Debug.Print CharacterFind(a, "ko", "ちワ")
'koんにちワ
End Sub
Option Explicit
Function CharacterFindNext(ByVal Character As String, _
ByVal FirstStr As String, ByVal LastStr As String) As String
'*****************************************************************
'バイナリモードで指定文字列から指定文字を抜き出す(指定文字を除去)
'*****************************************************************
'どちらか一方でも見つからない場合は=""を返します。
'引数LastStrの文字は、引数FirstStrの文字の後から探します。
'引数LastStrは引数FirstStrの文字の次の文字からの検索になります。
'引数LastStrと引数FirstStrの文字は除きます。
Dim i As Long, n As Long
i = InStr(1, Character, FirstStr, vbBinaryCompare)
If i = 0 Then CharacterFindNext = "": Exit Function
n = InStr(i, Character, LastStr, vbBinaryCompare)
If n = 0 Then CharacterFindNext = "": Exit Function
CharacterFindNext = Mid(Character, i + Len(FirstStr), _
n + Len(LastStr) - (i + Len(FirstStr)) - Len(LastStr))
'<モードの違い>
'┌─────────┬───┬────┬────┐
'│内容 │例 │バイナリ│テキスト│
'├─────────┼───┼────┼────┤
'│大文字/小文字 │A/a │異 │同 │
'│全角/半角 │A/A │異 │同 │
'│ひらがな/カタカナ │あ/ア │異 │同 │
'└─────────┴───┴────┴────┘
End Function
Private Sub test()
Dim a As String
a = "ちワYyあ dい うえおちワXxzkoんにちワYyお元気zですか"
'「ちワ」は3つ目をヒットさせます。
Debug.Print CharacterFindNext(a, "Xxz", "Yy")
'koんにちワ
End Sub
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'*******************************************************************************
'フリガナ変換
'*******************************************************************************
Me.TextBox7.Value = _
StrConv(Application.GetPhonetic(Me.TextBox5.Value), vbHiragana)
End Sub
Private Sub フリガナを付ける()
'*******************************************************************************
'フリガナを付ける
'*******************************************************************************
Dim sht As Worksheet, a As Long, b As Long, c As Long, d As String, e As String
'Set sht = ThisWorkbook.Worksheets("Sheet2")
Dim Xname As String
'***********************************
Xname = "給料_外注先.xls"
'***********************************
Set sht = Workbooks(Xname).Worksheets("Sheet1")
With sht
b = Fnc最終行(sht)
For a = 1 To b
If a <> 1 Then
For c = 2 To 2
.Cells(a, c + 1).Value = Application.GetPhonetic(.Cells(a, c))
Next c
Else
.Cells(a, 3).Value = "フリガナ"
End If
Next a
End With
End Sub
Public Function fncフリガナ(str As String) As String
'*******************************************************************************
'フリガナを返す
'*******************************************************************************
fncフリガナ = Application.GetPhonetic(str)
End Function
Sub ファイル内文字付番置換()
'***************************************************
'大量の同じ文字が記述されているファイルのその各同じ文字
'に番号を付ける
'***************************************************
FileReadingAndWriting ThisWorkbook.Path & "\参照雛形\index.txt", "vbサムネイル", "vbサムネイル"
End Sub
Private Sub FileReadingAndWriting(対象ファイル$, 検索字$, 置換字$)
'***************************************************
'大量の同じ文字が記述されているファイルのその各同じ文字
'に番号を付ける
'***************************************************
Dim RetrievalCharacter$, ConversionCharacter$
Dim OriginalFile$, ReproductionFile$
Dim WritingFile As Integer, ReadingFile As Integer
Dim strDAT$, lngCnt&
Do
'対象文字列の検索文字位置取得
RetrievalResultPosition = InStr(RetrievalBeginningNumber, 対象文字列, 検索文字, vbBinaryCompare)
'検索文字が[0]の場合
If RetrievalResultPosition = 0 Then Exit Do
Option Explicit
Function PathSignChangeS(strPath As String) As String
'*****************************************
'ローカルパス[\]をサーバ用パス[/]へ変更
'*****************************************
If (cntLen <> cntByt) Then
MsgBox "2byte文字が含まれています!", vbCritical, "PathSignChange"
PathSignChangeS = ""
Else
PathSignChangeS = Replace(strPath, "\", "/")
End If
End Function
Function PathSignChangeE(strPath As String) As String
'*****************************************
'サーバ用パス[/]をローカルパス[\]へ変更
'*****************************************
If (cntLen <> cntByt) Then
MsgBox "2byte文字が含まれています!", vbCritical, "PathSignChange"
PathSignChangeE = ""
Else
PathSignChangeE = Replace(strPath, "/", "\")
End If
End Function
Private Sub testS()
MsgBox PathSignChangeS("K\06\PR\exe\www\XXX")
End Sub
Private Sub testE()
MsgBox PathSignChangeE("K/06\PR/exe/www/XXX")
End Sub
になります。プロシージャ内では、定数は常にプライベート定数として扱われて、適用範囲 (スコープ) は変更できません。標準モジュールでは、モジュール
レベル定数の既定の適用範囲をキーワード Public で変更できます。一方、クラス モジュールでは、定数はプライベート定数としてのみ使用でき、キーワード
Public では適用範囲を変更できません。
Option Explicit
Sub ArraySameElementDelCollection(ByVal DB As Variant, ByRef DB2() As String)
'*****************************************************
'配列 配列の同じ要素を削除するCollection
'*****************************************************
Dim cllArray As Collection, vrn As Variant, i As Long
Set cllArray = New Collection
On Error Resume Next
For Each vrn In DB
cllArray.Add vrn, vrn
Next
On Error GoTo 0
ReDim DB2(cllArray.Count - 1)
For i = 1 To cllArray.Count
DB2(i - 1) = cllArray(i)
Next
End Sub
Private Sub test()
Dim i As Long, x(5) As String, DB2() As String
'テストデータ
x(0) = "1"
x(1) = "A"
x(2) = "1"
x(3) = "B"
x(4) = ""
x(5) = "1"
Call ArraySameElementDelCollection(x, DB2())
'値を表示
For i = LBound(DB2) To UBound(DB2)
Debug.Print i & vbTab & DB2(i)
Next i
Option Explicit
Sub SortMethodArrayVariable2(ByRef strDataNew() As String, ByVal strDataOld As Variant)
'****************************************************
'Sortメソッド配列変数並替(文字列可・高速・2次元編)
'****************************************************
'エクセルのRangeオブジェクト使用の為65536個を超えると不可。
'ここでは[Callステートメント]による呼び出しで関数化してます。
'既存シートデータに影響が無い様、新シートを使用してます。
'新シートは使用後削除されます。
'より高速にするにはシートを予め用意しておく事です。
'ByVal strDataOld で受け取った配列を
'ByRef strDataNew() で返してます。
Dim NewSheet As Worksheet
Dim ArrayMin(1) As Long
Dim ArrayMax(1) As Long
Dim i As Long, j As Long
Dim strDataOldDummy() As String 'Rangeオブジェクト用配列変数
Dim rngDummy As Range
'画面更新しない
Application.ScreenUpdating = False
'新シート追加及びセット
Set NewSheet = ThisWorkbook.Worksheets.Add
'①受け取った配列変数をRangeオブジェクト用に配列変数を定義
ReDim strDataOldDummy((ArrayMin(0) + 1) To (ArrayMax(0) + 1), _
(ArrayMin(1) + 1) To (ArrayMax(1) + 1))
'②返す配列変数の格納数を定義
ReDim strDataNew(ArrayMin(0) To ArrayMax(0), ArrayMin(1) To ArrayMax(1))
'受け取った配列変数①をRangeオブジェクト用配列変数にコピー
For i = ArrayMin(0) To ArrayMax(0)
For j = ArrayMin(1) To ArrayMax(1)
strDataOldDummy(i + 1, j + 1) = strDataOld(i, j)
Next j
Next i
With NewSheet
'③Rangeオブジェクトをセット
Set rngDummy = .Range(.Cells(ArrayMin(0) + 1, 1), .Cells(ArrayMax(0) + 1, 2))
'セットしたRangeオブジェクト③にRangeオブジェクト用配列変数①をコピー
rngDummy = strDataOldDummy
'③RangeオブジェクトSortメソッド(降順)
rngDummy.Sort Key1:=.Cells(1, 2), Order1:=xlDescending, Key2:=.Cells(1, 1), Order2:=xlDescending
'返す配列変数②に格納
For i = ArrayMin(0) + 1 To ArrayMax(0) + 1
For j = ArrayMin(1) + 1 To ArrayMax(1) + 1
strDataNew(i - 1, j - 1) = rngDummy(i, j)
Next j
Next i
'③セット解除
Set rngDummy = Nothing
End With
'マクロの実行中に特定の警告やメッセージを表示しない
Application.DisplayAlerts = False
NewSheet.Delete '追加した新シート削除
'マクロの実行中に特定の警告やメッセージを表示する
Application.DisplayAlerts = True
Set NewSheet = Nothing 'セット解除
Public Function fnc来月の第1日(HIDUKE As Date) As String
'*******************************************************************************
'来月の第1日
'*******************************************************************************
fnc来月の第1日 = DateAdd("m", 1, DateSerial(Year(HIDUKE), Month(HIDUKE), 1))
End Function
Option Explicit
Sub SortMethodArrayVariable(ByRef strDataNew() As String, ByVal strDataOld As Variant)
'****************************************************
'Sortメソッド配列変数並替(文字列可・高速・1次元編)
'****************************************************
'エクセルのRangeオブジェクト使用の為65536個を超えると不可。
'ここでは[Callステートメント]による呼び出しで関数化してます。
'既存シートデータに影響が無い様、新シートを使用してます。
'新シートは使用後削除されます。
'より高速にするにはシートを予め用意しておく事です。
'ByVal strDataOld で受け取った配列を
'ByRef strDataNew() で返してます。
Dim NewSheet As Worksheet
Dim ArrayMin As Long
Dim ArrayMax As Long
Dim i As Long
Dim strDataOldDummy() As String 'Rangeオブジェクト用配列変数
Dim rngDummy As Range
'画面更新しない
Application.ScreenUpdating = False
'新シート追加及びセット
Set NewSheet = ThisWorkbook.Worksheets.Add
For i = LBound(テスト動的配列A) To UBound(テスト動的配列A)
Debug.Print テスト動的配列A(i)
Next i
'A0
'A1
'A2
'A3
'A4
'A5
For i = LBound(テスト動的配列B) To UBound(テスト動的配列B)
Debug.Print テスト動的配列B(i)
Next i
'B0
'B1
'B2
'B3
'B4
'B5
For i = LBound(テスト動的配列C) To UBound(テスト動的配列C)
Debug.Print テスト動的配列C(i)
Next i
'C0
'C1
'C2
'C3
'C4
'C5
For i = LBound(テスト動的配列D) To UBound(テスト動的配列D)
Debug.Print テスト動的配列D(i)
Next i
'D0
'D1
'D2
'D3
'D4
'D5
'コピー元配列の値を変更します。
For i = 0 To 5
動的配列A(i) = "w" & i
動的配列B(i) = "x" & i
静的配列C(i) = "y" & i
静的配列D(i) = "z" & i
Next i
For i = LBound(テスト動的配列A) To UBound(テスト動的配列A)
Debug.Print テスト動的配列A(i)
Next i
'A0
'A1
'A2
'A3
'A4
'A5
'値は変わりません
'参照渡しではなく値渡しだからです。
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
End Sub
Sub 配列の最小値()
'******************************************************
'配列の指定された次元で使用できる添字の最小値を返す。
'******************************************************
Dim Upper(4) As Long
Dim MyArray(1 To 10, 5 To 15, 10 To 20) ' 配列変数を宣言します。
Dim AnyArray(10)
Public Function GetAge(Birthday As String, Sanshutubi As String) As Long
'引数[Birthday]:生年月日、String型でここにDate型に変換できないものが入ると「0」になる
'引数[Sanshutubi]:算出する該当日、String型でここにDate型に変換できないものが入ると「0」になる
'返値[GetAge]:Long型
Dim a As Date, b As Date, C As Date
If IsDate(Birthday) = False Or IsDate(Sanshutubi) = False Then
GetAge = 0
Else
a = CDate(Birthday): b = CDate(Sanshutubi)
C = DateSerial(Year(b), Month(a), Day(a))
If C <= Date Then
GetAge = Year(b) - Year(a)
Else
GetAge = Year(b) - Year(a) - 1
End If
End If
End Function
Private Sub Test()
Dim a As String, b As String
a = InputBox("生年月日", "", "")
b = InputBox("算出する該当日", "", Date)
MsgBox GetAge(a, b)
End Sub
Public Function fnc先月の第1日(HIDUKE As Date) As String
'*******************************************************************************
'先月の第1日
'*******************************************************************************
fnc先月の第1日 = DateAdd("m", -1, DateSerial(Year(HIDUKE), Month(HIDUKE), 1))
End Function
Option Explicit
Function TimerStr() As String
'**********************************************
'文字型にした1000分の1秒
'**********************************************
End Function
Private Sub test_TimerStr()
Dim i As Byte
For i = 1 To 10
Debug.Print TimerStr
Next i
'031
'031
'031
'031
'031
'031
'031
'031
End Sub
Function TimerTimeStr() As String
'**********************************************
'文字型にした1000分の1秒(時間・付加)
'**********************************************
'午前 0 時 (真夜中) から経過した秒数
'Int=Fix
Dim sTimer As String
sTimer = Format(Int((CDbl(Timer) - Int(CDbl(Timer))) * 1000), "00#")
TimerTimeStr = Format(Time, "hhmmss") & sTimer
End Function
Private Sub test_TimerTimeStr()
Dim i As Byte
For i = 1 To 10
Debug.Print TimerTimeStr
Next i
'073830906
'073830906
'073830906
'073830906
'073830921
'073830921
'073830921
'073830921
End Sub
Function TimerDateTimeStr() As String
'**********************************************
'文字型にした1000分の1秒(日付・時間・付加)
'**********************************************
'午前 0 時 (真夜中) から経過した秒数
'Int=Fix
Dim sTimer As String
sTimer = Format(Int((CDbl(Timer) - Int(CDbl(Timer))) * 1000), "00#")
End Function
Private Sub test_TimerDateTimeStr()
Dim i As Byte
For i = 1 To 10
Debug.Print TimerDateTimeStr
Next i
'20100111074252062
'20100111074252062
'20100111074252062
'20100111074252062
'20100111074252062
'20100111074252062
'20100111074252078
'20100111074252078
End Sub
Private Sub test()
Debug.Print Date 'Date 関数
Debug.Print Time 'Time 関数
Debug.Print Timer 'Timer 関数
Debug.Print Now 'Now 関数
'2010/01/11
'7:26:04
' 26764.08
'2010/01/11 7:26:04
End Sub
Option Explicit
Function MakeTimeDateA(dblTime As Double) As String
'**********************************************
'秒数や分数を時間や日付形式にするdd_hh:nn:ss
'**********************************************
'引数dblTimeが秒の場合
'dd hh:nn:ss 形式の場合
Dim Inds As Integer, Frms As String
Dim Indn As Integer, Frmn As String
Dim Indh As Integer, Frmh As String
Dim Indd As Integer, Frmd As String
Inds = dblTime Mod 60 '秒
Indn = Round(dblTime \ 60) Mod 60 '分
Indh = Round(dblTime \ 3600) Mod 24 '時
Indd = Round(dblTime \ 86400) '日
End Function
Private Sub testB()
Debug.Print MakeTimeDateB(86401)
Debug.Print MakeTimeDateB(86000)
Debug.Print MakeTimeDateB(8)
Debug.Print MakeTimeDateB(800000)
'返値
'24:00:01
'23:53:20
'00:00:08
'222:13:20
End Sub
解説
剰余演算子は、数式 number1 を数式 number2 で除算し、その余りを演算結果 result として返します。このとき浮動小数点数は整数に丸められます。たとえば、次に示す式では、変数
A (演算結果 result) の値は 5 になります。
A = 19 Mod 6.7
通常、演算結果 result のデータ型は、result の値が整数であるかどうかに関係なく、バイト型 (Byte)、整数型 (Integer)、または長整数型
(Long)、あるいは、内部処理形式がバイト型、整数型、または長整数型のバリアント型 (Variant) になります。小数部分はすべて切り捨てられます。ただし、一方または両方の式が
Null 値のときは、演算結果 result も Null 値になります。Empty 値を持つ式は、0 として扱われます。
Public Function 保存名作成() As String
'*******************************************************************************
'保存名を作成する現在年月日時刻を取得
'*******************************************************************************
保存名作成 = Format(Now, "-yy年mm月dd日hh時mm分ss秒")
End Function
Dim 乱数最低値 As Long, 乱数最高値 As Long
Dim 作成数 As Long
Dim MyValue, a As Long, b As Long, i As Long
乱数最低値 = 1000000: 乱数最高値 = 9999999
作成数 = 10
'英字をつけない場合のエラー回避
If (乱数最高値 - 乱数最低値) + 1 < 作成数 Then
MsgBox "作成範囲", 0, "ERROR"
Exit Sub
End If
For a = 1 To 作成数
ReDim Preserve RNDADD(i)
再試行:
MyValue = Int((乱数最高値 * Rnd) + 乱数最低値)
'*英字を付加したい場合は↓を追加
MyValue = ランダム英字取得 & ランダム英字取得 & ランダム英字取得 & MyValue
For b = LBound(RNDADD) To UBound(RNDADD)
'作成済みと重複していたら
If RNDADD(b) = MyValue Then GoTo 再試行:
Next b
RNDADD(i) = MyValue
MsgBox RNDADD(i) '確認用MSG(削除)
i = i + 1
Next a
End Sub
Private Function ランダム英字取得() As String
'*********************************************
'ランダム英字取得関数
'*********************************************
Dim MyValue, str(26) As String
MyValue = Int((26 * Rnd) + 1)
str(1) = "a": str(9) = "i": str(17) = "q": str(25) = "y"
str(2) = "b": str(10) = "j": str(18) = "r": str(26) = "z"
str(3) = "c": str(11) = "k": str(19) = "s"
str(4) = "d": str(12) = "l": str(20) = "t"
str(5) = "e": str(13) = "m": str(21) = "u"
str(6) = "f": str(14) = "n": str(22) = "v"
str(7) = "g": str(15) = "o": str(23) = "w"
str(8) = "h": str(16) = "p": str(24) = "x"
ランダム英字取得 = str(MyValue)
End Function
Private Sub test1()
MsgBox ランダム英字取得
End Sub
Option Explicit
Private Sub test()
'*************************************
'変数だけでソート(並び替え)昇順降順
'*************************************
Dim i As Byte, str As String
Dim testData() As Long
ReDim testData(10) As Long
testData(1) = 3
testData(2) = 7
testData(3) = 1
testData(4) = 9
testData(5) = 2
testData(6) = 5
testData(7) = 8
testData(8) = 4
testData(9) = 6
testData(10) = 0
VariableSortAsc testData
str = ""
For i = 1 To 10
str = str & i & vbTab & testData(i) & vbCr
Next i
MsgBox str
VariableSortDes testData
str = ""
For i = 1 To 10
str = str & i & vbTab & testData(i) & vbCr
Next i
MsgBox str
End Sub
Sub VariableSortAsc(lngData As Variant)
'*************************************
'変数だけでソート(並び替え)昇順
'*************************************
'Ascending order 昇順
'1次元用
Dim MainSort As Long
Dim SubSort As Long
Dim lngChange As Long
For MainSort = LBound(lngData) To UBound(lngData)
For SubSort = UBound(lngData) To MainSort Step -1
If lngData(MainSort) > lngData(SubSort) Then
lngChange = lngData(MainSort)
lngData(MainSort) = lngData(SubSort)
lngData(SubSort) = lngChange
End If
Next SubSort
Next MainSort
End Sub
Sub VariableSortDes(lngData As Variant)
'*************************************
'変数だけでソート(並び替え)降順
'*************************************
'Descending order 降順
'1次元用
Dim MainSort As Long
Dim SubSort As Long
Dim lngChange As Long
For SubSort = UBound(lngData) To MainSort Step -1
For MainSort = LBound(lngData) To UBound(lngData)
If lngData(MainSort) < lngData(SubSort) Then
lngChange = lngData(MainSort)
lngData(MainSort) = lngData(SubSort)
lngData(SubSort) = lngChange
End If
Next MainSort
Next SubSort
Option Explicit
Private Sub 型宣言文字()
'****************************
'型宣言文字
'****************************
'変数を宣言
Dim NullVar, MyType$, StrVar$, IntVar%, CurVar@
Dim ArrayVar&(1 To 5), dbl#
j = 347 ' This literal is of the Integer data type.
X = 9.2 ' This literal is of the Double data type.
B = False ' This literal is of the Boolean data type.
'Visual Basic には、"リテラルの型文字" が用意されています。
'この型文字を使用すると、あるリテラルに対して、そのリテラルの形式が示す以外のデータ型を指定できます。
'このためには、リテラルの型文字をリテラルの最後に付けます。次の表は、使用できるリテラルの型文字とその使用例を示しています。
'
'リテラルの型文字 データ型 例
'
' S 短整数型 (Short) I = 347S
'
' I 整数型 (Integer) J = 347I
'
' L 長整数型 (Long) K = 347L
'
' D 10 進型 (Decimal) H = 347D
'
' F 単精度浮動小数点数型 (Single) Y = 347F
'
' R 倍精度浮動小数点数型 (Double) Z = 347R
'
' C char 型 (Char) Q = "."C
'
'
'ブール型 (Boolean)、バイト型 (Byte)、日付型 (Date)、オブジェクト型 (Object)、
'または文字列型 (String) の各データ型および複合データ型に対応するリテラルの型文字はありません。
'
'リテラルには、変数、定数、および式と同様に、識別子の型文字 (%、&、@、 、#、$) を使用できます。
'ただし、リテラルの型文字 (S、I、L、D、F、R、C) が使用できるのはリテラルだけです。
'
'いずれの場合でも、リテラルの型文字はリテラルの直後に指定する必要があります。
'
Private Sub UserForm_Click()
'{Just a moment}の表示------------------->
Dim bytLabelstr As Long
Dim objME As Object
Dim MeMax As Long
Dim MeNow As Long
MeMax = 100000
Set objME = Me.Label1
For MeNow = 1 To MeMax
bytLabelstr = bytLabelstr + 1
If bytLabelstr = 4000 Then
bytLabelstr = 0
End If
If bytLabelstr <= 2000 Then
objME.Caption = ""
DoEvents
Else
objME.Caption = "Just a moment "
DoEvents
End If
If MeNow = MeMax Then objME.Caption = ""
Next MeNow
Set objME = Nothing
'{Just a moment}の表示------------------->
Public Number As Integer ' 整数型変数をパブリックにします。
Public NameArray(1 To 5) As String
' 配列変数をパブリックにします。
' 1 行で複数の変数を宣言します。
' 2 つのバリアント型変数と 1 つの整数型変数がすべてパブリックになります。
Public MyVar, YourVar, ThisVar As Integer
Sub Hex逆変換()
Const Hex文字 = "%83%7A%81%5B%83%80%83%79%81%5B%83%57%56%45%52%31%30%2E%31"
Debug.Print Hex逆変換関数(Hex文字)
End Sub
Function Hex逆変換関数(ByVal 対象文字 As String) As String
Dim 変換文字() As Byte, 実行数 As Long
実行数 = 0
Do While Len(対象文字) > 0
If Left(対象文字, 1) = "%" Then
ReDim Preserve 変換文字(0 To 実行数)
変換文字(実行数) = Val("&H" & Mid(対象文字, 2, 2)) '基数を示すプリフィックス &O (8 進数) や &H (16 進数) は認識
対象文字 = Right(対象文字, Len(対象文字) - 3)
実行数 = 実行数 + 1
End If
Loop
Hex逆変換関数 = StrConv(変換文字, vbUnicode) '文字列を Unicode に変換
End Function
Sub Hex変換()
Const 文字 As String = "ホームページVER10.1" '定数宣言
Debug.Print Hex変換関数(文字)
End Sub
Function Hex変換関数(ByVal 対象文字 As String)
Dim 変換文字() As Byte, 実行数 As Long
変換文字 = StrConv(対象文字, vbFromUnicode) '文字列を Unicode に変換
For 実行数 = 0 To UBound(変換文字) '配列の指定された次元で使用できる添字の最大値
Hex変換関数 = Hex変換関数 & "%" & Hex(変換文字(実行数))
Next
End Function
Sub test1()
Const 文字 As String = "ホームページVER10.1" '定数宣言
Debug.Print Hex変換関数(文字)
MsgBox Hex変換関数(文字)
End Sub
Function Hex変換関数(ByVal 対象文字 As String)
'*****************************************
'Hex関数 日本語をHex文字に変換
'*****************************************
Dim 変換文字() As Byte, 実行数 As Long
変換文字 = StrConv(対象文字, vbFromUnicode) '文字列を Unicode に変換
For 実行数 = 0 To UBound(変換文字) '配列の指定された次元で使用できる添字の最大値
Hex変換関数 = Hex変換関数 & "%" & Hex(変換文字(実行数))
Next
End Function
Sub test2()
Const Hex文字 = "%83%7A%81%5B%83%80%83%79%81%5B%83%57%56%45%52%31%30%2E%31"
Debug.Print Hex逆変換関数(Hex文字)
MsgBox Hex逆変換関数(Hex文字)
End Sub
Function Hex逆変換関数(ByVal 対象文字 As String) As String
'*****************************************
'Hex関数 Hex文字を日本語に変換
'*****************************************
Dim 変換文字() As Byte, 実行数 As Long
実行数 = 0
Do While Len(対象文字) > 0
If Left(対象文字, 1) = "%" Then
ReDim Preserve 変換文字(0 To 実行数)
'基数を示すプリフィックス &O (8 進数) や &H (16 進数) は認識
変換文字(実行数) = Val("&H" & Mid(対象文字, 2, 2))
対象文字 = Right(対象文字, Len(対象文字) - 3)
実行数 = 実行数 + 1
End If
Loop
Hex逆変換関数 = StrConv(変換文字, vbUnicode) '文字列を Unicode に変換
End Function
Dim MyArray() As Integer ' 動的配列を宣言します。
ReDim MyArray(5) ' 5 要素分の領域を割り当てます。
For i = 1 To 5 ' 5 回、ループします。
MyArray(i) = i ' 配列を初期化します。
Next i
次のステートメントは、配列のサイズを変更して、以前の要素を消去します。
ReDim MyArray(10) ' 配列の要素数を 10 に変更します。
For i = 1 To 10 ' 10 回、ループします。
MyArray(i) = i ' 配列を初期化します。
Next i
次のステートメントでは、以前の要素を消去せずに、配列のサイズを変更します。
Dim cbrCustBar As CommandBar
Dim ctlAutoSum As CommandBarButton
Set cbrCustBar = CommandBars.Add("ユーザー設定")
Set ctlAutoSum = cbrCustBar.Controls _
.Add(msoControlButton, CommandBars("Standard").Controls("AutoSum").ID)
cbrCustBar.Visible = True
ctlAutoSum.Execute
'-------------------------------------------------------------------------------------
'CommandBarControl
Dim cbrCustBar As CommandBar
Dim ctlAutoSum As CommandBarButton
Set cbrCustBar = CommandBars.Add("ユーザー設定")
Set ctlAutoSum = cbrCustBar.Controls _
.Add(msoControlButton, CommandBars("Standard").Controls("AutoSum").ID)
cbrCustBar.Visible = True
ctlAutoSum.Execute
'-------------------------------------------------------------------------------------
'CommandBarPopup
Dim cbrCustBar As CommandBar
Dim ctlAutoSum As CommandBarButton
Set cbrCustBar = CommandBars.Add("ユーザー設定")
Set ctlAutoSum = cbrCustBar.Controls _
.Add(msoControlButton, CommandBars("Standard") _
.Controls("AutoSum").ID)
cbrCustBar.Visible = True
ctlAutoSum.Execute
'-------------------------------------------------------------------------------------
'CommandBarComboBox
Dim cbrCustBar As CommandBar
Dim ctlAutoSum As CommandBarButton
Set cbrCustBar = CommandBars.Add("ユーザー設定")
Set ctlAutoSum = cbrCustBar.Controls _
.Add(msoControlButton, CommandBars("Standard").Controls("AutoSum").ID)
cbrCustBar.Visible = True
ctlAutoSum.Execute
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.Filename = "*.doc"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Dim strFilePath As String
Dim strFileName As String
Dim CommandFileName As String
Dim BatFileName As String
Dim ServerName As String
Dim UserID As String
Dim UserPassword As String
Dim strMode As String 'ascii / binary or asc / bin アスキー / バイナリ
Dim Extension As String
Dim FileNO As Integer 'ファイル番号
Dim CommandFileFullPath As String
Dim BatFileFullPath As String
Dim strTime As String
Dim Interval As Long '定間隔
'16ビット版 Microsoft Windows の場合
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
'SomeBeep をプロシージャ名に対するエイリアスと見なします。
Declare Sub MessageBeep Lib "User" Alias "SomeBeep" (ByVal N As Integer)
'Alias 句で序数を使って、GetWinFlags を呼び出します。
Declare Function GetWinFlags Lib "Kernel" Alias "#132" () As Long
'32ビット版 Microsoft Windows ではUSER32.DLL ライブラリを指定
'16ビット版 Microsoft Windows ではUSER.DLL ライブラリを指定
'16ビット版または32ビット版Windowsのいずれかで実行できるコードを記述。
#If Win32 Then
Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If
Function プロシージャでは、プロシージャのデータ型が戻り値のデータ型になります。関数の戻り値のデータ型は、引数 arglist の後の
As 節で指定します。引数 arglist 内では、As 節を使ってプロシージャに渡す引数のデータ型を指定できます。さらに、引数 arglist
内では、標準のデータ型以外に As Any も指定できます。Any を指定すると、データ型のチェックを抑止し、任意のデータ型をプロシージャに渡せます。
空のかっこは、Sub プロシージャまたは Function プロシージャに引数がないことを示し、プロシージャには何も渡されません。次の例では、Sub
プロシージャ First には引数がありません。引数を指定して First を呼び出すと、エラーが発生します。
Declare Sub First Lib "MyLib" ()
引数リストを指定すると、プロシージャが呼び出されるたびに引数の個数とデータ型がチェックされます。次の例では、Sub プロシージャ First
は長整数型 (Long) の引数を 1 つ受け取ります。
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
' SomeBeep をプロシージャ名に対するエイリアスと見なします。
Declare Sub MessageBeep Lib "User" Alias "SomeBeep" (ByVal N As Integer)
' Alias 句で序数を使って、GetWinFlags を呼び出します。
Declare Function GetWinFlags Lib "Kernel" Alias "#132" () As Long
32 ビット版 Microsoft Windowsの場合
' 32 ビット版 Microsoft Windows では、USER.DLL ライブラリではなく、
' USER32.DLL ライブラリを指定します。条件付きコンパイルを使えば、
' 16 ビット版または 32 ビット版 Windows のいずれかで実行できるコードを、
' 記述できます。
#If Win32 Then
Declare Sub MessageBeep Lib "User32" (ByVal N As Long)
#Else
Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
#End If
'①Win32 API関数を使い終了を認識する
Public Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessID As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400
Function TaskQuitForAPI(strTaskPath As String) As Boolean
'******************************************************
'Shell関数で実行したアプリ(タスク)の終了を認識する関数
'******************************************************
'上記Win32 API 関数を使用
'本関数内でShellを実行している為、返値は何でも良いがBooleanを使用
Dim dwProcessID As Long
Dim hProcess As Long
Dim lpdwExitCode As Long
Dim ret As Long
Do
'プロセスの終了ステータスを取得
ret = GetExitCodeProcess(hProcess, lpdwExitCode)
'終了するまで待機
DoEvents
Loop While lpdwExitCode
'++++++++++++++++++++++++++++++
'ここまで来るとLoopを抜けたので
'++++++++++++++++++++++++++++++
TaskQuitForAPI = True '返値を返す
End Function
Private Sub test()
Dim strPath As String
'メモ帳のパス
strPath = """C:\WINDOWS\NOTEPAD.EXE"""
If TaskQuitForAPI(strPath) = True Then
MsgBox "タスク" & vbCr & strPath & vbCr & "終了しました。"
End If
Function TaskQuitForWSH(strTaskPath As String) As Boolean
'******************************************************
'Shell関数で実行したアプリ(タスク)の終了を認識する関数
'******************************************************
'WScript.Shell(Windows Scripting Host)Runメソッドを使用
'本関数内でShellを実行している為、返値は何でも良いがBooleanを使用
Sub Shellbat()
'**************************************************
'VB/VBAからShell関数を使い.batを実行する
'**************************************************
'注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant
If RetVal <> 0 Then
MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If
'注意⑤実行は確認出来ますが終了は確認出来ません。
'注意⑥終了を確認するにはAPI関数やWSHを使用する方法しかありません。
End Sub
Sub Shellvbs()
'**************************************************
'VB/VBAからShell関数を使い.vbsを実行する
'**************************************************
'上記注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant
strPath = "C:\Temp\test.vbs"
RetVal = Shell("WScript.exe """ & strPath & """")
If RetVal <> 0 Then
MsgBox strPath & vbCr & "実行されました。", vbInformation, "[タスクID]" & RetVal
Else
MsgBox strPath & vbCr & "実行出来ません。", vbCritical, "[ERROR]"
End If
End Sub
Sub Shelljs()
'**************************************************
'VB/VBAからShell関数を使い.jsを実行する
'**************************************************
'上記注意①~⑥必須
Dim strPath As String
Dim RetVal As Variant
Option Explicit
Function CMDcommandResultGet(strCommand As String) As String
'********************************************************
'リダイレクトを使わず直接コマンドの実行結果を取得する①
'********************************************************
'Windows Scripting Host(WSH)-WshShell-Execメソッド
'Functionで全ての値を取得(StdOut/stderr)
Dim WshShell As Object
Dim oExec As Object
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%ComSpec% /c " & strCommand) 'Exec メソッド
If Not oExec.StdOut.AtEndOfStream Then 'StdOut プロパティ'AtEndOfStream プロパティ
CMDcommandResultGet = oExec.StdOut.ReadAll 'ReadAll メソッド
Exit Function
End If
If Not oExec.stderr.AtEndOfStream Then 'stderr プロパティ'AtEndOfStream プロパティ
CMDcommandResultGet = oExec.stderr.ReadAll 'ReadAll メソッド
Exit Function
End If
End Function
Sub CommandResultGet(ByVal strCommand As String, ByRef blnERR As Boolean, _
ByRef strRead As String)
'********************************************************
'リダイレクトを使わず直接コマンドの実行結果を取得する②
'********************************************************
'Windows Scripting Host(WSH)-WshShell-Execメソッド
'Call-Subでエラー値も取得(StdOut/stderr)
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("%ComSpec% /c " & strCommand) 'Exec メソッド
If Not oExec.StdOut.AtEndOfStream Then 'StdOut プロパティ'AtEndOfStream プロパティ
strRead = oExec.StdOut.ReadAll 'ReadAll メソッド
blnERR = False '返値
Exit Sub
End If
If Not oExec.stderr.AtEndOfStream Then 'stderr プロパティ'AtEndOfStream プロパティ
strRead = oExec.stderr.ReadAll 'ReadAll メソッド
blnERR = True '返値
Exit Sub
End If
End Sub
Private Sub test1() '①
Dim strCommand As String
Option Explicit
Sub FTPautoTaskRegist(CDpath As String, LCDpath As String, strTime As String)
'***************************************
'FTPexeを使いタスク登録し指定時刻に実行
'***************************************
'CDpath UPするサーバアドレス 例[www/test/]
'LCDpath UPされるファイルがあるローカルアドレス 例[C:\Temp\アップ]
'strTime UP時刻 例[20:00](小文字必須)
Dim strFilePath As String
Dim strFileName As String
Dim CommandFileName As String
Dim BatFileName As String
Dim ServerName As String
Dim UserID As String
Dim UserPassword As String
Dim strMode As String 'ascii / binary or asc / bin アスキー / バイナリ
Dim Extension As String
Dim FileNO As Integer 'ファイル番号
Dim CommandFileFullPath As String
Dim BatFileFullPath As String
Close #FileNO 'ファイルを閉じる
'---------------------------------------------------------------------
'作成した実行バッチファイルをタスクに登録 ③
Dim cmd(6) As String
Dim RetVal As Variant
Dim batPath As String
open jp-ia.com
user xxxx zzzzzz
hash
ascii
cd www/test/
lcd C:\Temp\アップ
mput *.htm
②20100106_175715.bat の中身
set cmdTxtPath=C:\Temp\20100106_175715.txt
set cmdLogPath=C:\Temp\ftplog
set cmdDateA=%date%
set cmdDateB=%cmdDateA:~0,4%%cmdDateA:~-5,2%%cmdDateA:~-2,2%
set cmdTimeA=%time: =0%
set cmdTimeB=%cmdTimeA:~0,2%%cmdTimeA:~3,2%%cmdTimeA:~6,2%
MkDir "%cmdLogPath%\"
ftp -vni -s:%cmdTxtPath%>%cmdLogPath%\%cmdDateB%_%cmdTimeB%.txt
del %cmdTxtPath%
C:\Temp\ftplog\20100106_175900.txt ログの中身
ftp> ftp> open jp-ia.com
ftp> user xxxx zzzzzz
Hash mark printing On ftp: (2048 bytes/hash mark) .
ftp> hash
ftp> ascii
ftp> cd www/test/
Local directory now C:\Temp\アップ.
Dim PublicSetTime As Date
Sub OnTimeSample1()
'***********************************************
'現在から~秒後にプロシージャを実行する
'***********************************************
Dim SetTime As Date
SetTime = "00:00:05"
Application.OnTime Now + TimeValue(SetTime), "OnTimeTestSub"
End Sub
Sub OnTimeSample2()
'***********************************************
'~時にプロシージャを実行する
'***********************************************
Dim SetTime As Date
SetTime = "09:30:00"
PublicSetTime = SetTime 'OnTimeSample3用
Application.OnTime TimeValue(SetTime), "OnTimeTestSub"
End Sub
Sub OnTimeSample3()
'***********************************************
'OnTimeメソッドの設定を取り消す
'***********************************************
'OnTimeSample2を取り消す
Application.OnTime EarliestTime:=TimeValue(PublicSetTime), _
Procedure:="OnTimeTestSub", Schedule:=False '※①
End Sub
Sub OnTimeTestSub()
MsgBox "実行しました!"
End Sub
'#パラメータ
Const ComponentsPath As String = "C:\VBAbas\"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'****************************************************
'閉じる前に実行するイベント
'****************************************************
End Sub
Private Sub Workbook_Open()
'****************************************************
'ModuleやClass・UserFormを一覧から自動インポートする
'****************************************************
'本ブックと同じ階層にテキストを保存。
'行毎に記入の事
'全て「ThisWorkbook」に記述のこと
'#パラメータ
Dim TxtPath As String, i As Long
Dim CharacterDB() As String
'指定ファイルの存在を確認する
If FileExistence(TxtPath) = False Then
MsgBox "Not File! " & TxtPath
Exit Sub
End If
'指定ファイルを読み込む
Call FileInput(TxtPath, CharacterDB())
'Moduleをインポートする
For i = LBound(CharacterDB) To UBound(CharacterDB)
ComponentImport (CharacterDB(i))
Next i
'End If
End Sub
Private Function FileExistence(TxtPath As String) As Boolean
'**************************************************
'指定ファイルの存在を確認する
'**************************************************
If Dir(TxtPath) = "" Then
FileExistence = False
Else
FileExistence = True
End If
End Function
Private Sub FileInput(ByVal TxtPath As String, ByRef CharacterDB() As String)
'**************************************************
'指定ファイルを1行づつ読み込む
'**************************************************
Dim CharacterString As String
Dim FileNumber As Integer, i As Long
FileNumber = FreeFile
Open TxtPath For Input As #FileNumber
Do Until EOF(FileNumber) '末尾に達するまで
'取得文字を変数CharacterStringに格納
Line Input #FileNumber, CharacterString
'文字があるか確認
If Len(CharacterString) > 0 Then
'処理
ReDim Preserve CharacterDB(i)
CharacterDB(i) = (ComponentsPath & CharacterString)
i = i + 1
End If
Loop
Close #FileNumber
End Sub
Private Sub ComponentImport(ComponentsPathName As String)
'**************************************************
'ModuleやClass・UserFormをインポートする
'**************************************************
'定数 ComponentsPathName:bas等の格納パス&名前
If Dir(ComponentsPathName) = "" Then
MsgBox "Not Module! " & ComponentsPathName
Exit Sub
Else
ThisWorkbook.VBProject.VBComponents.Import ComponentsPathName
End If
End Sub
Private Sub ComponentsDelete()
'************************************
'ModuleやClass・UserFormを削除する
'************************************
'※自分も削除されます。ここでは.Type=100以外なので削除されません。
'NoDeleteObjTyp:削除非対象コレクション
'1 :Module
'2 :ClassModule
'3 :UserForm
'100:Workbook & Sheet
Application.StatusBar = "ComponentsDelete......"
Dim Obj As Object, NoDeleteObjTyp As Integer
NoDeleteObjTyp = 100
For Each Obj In ThisWorkbook.VBProject.VBComponents
If Obj.Type <> NoDeleteObjTyp Then
ThisWorkbook.VBProject.VBComponents.Remove Obj
End If
Next Obj
End Sub
Sub ThisProJectComponentCopy()
'ObjectName:M_ThisProJectComponentCopy
'***************************************
'実行プロシージャ
'***************************************
Dim TxtPath As String
'Dim ComponentPath As String
TxtPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name & ".txt"
Dim ComponentsName() As String
Dim str As String, i As Integer
'現在のComponent一覧取得
Call ComponentsGetName(ComponentsName)
'前回のテキスト削除
FileKill TxtPath
'新規テキスト入力
For i = LBound(ComponentsName) To UBound(ComponentsName)
FileAppend TxtPath, ComponentsName(i)
Next i
'Componentを全てエクスポート(コピー)する
ComponentsExport ComponentsPath
End Sub
Sub ComponentsExport(ObjPath As String)
'ObjectName:M_ComponentsExport
'***************************************************************
'ModuleやClass・UserFormを別ファイルにエクスポート(コピー)する
'***************************************************************
'※自分もコピーされます。
'※対象はプロジェクト全体
'ExportObjTyp:対象コレクション
Dim Obj As Object, ExportObjTyp As Integer
Dim ObjName As String '対象コレクション名
For Each Obj In ThisWorkbook.VBProject.VBComponents
If Obj.Type = ExportObjTyp Then
ObjName = Obj.Name
Obj.Export (ObjPath & ObjName & Extension(ExportObjTyp))
End If
Next Obj
End Sub
Sub ComponentsGetName(ByRef ComponentsName() As String)
'ObjectName:M_ComponentsGetName
'***************************************************************
'ModuleやClass・UserForm名を取得する
'***************************************************************
'※自分も対象にされます。
'※対象はプロジェクト全体
'ObjTyp:対象コレクション
Dim Obj As Object, ObjTyp As Integer
Dim i As Integer
For Each Obj In ThisWorkbook.VBProject.VBComponents
If Obj.Type = ObjTyp Then
ReDim Preserve ComponentsName(i)
ComponentsName(i) = Obj.Name & Extension(ObjTyp)
i = i + 1
End If
Next Obj
End Sub
Sub FileKill(DelPath As String)
'ObjectName:M_FileKill
'*********************************
'Killを使用しファイルを削除
'*********************************
On Error Resume Next
Kill DelPath
On Error GoTo 0
End Sub
Sub FileAppend(TxtPath As String, str As String)
'ObjectName:M_FileAppend
'*******************************************************************************
'指定パスのテキストファイルに追加
'*******************************************************************************
Dim n As Long
n = FreeFile '使われていないファイル番号を自動的に割り振る
Open TxtPath For Append As #n
Print #n, str
Close #n
' キーワード 処理 モード
' Input 読み込み 入力モード
' Output 書き込み 出力モード
' Append 書き込み 追加モード
' Random 読み込み/書き込み ランダムアクセスモード(データベースの
' データファイルにアクセスするモード)
' Binary 読み込み/書き込み バイナリモード(ファイルのデータを一気
' に読み込む)
End Sub
Sub OpenExcelCount()
Dim I, ThisName As String, A As Boolean
A = False
ThisName = ThisWorkbook.Name
If Workbooks.Count <> 1 Then
MsgBox "既に開かれているブックが " & Workbooks.Count - 1 & " 個あります。" & vbCr & vbCr & "閉じてから実行してください。", vbCritical, ThisName
A = True
For Each I In Workbooks
If ThisName <> I.Name Then
MsgBox I.Name & "を閉じてください。", vbCritical, ThisName
End If
Next
End If
If A = True Then
MsgBox "一旦" & ThisWorkbook.Name & "を閉じます。", vbCritical, ThisWorkbook.Name
ThisWorkbook.Close
End If
End Sub
Public Function fnc製品モード() As Boolean
'*******************************************************************************
'開発モード/製品モード(納品時に変更)
'*******************************************************************************
fnc製品モード = False
End Function
Public Sub 画面を更新しない()
'*******************************************************************************
'画面を更新しない
'*******************************************************************************
Application.ScreenUpdating = False
End Sub
Public Sub 画面を更新する()
'*******************************************************************************
'画面を更新する
'*******************************************************************************
Application.ScreenUpdating = True
End Sub
Public Sub キーボード操作禁止()
'*******************************************************************************
'キーボード操作禁止
'*******************************************************************************
Application.Interactive = False
End Sub
Public Sub キーボード操作禁止解除()
'*******************************************************************************
'キーボード操作禁止解除
'*******************************************************************************
Application.Interactive = True
End Sub
Public Sub アプリ表示()
'*******************************************************************************
'アプリ表示
'*******************************************************************************
Application.Visible = True
End Sub
Public Sub アプリ非表示()
'*******************************************************************************
'アプリ非表示
'*******************************************************************************
Application.Visible = False
End Sub
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' 電卓を実行します。
AppActivate ReturnValue ' 電卓をアクティブにします。
For I = 1 To 20 ' ループ カウンタを設定します。
SendKeys I & "{+}", True ' 電卓にキー コードを転送して、
Next I ' I の値に 1 を加算します。
SendKeys "=", True ' 和を求めます。
SendKeys "%{F4}", True ' Alt + F4 キーを転送して電卓を終了します。
Option Explicit
Sub ImportComponent(strPath As String)
'***********************************************
'制御 ModuleやClass・UserFormをインポートする
'***********************************************
End Sub
Private Sub basImport(basPath As String)
'**************************************************
'ModuleやClass・UserFormを一覧からインポートする
'**************************************************
'引数 basPath:指定テキストファイル
'定数 basFlPath:bas等の格納パス
Dim i, str As String, basName As String
Dim basFlPath As String
basFlPath = "C:\VBAbas\" '#パラメータ
DeleteComponents
If Dir(basPath) = "" Then
MsgBox "Not File! " & basPath
Exit Sub
End If
i = FreeFile
Open basPath For Input As #i
Do Until EOF(i)
Line Input #i, str
If Len(str) > 0 Then
basName = basFlPath & str
If Dir(basName) = "" Then
MsgBox "Not Module! " & basName
Exit Do
Else
ImportComponent basName
End If
End If
Loop
Close #i
ThisWorkbook.Save
End Sub
Private Sub ImportComponent(strPath As String)
'***********************************************
'ModuleやClass・UserFormをインポートする
'***********************************************
End Sub
Private Sub DeleteComponents()
'************************************
'ModuleやClass・UserFormを削除する
'************************************
'※自分も削除されます。
'NoDeleteObjTyp:削除非対象コレクション
'1 :Module
'2 :ClassModule
'3 :UserForm
'100:Workbook & Sheet
Dim Obj As Object, NoDeleteObjTyp As Integer
NoDeleteObjTyp = 100
For Each Obj In ThisWorkbook.VBProject.VBComponents
If Obj.Type <> NoDeleteObjTyp Then
ThisWorkbook.VBProject.VBComponents.Remove Obj
End If
Public Sub psb変更有無調査確認保存(Mybook As Workbook, MySheet As Worksheet)
'*******************************************************************************
'変更有無調査確認保存
'*******************************************************************************
Dim str(3) As String
If Mybook.Saved = False Then 'False(変更を未保存)なら
str(1) = "行った処理を有効にしますか?"
str(2) = "※[いいえ]を選択した場合、行った処理は破棄されます。"
str(3) = fncブック名(Mybook)
If MsgBox(str(1) & vbCr & vbCr & str(2), vbExclamation + vbYesNo, str(3)) = vbYes Then
Call psbブック保護(Mybook)
Call psbシート保護(MySheet)
Mybook.Save '上書き保存
Application.DisplayAlerts = False 'メッセージを出さない
Mybook.Close '閉じる
Else
Application.DisplayAlerts = False 'メッセージを出さない
Mybook.Close '閉じる
End If
Else
Mybook.Close
End If
End Sub
Option Explicit
Sub PropertyFileInFolder()
'*******************************************************
'指定フォルダ内のすべてのファイルの拡張プロパティを取得
'*******************************************************
'JPGやMP3ファイルのプロパティを取得
'2010.03若干修正
Dim objCRT As Object, objFldr As Object, i As Byte
Dim strPrprty(40) As String 'ファイル情報の項目名をセット
Dim strFlNm As Object, str As String, folPath As Variant
folPath = "C:\Air Supply"
'ActiveX オブジェクトへの参照
Set objCRT = CreateObject("Shell.Application")
'名前空間の名前を宣言
Set objFldr = objCRT.Namespace("" & folPath & "")
For i = 0 To 40
'ファイル情報の項目名をセット(取得).Items
'[GetDetailsOf]ファイル情報を取得(ファイル名.Items,情報番号)
strPrprty(i) = objFldr.GetDetailsOf(objFldr.Items, i)
Next
For Each strFlNm In objFldr.Items
str = "" 'クリア
For i = 0 To 40
str = str & i & vbTab & strPrprty(i) _
& vbTab & objFldr.GetDetailsOf(strFlNm, i) & vbCr
'[GetDetailsOf]ファイル情報を取得(ファイル名,情報番号)
Next
MsgBox str
Debug.Print str
Next
'【MP3表示項目一覧】
'0 名前 02 Even the Nights Are Better.mp3
'1 サイズ 4,525 KB
'2 種類 MP3 形式サウンド
'3 更新日時 2009/04/07 8:19
'4 作成日時 2008/09/08 8:21
'5 アクセス日時 2009/10/14 16:24
'6 属性 a
'7 状態 オンライン
'8 所有者 --------
'9 作成者 Air Supply
'10 タイトル Even the Nights Are Better
'11 表題
'12 カテゴリ Rock
'13 ページ数
'14 コメント
'15 著作権
'16 アーティスト Air Supply
'17 アルバムのタイトル Now And Forever
'18 年 1982
'19 トラック番号 2
'20 ジャンル Rock
'21 長さ 0:03:58
'22 ビット レート 192kbps
'23 保護 いいえ
'24 カメラのモデル
'25 写真の撮影日
'26 大きさ
'27
'28
'29 この回のタイトル
'30 プログラムの説明
'31
'32 オーディオ サンプル サイズ 0 ビット
'33 オーディオ サンプル レート 44 KHz
'34 チャンネル
'35 会社名
'36 説明
'37 ファイル バージョン
'38 製品名
'39 製品バージョン
'40 キーワード
End Sub
Sub ファイルの一覧を取得する()
'*******************************************************************************
'ファイルの一覧を取得する
'*******************************************************************************
Dim buf As String, i As Byte, strPath As Variant
Dim strPthNm As String
strPath = "C:\Air Supply"
buf = Dir(strPath & "\")
Do While buf <> ""
For i = 0 To 33
MsgBox FileProperty(strPath, buf, i)
Next i
buf = Dir()
Loop
End Sub
Function FileProperty(strPath As Variant, strFileName As String, PropertyNo As Byte) As String
'*******************************************************
'指定ファイルの拡張プロパティを取得
'*******************************************************
'JPGやMP3ファイルのプロパティを取得
Dim objCRT As Object, objFldr As Object, objFldrItm As Object
'ActiveX オブジェクトへの参照
Set objCRT = CreateObject("Shell.Application")
''名前空間の名前を宣言
Set objFldr = objCRT.Namespace("" & strPath & "")
Set objFldrItm = objFldr.ParseName(strFileName)
Dim wbPersonal
Dim wbPersonal1
Dim BookPath As String
Dim PathBOK As String
Dim TrgtBOK As String
Dim TrgtBOK1 As String
PathBOK = ".xls"
TrgtBOK = ".xls"
TrgtBOK1 = ".xls"
On Error Resume Next
Set wbPersonal = Workbooks(TrgtBOK)
Set wbPersonal1 = Workbooks(TrgtBOK1)
On Error GoTo 0
If IsObject(wbPersonal) Then
MsgBox wbPersonal.Name & _
"はすでに開いています。OKボタンを押してください。", vbCritical, "注意"
Workbooks(TrgtBOK).Close SaveChanges:=False
End If
If IsObject(wbPersonal1) Then
MsgBox wbPersonal1.Name & _
"はすでに開いています。OKボタンを押してください。", vbCritical, "注意"
Workbooks(TrgtBOK1).Close SaveChanges:=False
End If
Set wbPersonal = Nothing
Set wbPersonal1 = Nothing
'パス取得
BookPath = Workbooks(PathBOK).Path
'必要ファイルをオープン
With Workbooks
.Open Filename:=BookPath & "\" & TrgtBOK, ReadOnly:=False
End With
'必要ファイルをオープン
With Workbooks
.Open Filename:=BookPath & "\" & TrgtBOK1, ReadOnly:=False
End With
End Sub
Private Sub UserForm_QueryClose(CANCEL As Integer, CloseMode As Integer)
'×ボタン制御
If CloseMode = 0 Then
MsgBox "{ CLOSE }ボタンで閉じて下さい", vbExclamation, "jp-ia"
CANCEL = True
End If
End Sub
Private Sub CommandButton8_Click()
'終了ボタン
'メッセージ
If MsgBox("システムを終了します。", vbOKCancel, "システム終了") = _
vbCancel Then Exit Sub
Option Explicit
Sub ImportComponent(strPath As String)
'***********************************************
'制御 ModuleやClass・UserFormをインポートする
'***********************************************
Option Explicit
Sub RefRemoveAcquisition()
'**************************************
'参照設定されているライブラリを検索取得
'**************************************
Dim objBok As Workbook
Dim objReferences As Object
Dim strMSG As String
Dim strRefName As String
Dim strRefDscrp As String
Set objBok = ThisWorkbook
For Each objReferences In objBok.VBProject.References
strRefName = objReferences.Name
strRefDscrp = objReferences.Description
strMSG = strMSG & strRefName & vbTab & strRefDscrp & vbCr
Debug.Print strRefName & "[" & strRefDscrp & "]"
Next objReferences
MsgBox strMSG, 0, "参照設定済ライブラリ"
'【Description】
' オブジェクトに関連付けられている説明の文字列を設定又は取得
End Sub
Sub add_ref()
Application.VBE.activeVBProject.References. _
AddFromFile "c:\program files\microsoft office\office\msacc8.olb"
End Sub
'Rem Microsoft Access 8.0 Object Library を参照設定削除
Sub del_ref()
Application.VBE.activeVBProject.References.Remove _
Application.VBE.activeVBProject.References("Access")
End Sub
'Rem 新規ブックにDAO3.5 参照設定追加
Sub add_ref2()
Application.VBE.activeVBProject.References. _
AddFromFile "c:\program files\common files\microsoft shared\dao\dao3032.dll"
End Sub
'Rem 指定ブックにDAO3.5 参照設定追加
Sub add_ref3()
Workbooks(指定ブック).VBProject.References. _
AddFromFile "c:\program files\common files\microsoft shared\dao\dao3032.dll"
End Sub
'****************************************************
'比較演算子サンプル
'****************************************************
Dim a As Long, b As Byte, c(6, 3) As String, d As Byte
a = 10: b = 3
For d = 1 To UBound(c, 1)
c(d, 3) = False
Next d
c(1, 1) = "=": c(1, 2) = "等しい": If a = b Then c(1, 3) = True
c(2, 1) = "<>": c(2, 2) = "違う": If a <> b Then c(2, 3) = True
c(3, 1) = "<": c(3, 2) = "右より小さい": If a < b Then c(3, 3) = True
c(4, 1) = "<=": c(4, 2) = "右より以下": If a <= b Then c(4, 3) = True
c(5, 1) = ">": c(5, 2) = "右より大きい": If a > b Then c(5, 3) = True
c(6, 1) = ">=": c(6, 2) = "右より以上": If a >= b Then c(6, 3) = True
For d = 1 To UBound(c, 1)
MsgBox a & c(d, 1) & b & " = " & c(d, 3) & " です。", 0, "【" & c(d, 2) & "】"
Next d
'****************************************************
'論理演算子サンプル
'****************************************************
Dim a As Long, b As Byte, c(3, 3) As String, d As Byte, e As Byte
a = 10: b = 10: e = 5
For d = 1 To UBound(c, 1)
c(d, 3) = False
Next d
c(1, 1) = "And": c(1, 2) = "全て一致": If a = b And a = e Then c(1, 3) = True
c(2, 1) = "Or": c(2, 2) = "何れか一致": If a = b Or a = e Then c(2, 3) = True
c(3, 1) = "Not": c(3, 2) = "違えばOK": If Not a = b Then c(3, 3) = True
For d = 1 To UBound(c, 1)
MsgBox c(d, 1) & " = " & c(d, 3) & " です。", 0, "【" & c(d, 2) & "】"
Next d
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'*******************************************************************************
'印刷不可能にする
'*******************************************************************************
Dim tit As String, sty As Byte, str As String
Dim msg As Variant
Cancel = True
tit = "Not Print!"
sty = vbExclamation
str = "印刷出来ません"
msg = MsgBox(str, sty, tit)
End Sub
Sub 幅と高さを1ページに収まるように印刷する()
'*****************************
'幅と高さを1ページに収める
'*****************************
With Worksheets("SSS").PageSetup
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With
ActiveSheet.PrintPreview '印刷(プリント)プレビュー
End Sub
'****************************************************
'算術演算子サンプル
'****************************************************
Dim a As Long, b As Byte, c(7, 3) As String, d As Byte
a = 10: b = 3
c(1, 1) = "+": c(1, 2) = "加算式": c(1, 3) = a + b
c(2, 1) = "-": c(2, 2) = "減算式": c(2, 3) = a - b
c(3, 1) = "*": c(3, 2) = "乗算式": c(3, 3) = a * b
c(4, 1) = "/": c(4, 2) = "除算式": c(4, 3) = a / b
c(5, 1) = "\": c(5, 2) = "除算商": c(5, 3) = a \ b
c(6, 1) = "Mod": c(6, 2) = "除算余": c(6, 3) = a Mod b
c(7, 1) = "^": c(7, 2) = "べき乗": c(7, 3) = a ^ b
For d = 1 To UBound(c, 1)
MsgBox a & c(d, 1) & b & " = " & c(d, 3) & " です。", 0, "【" & c(d, 2) & "】"
Next d
'Property Get ステートメントの構文は、次の指定項目から構成されます。
'
'指定項目
'Public
'Private
'Friend
'Static
'name
'arglist
'Type
'
'
'Statements
'expression
'
'引数 arglist は、次の形式で指定します。
'
'[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
'
'指定項目
'Optional
'ByVal
'ByRef
'ParamArray
'varname
'type
'defaultvalue
'
'解説
'
'キーワード Public、Private、または Friend を指定しない場合、Property プロシージャは、既定のパブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Property プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。
'
'実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Property Get プロシージャをほかの Property プロシージャ、Sub プロシージャ、Function プロシージャの中で定義することはできません。
'
'Exit Property ステートメントは、Property Get プロシージャを直ちに終了させます。プログラムの実行は、その Property Get プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Property ステートメントは、Property Get プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。
'
'Sub プロシージャおよび Property Let プロシージャと同様に、Property Get プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更できる独立したプロシージャです。ただし、Sub プロシージャまたは Property Let プロシージャとは異なり、Property Get プロシージャは、プロパティの値を返す必要がある場合、Function プロシージャやプロパティ名と同じように式の右辺に記述できます。
'
'Property Get ステートメントの使用例()
'
'次の例では、Property Get ステートメントを使って、プロパティの値を取得するための Property プロシージャを定義します。このプロパティは、現在のペンの色を文字列で示します。
Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3
' 現在のペンの色を示す文字列を返します。
Property Get PenColor() As String
Select Case CurrentColor
Case RED
PenColor = "Red"
Case GREEN
PenColor = "Green"
Case BLUE
PenColor = "Blue"
End Select
End Property
' 次のコードでは、Property Get プロシージャを呼び出して、
' ペンの色を取得しています。
ColorName = PenColor
'Property Let プロシージャの名前、引数、およびプロシージャの本体を構成するコードを宣言します。Property Let プロシージャは、プロパティに値を設定します。
'
'構文
'
'[Public | Private | Friend] [Static] Property Let name ([arglist,] value)
'[statements]
'[Exit Property]
'[statements]
'Property Let ステートメントの構文は、次の指定項目から構成されます。
'
'指定項目
'Public
'Private
'Friend
'Static
'name
'arglist
'Value
'statements
'
'引数 arglist は、次の形式で指定します。
'
'[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
'
'指定項目
'Optional
'ByVal
'ByRef
'ParamArray
'varname
'type
'defaultvalue
'
'メモ Property Let ステートメントを使って定義するプロシージャには、引数が少なくとも 1 つは必要です。この引数 (引数が 2 つ以上ある場合は一番最後の引数) には、Property Let ステートメントによって定義されるプロシージャが呼び出されたときに、プロパティに設定される実際の値が設定されます。この引数は、上記の構文の引数 value として参照されます。
'
'解説
'
'キーワード Public、Private、または Friend を用いて明示的に指定しない場合、Property プロシージャは、パブリック プロシージャになります。キーワード Static を指定しない場合、ローカル変数の値は、Property プロシージャの実行が終了すると破棄されます。キーワード Friend は、クラス モジュール内でのみ使えます。ただし、Friend を指定したプロシージャは、プロジェクト内のすべてのモジュールのプロシージャから呼び出せます。Friend を指定したプロシージャは、親クラスのタイプ ライブラリには書き込まれません。また、実行時バインディングは行えません。
'
'実行可能なコードは、すべてプロシージャ内に記述する必要があります。また、Property Let プロシージャは、ほかの Property プロシージャ、Sub プロシージャ、Function プロシージャの中では定義できません。
'
'Exit Property ステートメントは、Property Let プロシージャを直ちに終了させます。プログラムの実行は、その Property Let プロシージャを呼び出したステートメントの次のステートメントから続行されます。Exit Property ステートメントは、Property Let プロシージャ内の任意の場所に、必要に応じていくつでも記述できます。
'
'Function プロシージャおよび Property Get プロシージャと同様に、Property Let プロシージャは、引数を受け取り、一連のステートメントを実行して、引数の値を変更できる独立したプロシージャです。ただし、値を返す Function プロシージャまたは Property Get プロシージャとは異なり、Property Get プロシージャは値を返さないため、プロパティの値を設定する式または Let ステートメントの左辺にしか記述できません。
'
'Property Let ステートメントの使用例
'
'次の例では、Property Let ステートメントを使って、プロパティに値を代入するプロシージャを定義します。プロパティの値は描画パッケージのペンの色を示します。
Dim CurrentColor As Integer
Const BLACK = 0, RED = 1, GREEN = 2, BLUE = 3
' 描画パッケージのペン色を指定するプロパティを設定します。
' モジュール レベル変数 CurrentColor には、
' 描画に用いられる色を指定する数値が設定されます。
Property Let PenColor(ColorName As String)
Select Case ColorName ' 色の名前を調べます。
Case "Red"
CurrentColor = RED ' 赤に対応する値を代入します。
Case "Green"
CurrentColor = GREEN ' 緑に対応する値を代入します。
Case "Blue"
CurrentColor = BLUE ' 青に対応する値を代入します。
Case Else
CurrentColor = BLACK ' 既定値を代入します。
End Select
End Property
' 次のコードでは、Property Let プロシージャを呼び出して
' 描画パッケージの PenColor プロパティの値を設定します。
Sub RefRemove()
'*****************************
'追加されている参照設定を解除
'*****************************
'解除する参照設定が判明している場合
Dim objBok As Workbook
Dim objReferences As Object
Dim strFoundName As String
strFoundName = "Microsoft DAO 3.6 Object Library"
Set objBok = ThisWorkbook
'既に解除されててもエラーは発生しません。
'存在しないLibraryを指定してもエラーは発生しません。
On Error GoTo ONERR:
With objBok.VBProject
For Each objReferences In objBok.VBProject.References
If objReferences.Description = strFoundName Then
.References.Remove objReferences
End If
Next objReferences
End With
Exit Sub
'次の表は、組み込みのドキュメント プロパティの ID 番号と名前の一覧です。
'
'ID 番号 名前 ローカル名
'1 Title タイトル
'
'2 Subject サブタイトル
'
'3 Author 作成者
'
'4 Keywords キーワード
'
'5 Comments コメント
'
'6 Template テンプレート
'
'7 Last Author 更新者
'
'8 Revision Number 改訂番号
'
'9 Application Name アプリケーション名
'
'10 Last Print Date 印刷日時
'
'11 Creation Date 作成日時
'
'12 Last Save Time 更新日時
'
'13 Total Editing Time 編集時間
'
'14 Number of Pages ページ数
'
'15 Number of Words 単語数
'
'16 Number of Characters 文字数
'
'17 Security セキュリティ
'
'18 Category 分類
'
'19 Format 形式
'
'20 Manager 管理者
'
'21 Company 会社名
'
'22 Number of Bytes バイト数
'
'23 Number of Lines 行数
'
'24 Number of Paragraphs 段落数
'
'25 Number of Slides スライドの数
'
'26 Number of Notes メモの数
'
'27 Number of Hidden Slides 非表示スライドの数
'
'28 Number of Multimedia Clips マルチメディア クリップの数
'
'29 Hyperlink base ハイパーリンクの基点
'
'30 Number of Charactors (with space) 文字数 (スペースを含む)
'
'コンテナ アプリケーションでは、すべての組み込みのドキュメント プロパティに対して値が定義されているわけではありません。
'目的のアプリケーションで組み込みのドキュメント プロパティの値が定義されていない場合、
'そのドキュメント プロパティに対する Value プロパティを取得すると、エラーが発生します。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'BuiltinDocumentProperties プロパティの使用例
'
'次の使用例は、組み込みのドキュメント プロパティの名前のリストを、ワークシート 1 に作成します。
Dim rw, p, a
rw = 1
Worksheets(1).Activate
For Each p In ActiveWorkbook.BuiltinDocumentProperties
Cells(rw, 1).Value = p.Name
rw = rw + 1
Next
For a = 1 To rw - 1
On Error Resume Next
p = Me.BuiltinDocumentProperties(Cells(a, 1).Value)
Cells(a, 2).Value = p
EE:
Next a
End Sub
Public Declare Function GetTickCount Lib "kernel32.dll" () As Long
Sub TimeAfterSystemStart()
'************************************
'システム起動後の経過時間を取得する
'************************************
'ミリ秒=1,000分の1秒
Dim dbl_Second As Double
Dim j As Long
Dim sht As Worksheet
Private Sub CommandBarGet()
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBar
For Each Bar In Application.CommandBars
i = i + 1
Debug.Print i & " - " & Bar.Name
Next
End Sub
Private Sub CommandBarControlGet()
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
Set objCommandBar = Application.CommandBars("Worksheet Menu Bar")
For Each Bar In objCommandBar.Controls
i = i + 1
Debug.Print i & " - " & Bar.Caption
Next
End Sub
Private Sub CommandBarControlMenuGet()
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
Set objCommandBar = Application.CommandBars("Worksheet Menu Bar")
Dim objCommandBarPopup As CommandBarPopup
Set objCommandBarPopup = objCommandBar.Controls("ファイル(&F)")
For Each Bar In objCommandBarPopup.Controls
i = i + 1
Debug.Print i & " - " & Bar.Caption
Next
End Sub
Private Sub CommandBarControlSubMenuGet()
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
Set objCommandBar = Application.CommandBars("Worksheet Menu Bar")
Dim objCommandBarPopup As CommandBarPopup
Set objCommandBarPopup = objCommandBar.Controls("ファイル(&F)")
Dim objCommandBarControl As CommandBarControl
Set objCommandBarControl = objCommandBarPopup.Controls("送信(&D)")
For Each Bar In objCommandBarControl.Controls
i = i + 1
Debug.Print i & " - " & Bar.Caption
Next
End Sub
'===========================================================================
Private Sub aCommandBarGet()
'*********************************************************
'全てのエクセルアプリケーションのコマンドバーを取得する
'*********************************************************
'メニューを取得する
j = 0
Set sht = ThisWorkbook.Worksheets.Add
Dim i As Long, Bar As CommandBar
For Each Bar In Application.CommandBars
j = j + 1
i = i + 1
sht.Cells(j, 1).Value = Format(i, "0#") & "." & Bar.Name
aCommandBarControlGet Bar.Name
Next
End Sub
Private Sub aCommandBarControlGet(str1 As String)
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
Set objCommandBar = Application.CommandBars(str1)
For Each Bar In objCommandBar.Controls
j = j + 1
i = i + 1
sht.Cells(j, 1).Value = " ├" & Format(i, "0#") & "." & Bar.Caption
aCommandBarControlMenuGet str1, Bar.Caption
Next
End Sub
Private Sub aCommandBarControlMenuGet(str1 As String, str2 As String)
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
On Error GoTo TheEnd:
Set objCommandBar = Application.CommandBars(str1)
Dim objCommandBarPopup As CommandBarPopup
Set objCommandBarPopup = objCommandBar.Controls(str2)
For Each Bar In objCommandBarPopup.Controls
j = j + 1
i = i + 1
sht.Cells(j, 1).Value = " ├" & Format(i, "0#") & "." & Bar.Caption
aCommandBarControlSubMenuGet str1, str2, Bar.Caption
Next
TheEnd:
End Sub
Private Sub aCommandBarControlSubMenuGet(str1 As String, str2 As String, str3 As String)
'*************************************************
'エクセルアプリケーションのコマンドバーを取得する
'*************************************************
'メニューを取得する
Dim i As Long, Bar As CommandBarControl
Dim objCommandBar As CommandBar
On Error GoTo TheEnd:
Set objCommandBar = Application.CommandBars(str1)
Dim objCommandBarPopup As CommandBarPopup
Set objCommandBarPopup = objCommandBar.Controls(str2)
Dim objCommandBarControl As CommandBarControl
Set objCommandBarControl = objCommandBarPopup.Controls(str3)
For Each Bar In objCommandBarControl.Controls
j = j + 1
i = i + 1
sht.Cells(j, 1).Value = " ├" & Format(i, "0#") & "." & Bar.Caption
Next
TheEnd:
End Sub
Private Function DriveUmu(str As String) As Boolean
'*******************************************************************************
'ドライブが存在するか
'*******************************************************************************
Dim a As String
Dim Fso
a = Left(str, 1)
Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.DriveExists(a) Then
DriveUmu = True ' ドライブが存在します"
Else
DriveUmu = False 'ドライブは存在しません"
End If
End Function
Option Explicit
Sub GetFileWidthPixelInFolder()
'*******************************************************
'指定フォルダ内のJPGファイル横幅ピクセルを取得
'*******************************************************
'JPGやMP3ファイルのプロパティを取得
Dim objCRT As Object, objFldr As Object, i As Byte
Dim strPrprty(34) As String 'ファイル情報の項目名をセット
Dim strFlNm As Object, str As String, folPath As String
Dim Spl As Variant
'ActiveX オブジェクトへの参照
Set objCRT = CreateObject("Shell.Application")
'名前空間の名前を宣言
Set objFldr = objCRT.Namespace("" & folPath & "")
For i = 0 To 33
'ファイル情報の項目名をセット(取得).Items
'[GetDetailsOf]ファイル情報を取得(ファイル名.Items,情報番号)
strPrprty(i) = objFldr.GetDetailsOf(objFldr.Items, i)
Next
For Each strFlNm In objFldr.Items
If Right(strFlNm, 4) = ".jpg" Then
str = "" 'クリア
i = 27 '横ピクセル
' i = 28 '縦ピクセル
str = objFldr.GetDetailsOf(strFlNm, i)
'[GetDetailsOf]ファイル情報を取得(ファイル名,情報番号)
Spl = Split(str)
MsgBox strFlNm & vbTab & Spl(0)
End If
Next
'UNLHA32.DLLのUnlha関数使用宣言
Private Declare Function Unlha Lib "UNLHA32.DLL" (ByVal Callhwnd As Long, ByVal LHACommand As String, ByVal RetBuff As String, ByVal RetBuffSize As Long) As Long
'サブルーチン
Sub LZHファイルを解凍(KaitoSakiPath As String, KaitoMotoPath As String, Msg As Boolean)
'*引数Msgが「False」の場合解凍成功後そのLZHファイルを削除
Dim スペース文字対策 As String, 解凍先パス As String, 解凍LZHファイルパス As String
Dim パラメータ As String, 戻値 As Long, スイッチ As String
Dim UNLHA結果バッファ As String * 255 '(255バイトまで)
スペース文字対策 = """" 'Documents and Settings\のようにスペースがある場合、パラメータ用に誤認識対策
スイッチ = "e" '各スイッチの詳細はmicco氏作成COMMAND.TXTを参照
解凍先パス = スペース文字対策 & KaitoSakiPath & "\" & スペース文字対策
解凍LZHファイルパス = スペース文字対策 & KaitoMotoPath & スペース文字対策
パラメータ = スイッチ & " " & 解凍LZHファイルパス & " " & 解凍先パス
戻値 = Unlha(0, パラメータ, UNLHA結果バッファ, 255)
If Msg = True Then
If 戻値 = 0 Then MsgBox (UNLHA結果バッファ)
Else
If 戻値 = 0 Then Kill KaitoMotoPath
End If
End Sub
Sub test()
LZHファイルを解凍 ThisWorkbook.Path, ThisWorkbook.Path & "\" & "*.lzh", True
End Sub
Dim shtDdata As Worksheet
Sub 開始1()
'***********************************************
'フォルダ内の全てのファイル取得
'***********************************************
Dim buf As String, tgtPath As String, sbuf As String
Dim strExtension As String, OutPath As String
Dim TargetFile As String, n As Long
Dim sampleName As String
sbuf = Dir(tgtPath & "\" & strExtension)
Do While sbuf <> ""
n = FreeFile '使われていないファイル番号を自動的に割り振る
TargetFile = tgtPath & "\" & sbuf
buf = Space(FileLen(TargetFile))
Open TargetFile For Binary As #n 'binaryモードで開いたファイル
Get #n, , buf 'からデータを読み込むにはGetステートメントを使う
Close #n
sampleName = InputBox("ここでサンプル改変名で入力できます。※英字小文字で入力" _
& vbCr & vbCr & "※全て実行されます。", "サンプル", "sample")
If sampleName <> "" Then
SampleMaking sampleName
開始2
Else
MsgBox "シート" & shtDdata.Name & "を参照し変更後、[開始2]を行って下さい。"
End If
End Sub
Private Sub SearchAllLettersBetween(str As String, strFoundFront As String, strFoundBack As String, lngCol As Long)
'************************************************
'文字中の指定文字と指定文字間の文字を全て検索
'************************************************
'引数strは対象文字群
'引数strFoundFrontは前方検索対象文字
'引数strFoundBackは後方検索対象文字
Dim i As Long, Xa As String, Xb As Long, j As Long
reTRY: '再帰①
i = InStr(1, str, strFoundFront) '前方検索対象文字位置
If i = 0 Then GoTo TheEnd: '無ければ終了②
Xb = InStr(i + Len(strFoundFront) + 1, str, strFoundBack) '後方検索対象文字位置
Xa = Mid(str, i, Xb - i + 1) '値をゲット
Debug.Print Xa
j = shtDdata.Cells(65536, lngCol).End(xlUp).Row + 1
shtDdata.Cells(j, lngCol).Value = Xa
shtDdata.Cells(j, lngCol + 1).Value = "→"
str = Replace(str, Xa, "") 'ゲット後は削除する(対象文字群内全て)
GoTo reTRY: '再帰①
TheEnd: '無ければ終了②
End Sub
Sub 開始2()
'***********************************************
'フォルダ内の全てのファイル取得
'***********************************************
Dim buf As String, tgtPath As String, sbuf As String
Dim strExtension As String, OutPath As String
Dim TargetFile As String, n As Long
Dim strExtension2 As String
Dim i As Long, vrnCSS As Variant, vrnCSS2 As Variant, vrnCSS3 As Variant
Dim strA As String, lngCSS As Long
'===================================================================================
'【HTML】
sbuf = Dir(tgtPath & "\" & strExtension)
Do While sbuf <> ""
n = FreeFile '使われていないファイル番号を自動的に割り振る
TargetFile = tgtPath & "\" & sbuf
buf = Space(FileLen(TargetFile))
Open TargetFile For Binary As #n 'binaryモードで開いたファイル
Get #n, , buf 'からデータを読み込むにはGetステートメントを使う
Close #n
strA = buf
With shtDdata
For i = 1 To .Cells(65536, 1).End(xlUp).Row
If .Cells(i, 3).Value <> "" Then
If InStr(1, .Cells(i, 1).Value, "=") <> 0 Then
strA = Replace(strA, Trim(.Cells(i, 1).Value), "id=""" & Trim(.Cells(i, 3).Value) & """")
End If
End If
Next i
For i = 1 To .Cells(65536, 5).End(xlUp).Row
If .Cells(i, 7).Value <> "" Then
If InStr(1, .Cells(i, 5).Value, "=") <> 0 Then
strA = Replace(strA, Trim(.Cells(i, 5).Value), "class=""" & Trim(.Cells(i, 7).Value) & """")
End If
End If
Next i
pbsTxtWrites TargetFile, strA
End With
sbuf = Dir()
Loop
'===================================================================================
'【CSS】
sbuf = Dir(tgtPath & "\" & strExtension2)
Do While sbuf <> ""
n = FreeFile '使われていないファイル番号を自動的に割り振る
TargetFile = tgtPath & "\" & sbuf
buf = Space(FileLen(TargetFile))
Open TargetFile For Binary As #n 'binaryモードで開いたファイル
Get #n, , buf 'からデータを読み込むにはGetステートメントを使う
Close #n
strA = buf
With shtDdata
For i = 1 To .Cells(65536, 1).End(xlUp).Row
If .Cells(i, 3).Value <> "" Then
If InStr(1, .Cells(i, 1).Value, "=") <> 0 Then
vrnCSS = Split(Trim(.Cells(i, 1).Value), """")
strA = Replace(strA, "#" & Trim(vrnCSS(1)) & " ", "#" & Trim(.Cells(i, 3).Value) & " ")
End If
End If
Next i
For i = 1 To .Cells(65536, 5).End(xlUp).Row
If .Cells(i, 7).Value <> "" Then
If InStr(1, .Cells(i, 5).Value, "=") <> 0 Then
vrnCSS = Split(Trim(.Cells(i, 5).Value), """")
'複数要素設定の場合
vrnCSS2 = Split(Trim(vrnCSS(1))) '原文字
vrnCSS3 = Split(Trim(.Cells(i, 7).Value)) '変更文字
For lngCSS = LBound(vrnCSS2) To UBound(vrnCSS2)
strA = Replace(strA, "." & Trim(vrnCSS2(lngCSS)) & " ", "." & Trim(vrnCSS3(lngCSS)) & " ")
Next lngCSS
End If
End If
Next i
pbsTxtWrites TargetFile, strA
End With
Name tgtPath As ThisWorkbook.Path & "\変換元A"
Name OutPath As ThisWorkbook.Path & "\変換先A"
Name ThisWorkbook.Path & "\変換元A" As ThisWorkbook.Path & "\変換先"
Name ThisWorkbook.Path & "\変換先A" As ThisWorkbook.Path & "\変換元"
End Sub
Private Sub pbsTxtWrites(TxtPath As String, str As String)
'*******************************************************************************
'指定パスのテキストファイルに書き込み
'*******************************************************************************
Dim n As Long
n = FreeFile '使われていないファイル番号を自動的に割り振る
Open TxtPath For Output As #n
Print #n, str
Close #n
End Sub
Private Sub DeleteFile(strPath As String, strFileName As String)
'**************************************
'ファイルを削除 引数指定
'パスの最後に[\]を付けない
'**************************************
On Error Resume Next
Kill strPath & "\" & strFileName
On Error GoTo 0
End Sub
Private Sub SampleMaking(str As String)
Dim shtDdata As Worksheet, i As Long, vrnCSS As Variant, vrnCSS2 As Variant
Dim lngCSS As Long, smName() As String, cntName As Long, blnName As Boolean
Dim mkName As String
ReDim smName(cntName) As String
Set shtDdata = ThisWorkbook.Worksheets("Data")
With shtDdata
For i = 1 To .Cells(65536, 1).End(xlUp).Row
If .Cells(i, 3).Value = "" Then
If InStr(1, .Cells(i, 1).Value, "=") <> 0 Then
.Cells(i, 3).Value = "id_" & str & "_" & i - 1
End If
End If
Next i
For i = 1 To .Cells(65536, 5).End(xlUp).Row
If .Cells(i, 7).Value = "" Then
If InStr(1, .Cells(i, 5).Value, "=") <> 0 Then
vrnCSS = Split(Trim(.Cells(i, 5).Value), """")
'複数要素設定の場合
vrnCSS2 = Split(Trim(vrnCSS(1)))
For lngCSS = LBound(vrnCSS2) To UBound(vrnCSS2)
'既にあるかチェック
blnName = False
For cntName = LBound(smName) To UBound(smName)
If smName(cntName) = vrnCSS2(lngCSS) Then
blnName = True
Exit For
End If
Next cntName
If blnName = False Then
ReDim Preserve smName(cntName)
smName(cntName) = vrnCSS2(lngCSS)
cntName = cntName + 1
End If
Next lngCSS
End If
End If
Next i
For i = 1 To .Cells(65536, 5).End(xlUp).Row
If .Cells(i, 7).Value = "" Then
If InStr(1, .Cells(i, 5).Value, "=") <> 0 Then
vrnCSS = Split(Trim(.Cells(i, 5).Value), """")
'複数要素設定の場合
vrnCSS2 = Split(Trim(vrnCSS(1)))
mkName = ""
For lngCSS = LBound(vrnCSS2) To UBound(vrnCSS2)
For cntName = LBound(smName) To UBound(smName)
If vrnCSS2(lngCSS) = smName(cntName) Then
mkName = mkName & "cls_" & str & "_" & cntName & " "
End If
Next cntName
Next lngCSS
.Cells(i, 7).Value = Trim(mkName)
End If
End If
Next i
End With
End Sub
Private Sub test()
SampleMaking "smsmsms"
End Sub
になります。プロシージャ内では、定数は常にプライベート定数として扱われて、適用範囲 (スコープ) は変更できません。標準モジュールでは、モジュール
レベル定数の既定の適用範囲をキーワード Public で変更できます。一方、クラス モジュールでは、定数はプライベート定数としてのみ使用でき、キーワード
Public では適用範囲を変更できません。
'変数の最小値から最大値までを読む
For i = LBound(strFileName) To UBound(strFileName)
MsgBox strFileName(i)
Next i
End Sub
Sub FileNameEnumeration(ByRef strFileName() As String)
'***********************************************
'指定フォルダ内のファイル名一覧を取得列挙する。
'***********************************************
'呼び出される側
'可変変数
Dim strPath As String
Dim buf As String, i As Long
Dim strExtension As String
buf = Dir(strPath & "\*." & strExtension)
Do While buf <> ""
'変数値を増やす
ReDim Preserve strFileName(i) As String
strFileName(i) = buf
i = i + 1
buf = Dir()
Loop
End Sub
Option Explicit
Private Sub TestDB(ByVal CharacterDB As Variant)
Dim i As Long
For i = LBound(CharacterDB) To UBound(CharacterDB)
Debug.Print CharacterDB(i)
Next i
End Sub
Private Sub Test()
Dim CharacterDB() As String
Dim i As Long
For i = 0 To 20
ReDim Preserve CharacterDB(i)
CharacterDB(i) = i * 10
Next i
Type EmployeeRecord ' ユーザー定義型を作成します。
ID As Integer ' データ型の要素を定義します。
Name As String * 20
Address As String * 30
Phone As Long
HireDate As Date
End Type
Sub CreateRecord()
Dim MyRecord As EmployeeRecord ' 変数を宣言します。
' 変数 EmployeeRecord への代入は、
' プロシージャ内に記述しなければなりません。
MyRecord.ID = 12003 ' 要素に値を代入します。
End Sub
' Sub プロシージャを定義します。
' 2 つの引数を持つ Sub プロシージャになります。
Sub SubComputeArea(Length, TheWidth)
Dim Area As Double ' ローカル変数を宣言します。
If Length = 0 Or TheWidth = 0 Then
' いずれかの変数の値が 0 の場合
Exit Sub ' Sub プロシージャを直ちに終了します。
End If
Area = Length * TheWidth ' 四角形の面積を計算します。
Debug.Print Area ' 面積をデバッグ ウィンドウに表示します。
End Sub
Option Explicit
'======================================================================
'【通常】
Function OptionalTest1(A As Byte, B As Byte, C As Byte) As Byte
'**********************************
'引数が省略可能な関数を作る
'**********************************
'ユーザー定義関数
OptionalTest1 = A + B + C
End Function
Private Sub Test1()
MsgBox OptionalTest1(1, 2, 3)
End Sub
'======================================================================
'【省略可能型1】
Function OptionalTest2(A As Byte, B As Byte, Optional C As Byte = 0) As Byte
' ~~~~~~~~ ~~~
'**********************************
'引数が省略可能な関数を作る
'**********************************
'ユーザー定義関数
'[= 0]の数値は任意(省略された場合の数値)で設定可能です。
OptionalTest2 = A + B + C
End Function
Private Sub Test2_1()
MsgBox OptionalTest1(1, 2) '【通常】
'↑コンパイルエラー!引数は省略できません!
End Sub
Private Sub Test2_2()
MsgBox OptionalTest2(1, 2) '【省略可能型1】
'↑エラーは無く答えが表示されます。
End Sub
'======================================================================
'【省略可能型2】
Function OptionalTest3(A As Byte, Optional B As Byte = 0, Optional C As Byte = 0) As Byte
' ~~~~~~~~ ~~~ ~~~~~~~~ ~~~
'**********************************
'引数が省略可能な関数を作る
'**********************************
'ユーザー定義関数
'[= 0]の数値は任意(省略された場合の数値)で設定可能です。
OptionalTest3 = A + B + C
End Function
Private Sub Test3()
MsgBox OptionalTest3(1) '【省略可能型2】
'↑エラーは無く答えが表示されます。
MsgBox OptionalTest3(1, 2) '【省略可能型2】
'↑エラーは無く答えが表示されます。
MsgBox OptionalTest3(1, , 3) '【省略可能型2】
'↑エラーは無く答えが表示されます。
End Sub
'======================================================================
'【注意】
'Function OptionalTest3(Optional A As Byte = 0, B As Byte , Optional C As Byte = 0) As Byte
' ~~~~~~~~ ~~~ ~~~~~~~~ ~~~
'**********************************************************************
'[Optional]を指定した場合、それ以降の引数も省略可能でなければならない。
'**********************************************************************
'その場合すべて引数に[Optional]を付けて宣言する必要があります。
'**********************************************************************
'[Optional] キーワード
'[Optional] は、次の構文で使用します。
'
'Declare ステートメント
'
'Function ステートメント
'
'Property Get ステートメント
'
'Property Let ステートメント
'
'Property Set ステートメント
'
'Sub ステートメント
Function RecordsetType(intType As Integer) As String
Select Case intType
Case dbOpenTable
RecordsetType = "dbOpenTable"
Case dbOpenDynaset
RecordsetType = "dbOpenDynaset"
Case dbOpenSnapshot
RecordsetType = "dbOpenSnapshot"
Case dbOpenForwardOnly
RecordsetType = "dbOpenForwardOnly"
End Select
End Function
'次の例では、Employees テーブル内のすべての Field オブジェクトの Type プロパティに対応している定数名を返して、Type プロパティを説明します。このプロシージャを実行するには、FieldType 関数が必要です。
Sub TypeX2()
Dim dbsNorthwind As Database
Dim fldLoop As Field
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Debug.Print "Fields in Employees TableDef:"
Debug.Print " Type - Name"
' Employees テーブルの Fields コレクションを列挙します。
For Each fldLoop In _
dbsNorthwind.TableDefs Employees.Fields
Debug.Print " " & FieldType(fldLoop.Type) & _
" - " & fldLoop.Name
Next fldLoop
dbsNorthwind.Close
End Sub
Function FieldType(intType As Integer) As String
Select Case intType
Case dbBoolean
FieldType = "dbBoolean"
Case dbByte
FieldType = "dbByte"
Case dbInteger
FieldType = "dbInteger"
Case dbLong
FieldType = "dbLong"
Case dbCurrency
FieldType = "dbCurrency"
Case dbSingle
FieldType = "dbSingle"
Case dbDouble
FieldType = "dbDouble"
Case dbDate
FieldType = "dbDate"
Case dbText
FieldType = "dbText"
Case dbLongBinary
FieldType = "dbLongBinary"
Case dbMemo
FieldType = "dbMemo"
Case dbGUID
FieldType = "dbGUID"
End Select
End Function
'次の例では、データベース Northwind のすべての QueryDef オブジェクトの Type プロパティに対応している定数名を返して、Type プロパティを説明します。このプロシージャを実行するには、QueryDefType 関数が必要です。
Sub TypeX3()
Dim dbsNorthwind As Database
Dim qdfLoop As QueryDef
Set dbsNorthwind = OpenDatabase("Northwind.mdb")
Debug.Print "QueryDefs in Northwind Database:"
Debug.Print " Type - Name"
' データベース Northwind の QueryDefs コレクションを列挙します。
For Each qdfLoop In dbsNorthwind.QueryDefs
Debug.Print " " & _
QueryDefType(qdfLoop.Type) & " - " & qdfLoop.Name
Next qdfLoop
dbsNorthwind.Close
End Sub
Function QueryDefType(intType As Integer) As String
Select Case intType
Case dbQSelect
QueryDefType = "dbQSelect"
Case dbQAction
QueryDefType = "dbQAction"
Case dbQCrosstab
QueryDefType = "dbQCrosstab"
Case dbQDelete
QueryDefType = "dbQDelete"
Case dbQUpdate
QueryDefType = "dbQUpdate"
Case dbQAppend
QueryDefType = "dbQAppend"
Case dbQMakeTable
QueryDefType = "dbQMakeTable"
Case dbQDDL
QueryDefType = "dbQDDL"
Case dbQSQLPassThrough
QueryDefType = "dbQSQLPassThrough"
Case dbQSetOperation
QueryDefType = "dbQSetOperation"
Case dbQSPTBulk
QueryDefType = "dbQSPTBulk"
End Select
は 0 なので、Option Base ステートメントは必ずしも必要ではありません。Option Base ステートメントを使用する場合は、このステートメントをモジュール内のどのプロシージャよりも前に記述する必要があります。Option
Base ステートメントは、モジュール内で一度だけ、次元を含む配列の宣言よりも前に記述します。
メモ
Dim、Private、Public、ReDim、Static などの各ステートメントで To 節を使うと、より柔軟に配列の添字の範囲を設定できます。ただし、To
節で配列の添字の最小値を明示的に設定しない場合は、Option Base ステートメントを使って既定の最小値を 1 に設定できます。Array
関数またはキーワード ParamArray を使って作成する配列の添字の最小値は 0 です。Option Base ステートメントは、Array
関数またはキーワード ParamArray に影響を与えません。
Option Base ステートメントの設定が有効
になるのは、ステートメントが記述されているモジュール内の配列の添字の最小値のみです。
Option Base ステートメントの使用例
次の例では、Option Base ステートメントを使って、配列の添字の既定の最小値 0 を変更します。LBound 関数は、配列内の指定された次元の添字の最小値を返します。Option
Base ステートメントは、モジュール レベルでのみ使います。
Option Explicit
Option Base 1 ' 配列の添字の既定値を 1 に設定します。
Private Sub Test()
Dim Lower
Dim MyArray(20), TwoDArray(3, 4) ' 配列変数を宣言します。
Dim ZeroArray(0 To 5) ' 添字の既定の最小値を変更します。
' 配列の添字の最小値を求めるには、LBound 関数を使います。
Debug.Print LBound(MyArray) ' 1 が返ります。
Debug.Print LBound(TwoDArray, 2) ' 1 が返ります。
Debug.Print LBound(ZeroArray) ' 0 が返ります。
'1
'1
'0
End Sub
Option Explicit
Private Sub test()
'************************************************
'あるコレクションの中の特定要素数になれば抜ける
'************************************************
Dim MyCollection As Variant
Dim i As Long
MyCollection = Array(10, 20, 30, 40, 50, 30)
'初期化
i = 0
While i < 3 '値を評価します。
Debug.Print i & ":" & MyCollection(i)
i = i + 1 '値を増やします。
Wend 'While ループを終了します。
'0:10
'1:20
'2:30
End Sub
End Sub
Private Sub Test2()
'*****************************************************
'指定されたディレクトリをループして内容を返す
'*****************************************************
'条件式を満たすまで繰り返す
'Do ...Loop While
Dim pth As String
Dim buf As String
Dim x As Long
pth = ThisWorkbook.Path & "\"
x = 0
buf = Dir(pth, vbDirectory)
Do
Debug.Print "x" & x & ":" & buf
x = x + 1
' Dir関数を使用して、次の検索をします。
buf = Dir()
Loop While Len(buf) <> 0
End Sub
Private Sub Test3()
'*****************************************************
'指定されたディレクトリをループして各ファイル名を返す
'*****************************************************
Dim pth As String
Dim buf As String
Dim i As Long, x As Long, y As Long
Dim myDir As String 'カレントフォルダ(自分)
Dim upDir As String 'ルートフォルダ(親フォルダ)
myDir = "."
upDir = ".."
pth = ThisWorkbook.Path & "\"
i = 0: x = 0: y = 0
buf = Dir(pth, vbDirectory)
Do While Len(buf) <> 0
Debug.Print "x" & x & ":" & buf
x = x + 1
If (buf <> myDir) And (buf <> upDir) Then
Debug.Print "y" & y & ":" & buf
y = y + 1
If (GetAttr(pth & buf) And 16) <> 16 Then
Debug.Print "i" & i & ":" & buf
i = i + 1
End If
End If
' Dir関数を使用して、次の検索をします。
buf = Dir()
Loop
End Sub
Private Sub Test2()
'*****************************************************
'指定されたディレクトリをループして内容を返す
'*****************************************************
'条件式を満たすまで繰り返す
'Do ...Loop Until
Dim pth As String
Dim buf As String
Dim x As Long
pth = ThisWorkbook.Path & "\"
x = 0
buf = Dir(pth, vbDirectory)
Do
Debug.Print "x" & x & ":" & buf
x = x + 1
' Dir関数を使用して、次の検索をします。
buf = Dir()
Loop Until Len(buf) = 0
End Sub
Private Sub Test3()
'*****************************************************
'指定されたディレクトリをループして各ファイル名を返す
'*****************************************************
Dim pth As String
Dim buf As String
Dim i As Long, x As Long, y As Long
Dim myDir As String 'カレントフォルダ(自分)
Dim upDir As String 'ルートフォルダ(親フォルダ)
myDir = "."
upDir = ".."
pth = ThisWorkbook.Path & "\"
i = 0: x = 0: y = 0
buf = Dir(pth, vbDirectory)
Do Until Len(buf) = 0
Debug.Print "x" & x & ":" & buf
x = x + 1
If (buf <> myDir) And (buf <> upDir) Then
Debug.Print "y" & y & ":" & buf
y = y + 1
If (GetAttr(pth & buf) And 16) <> 16 Then
Debug.Print "i" & i & ":" & buf
i = i + 1
End If
End If
' Dir関数を使用して、次の検索をします。
buf = Dir()
Loop
Option Explicit
Private Sub test1()
'************************************************
'あるコレクションの中の要素をすべて返す
'************************************************
Dim Found As Boolean
Dim Element As Variant
Dim MyCollection As Variant
Dim i As Long
MyCollection = Array(10, 20, 30, 40, 50, 30)
'初期化
i = 0
'MyCollectionのElementに対して繰り返します。
For Each Element In MyCollection
Found = False
i = i + 1
Debug.Print "i" & i & ":" & Found & ":" & Element
Next
'i1:False:10
'i2:False:20
'i3:False:30
'i4:False:40
'i5:False:50
'i6:False:30
End Sub
Private Sub test2()
'************************************************
'あるコレクションの中の特定要素をすべて返す
'************************************************
Dim Found As Boolean
Dim strFound As String
Dim Element As Variant
Dim MyCollection As Variant
Dim i As Long, n As Long
MyCollection = Array(10, 20, 30, 40, 50, 30)
'初期化
strFound = "30"
i = 0: n = 0
'MyCollectionのElementに対して繰り返します。
For Each Element In MyCollection
Found = False
i = i + 1
Debug.Print "i" & i & ":" & Found & ":" & Element
'ElementがstrFoundであれば、
If Element = strFound Then
n = n + 1
'Found にTrueを設定。
Found = True
'For ループから抜け出します。
Debug.Print "n" & n & ":" & Found & ":" & Element
End If
Next
'i1:False:10
'i2:False:20
'i3:False:30
'n1:True:30
'i4:False:40
'i5:False:50
'i6:False:30
'n2:True:30
End Sub
Private Sub test3()
'************************************************
'あるコレクションの中の特定要素があれば抜ける
'************************************************
Dim Found As Boolean
Dim strFound As String
Dim Element As Variant
Dim MyCollection As Variant
Dim i As Long, n As Long
MyCollection = Array(10, 20, 30, 40, 50, 30)
'初期化
strFound = "30"
i = 0: n = 0
'MyCollectionのElementに対して繰り返します。
For Each Element In MyCollection
Found = False
i = i + 1
Debug.Print "i" & i & ":" & Found & ":" & Element
'ElementがstrFoundであれば、
If Element = strFound Then
n = n + 1
'Found にTrueを設定。
Found = True
'For ループから抜け出します。
Debug.Print "n" & n & ":" & Found & ":" & Element
Exit For
End If
Next
'i1:False:10
'i2:False:20
'i3:False:30
'n1:True:30
End Sub
Private Sub testCompareBinary()
Dim A As String, b As String
Dim bln As Boolean, i As Byte
i = i + 1
A = "*": b = "*" '全角半角
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "A": b = "A" '全角半角
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "A": b = "a" '大文字小文字
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
'--------------------------------------------------------
i = i + 1
A = "*": b = "*" '全角半角
If InStr(1, A, b) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "*": b = "*" '全角半角/比較モードを指定
If InStr(1, A, b, vbTextCompare) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ
If InStr(1, A, b) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ/比較モードを指定
If InStr(1, A, b, vbTextCompare) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
' 文字列比較方法を Text モードに設定します。
Option Compare Text
Private Sub testCompareText()
Dim A As String, b As String
Dim bln As Boolean, i As Byte
i = i + 1
A = "*": b = "*" '全角半角
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "A": b = "A" '全角半角
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "A": b = "a" '大文字小文字
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ
If A = b Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
'--------------------------------------------------------
i = i + 1
A = "*": b = "*" '全角半角
If InStr(1, A, b) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "*": b = "*" '全角半角/比較モードを指定
If InStr(1, A, b, vbBinaryCompare) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ
If InStr(1, A, b) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
i = i + 1
A = "あ": b = "ア" 'ひらがなカタカナ/比較モードを指定
If InStr(1, A, b, vbBinaryCompare) <> 0 Then
bln = True
Else
bln = False
End If
Debug.Print i & "[" & A & " : " & b & "]" & bln
Option Explicit
Sub OpenVBE()
'*****************************************
'プロシージャからVisuaruBasecEditorを起動
'*****************************************
Dim strModuleName As String
strModuleName = "TestModule"
Application.VBE.MainWindow.Visible = True
ThisWorkbook.VBProject.VBComponents(strModuleName).Activate
End Sub
End Sub
Private Sub CommandButton2_Click()
Dim objIE As Object
Dim objIEItem As Object
Dim i As Long
Set objIE = Me.WebBrowser1
For i = 1 To 47
For Each objIEItem In objIE.Document.all
' Debug.Print objIEItem.tagName
If objIEItem.tagName = "INPUT" Then
' MsgBox objIEItem.Name
If objIEItem.Name = nameK(i) Then
objIEItem.Value = kin(i)
Exit For
End If
End If
Next
Next i
Function Changefreq(lebelno As Byte) As String
'****************************************
'サイトマップ作成用更新頻度を返す関数
'****************************************
Select Case lebelno
Case 1 '毎時間
Changefreq = "hourly"
Case 2 '毎日
Changefreq = "daily"
Case 3 '毎週
Changefreq = "weekly"
Case 4 '毎月
Changefreq = "monthly"
Case Else '該当なし
Changefreq = "monthly"
End Select
End Function
Function Priority(lebelno As Byte) As String
'****************************************
'サイトマップ作成用優先度を返す関数
'****************************************
Select Case lebelno
Case 1 '高
Priority = "1.0"
Case 2 '中
Priority = "0.5"
Case 3 '低
Priority = "0.0"
Case Else '該当なし
Priority = "0.0"
End Select
With MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush
'色の自動設定を解除します。
.FillColor.Automatic = False
'色を設定します。
.FillColor.Set 0, 255, 255
End With
'◆系列内部のパターンの設定
With MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush
'ブラシタイプを設定します。
.Style = VtBrushStylePattern
'ブラシで使用されるパターンまたはハッチングを設定します。
.Index = VtBrushPatternBoldDownDiagonal
End With
'◆系列内部のパターンの色の設定
With MSChart1.Plot.SeriesCollection(1).DataPoints(-1).Brush.PatternColor
'色の自動設定を解除します。
.Automatic = False
'色を設定します。
.Set 255, 255, 255
End With
With Application.FileSearch
.NewSearch
.LookIn = "C:\My Documents"
.SearchSubFolders = True
.Filename = "run"
.TextOrProperty = "San*"
.MatchAllWordForms = True
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Option Explicit
'クラスモジュールに「C_TestName」というオブジェクト名をつけて下記を記述します。
Function ThisName(bytNo As Byte) As String
Select Case bytNo
Case 1
ThisName = "一郎"
Case 2
ThisName = "二郎"
Case 3
ThisName = "三郎"
Case 4
ThisName = "四郎"
Case 5
ThisName = "五郎"
Case 6
ThisName = "六郎"
Case 7
ThisName = "七郎"
Case Else
ThisName = "花子"
End Select
End Function
------------------------------------------
Option Explicit
'標準モジュールに「M_ClassTest」というオブジェクト名をつけて下記を記述します。
Sub ClassTest()
Dim Test1 As New C_TestName
Dim a As Byte
a = CByte(InputBox("Name NO?", "as Byte", 0))
MsgBox Test1.ThisName(a), 0, "ANS"
End Sub
'上記「ClassTest」を実行してみてください。
End Sub
'以下モジュール名(オブジェクト名)「Module4」に記述
'※同じプロジェクト内
Sub MsgboxTest1()
MsgBox "Test1"
End Sub
Sub MsgboxTest2()
MsgBox "Test2"
End Sub
Sub MsgboxTest3()
MsgBox "Test3"
End Sub
Sub MsgboxTest4()
MsgBox "Test4"
End Sub
Function Fnc消費税(Kingaku As Long) As Long
'*******************************************************************************
'消費税取得
'*******************************************************************************
Dim Zeiritsu As Double
Zeiritsu = 0.05
Fnc消費税 = Int(Kingaku * Zeiritsu)
End Function
End Sub
'以下モジュール名(オブジェクト名)「Module5」に記述
'※同じプロジェクト内
Sub MsgboxTest1()
MsgBox "Test5"
End Sub
Sub MsgboxTest2()
MsgBox "Test6"
End Sub
Sub MsgboxTest3()
MsgBox "Test7"
End Sub
Sub MsgboxTest4()
MsgBox "Test8"
End Sub
Option Explicit
Sub OptionalTest()
'********************************
'引数を省略出来るステートメント
'********************************
MsgBox test1("CCC", "BBB")
MsgBox test2("CCC")
MsgBox test3()
MsgBox test3("BBB")
'Optional str2 As String = "BBB"
'str2が省略された場合はstr2は"BBB"とする
'【使用可能ステートメント】
'Declare ステートメント
'
'Function ステートメント()
'
'Property Get ステートメント()
'
'Property Let ステートメント
'
'Property Set ステートメント
'
'Sub ステートメント()
End Sub
Private Function test1(str1 As String, str2 As String, Optional str3 As String = "AAA") As String
If str3 = "AAA" Then
test1 = "YES!"
Else
test1 = "NO!"
End If
End Function
Private Function test2(str1 As String, Optional str2 As String = "BBB", Optional str3 As String = "AAA") As String
If str2 = "BBB" And str3 = "AAA" Then
test2 = "YES!"
Else
test2 = "NO!"
End If
End Function
Private Function test3(Optional str3 As String = "CCC") As String
If str3 = "CCC" Then
test3 = "YES!"
Else
test3 = "NO!"
End If
End Function
Public Function fncGetZip(住所 As String, CSVFaliPath As String) As String
'*******************************************************************************
'住所から郵便番号を取得する Address-Zip
'*******************************************************************************
'引数:住所=郵便番号を探す住所
'引数:CSVFaliPath=CSVファイルのあるルートパス
'CSVファイルは
'読み仮名データの促音・拗音を小書きで表記したもの(例:ホッカイドウ)を使用
'http://www.post.japanpost.jp/zipcode/dl/kogaki.html
'より入手
Application.ScreenUpdating = False
Dim CSVファイル As Workbook, CSVシート As Worksheet
Dim a As String, b As String, c As Long, d As Long
Dim 連住所 As String, 決定 As String
a = Dir(CSVFaliPath): b = Mid(a, 1, Len(a) - 4)
psbブックを開く CSVFaliPath
Set CSVファイル = Workbooks(a)
Set CSVシート = CSVファイル.Worksheets(b)
With CSVシート
c = .Range("a65536").End(xlUp).Row
決定 = ""
For d = 1 To c
連住所 = .Cells(d, 8).Value & .Cells(d, 9).Value
If InStr(1, 住所, 連住所) <> 0 Then
決定 = .Cells(d, 3).Value
Exit For
End If
Next d
End With
If 決定 = "" Then
With CSVシート
c = .Range("a65536").End(xlUp).Row
決定 = ""
For d = 1 To c
連住所 = .Cells(d, 8).Value & "大字" & .Cells(d, 9).Value
If InStr(1, 住所, 連住所) <> 0 Then
決定 = .Cells(d, 3).Value
Exit For
End If
Next d
End With
End If
If 決定 = "" Then
MsgBox "指定ファイル内に指定住所の郵便番号は見つかりませんでした。", vbCritical, "郵便番号検索"
fncGetZip = 0
Else
fncGetZip = 決定
End If
CSVファイル.Close
Set CSVファイル = Nothing
Set CSVシート = Nothing
Public Function fncGetAddress(郵便番号 As String, CSVFaliPath As String) As String
'*******************************************************************************
'郵便番号から住所を取得する Zip-Address
'*******************************************************************************
'引数:郵便番号=住所を探す郵便番号
'引数:CSVFaliPath=CSVファイルのあるルートパス
'CSVファイルは
'読み仮名データの促音・拗音を小書きで表記したもの(例:ホッカイドウ)を使用
'http://www.post.japanpost.jp/zipcode/dl/kogaki.html
'より入手
Application.ScreenUpdating = False
Dim CSVファイル As Workbook, CSVシート As Worksheet
Dim a As String, b As String, c As Long, d As Long, e(5) As String, f As Byte
Dim 連住所 As String, 決定 As String
a = Dir(CSVFaliPath): b = Mid(a, 1, Len(a) - 4)
psbブックを開く CSVFaliPath
Set CSVファイル = Workbooks(a)
Set CSVシート = CSVファイル.Worksheets(b)
'郵便番号を必要形式に変える
'1.小文字変換
e(1) = StrConv(Trim(郵便番号), vbLowerCase)
e(3) = ""
For f = 1 To Len(e(1))
e(2) = Mid(e(1), f, 1)
If IsNumeric(e(2)) = True Then
e(3) = e(3) & e(2)
End If
Next f
'2.7桁か?
If Len(e(3)) <> 7 Then
決定 = ""
MsgBox "郵便番号形式が7桁ではありません。", vbCritical, "郵便番号形式エラー"
GoTo myend:
End If
With CSVシート
c = .Range("a65536").End(xlUp).Row
決定 = ""
For d = 1 To c
If e(3) = .Cells(d, 3).Value Then
連住所 = .Cells(d, 7).Value & .Cells(d, 8).Value & .Cells(d, 9).Value
決定 = 連住所
End If
Next d
End With
myend:
If 決定 = "" Then
MsgBox "指定ファイル内に指定郵便番号の住所は見つかりませんでした。", vbCritical, "住所検索"
fncGetAddress = 0
Else
fncGetAddress = 決定
End If
CSVファイル.Close
Set CSVファイル = Nothing
Set CSVシート = Nothing
Public Function fnc月末(HIDUKE As Date) As String
'*******************************************************************************
'月末を求める
'*******************************************************************************
Dim a As Date
a = DateAdd("m", 1, DateSerial(Year(HIDUKE), Month(HIDUKE), 1))
fnc月末 = CDate(a - 1)
End Function
'*******************************************************************************
'日付の表示書式【Format】
'*******************************************************************************
'Long Date [2004年5月3日] 形式表示
'Medium Date [03・Apr・98] 形式表示
'Short Date [98/11/23] 形式表示
'Long Time [10:14:42PM] 形式表示
'Medium Time [10:45PM] 形式表示
'Short Time [19:32] 形式表示
'General Date 日付だけの場合は時刻は表示されません。
' 時刻だけの場合は日付は表示されません。
Public Sub シート新ブック保存(TagetBook As Workbook, TagetSheet As Worksheet, FolPath As String, ファイル名 As String)
'*******************************************************************************
'指定シートを新しいブックに保存(指定フォルダへ)必ずシート名は[Sheet1]にする
'*******************************************************************************
Dim NewBook As Workbook, strName As String, NewSheet As Worksheet
strName = 保存名作成
Set NewBook = Workbooks.Add
Dim i, cnt As Integer
cnt = NewBook.Sheets.Count
For i = 1 To cnt
If NewBook.Sheets(i).Name = "Sheet1" Then
NewBook.Sheets(i).Name = "Sheet0"
Exit For
End If
Next
Option Explicit
Sub SheetHTMLsourceGet()
'****************************
'シート上のURLのソースを取得
'****************************
'即興で作成
'少しコードが荒いです
'適当に変換して使って下さい。
Dim sht As Worksheet
Dim n As Long, tmp(4) As String, i As Long
Dim Character As String, SPL As Variant, SP(4) As String
Dim Ffind(24) As String, Lfind(24) As String, SPL2 As Variant
With sht
For n = 1 To .Cells(65536, 1).End(xlUp).Row
Character = responseXMLText(.Cells(n, 1).Value)
tmp(1) = CharacterFindNext(Character, Ffind(11), Lfind(12))
Debug.Print tmp(1)
.Cells(n, 3).Value = tmp(1)
tmp(2) = CharacterFindNext(Character, Ffind(13), Lfind(14))
Debug.Print tmp(2)
SPL = Split(tmp(2), SP(1))
For i = LBound(SPL) To UBound(SPL)
SPL2 = Split(Trim(SPL(i)), SP(2))
Debug.Print SPL2(0)
.Cells(n, i + 4).Value = SPL2(0)
Next i
Next n
End With
MsgBox "END!"
End Sub
Private Sub GetMSXML(ByRef objMSXML As Object, ByRef blnErr As Boolean)
'***************************************************
'XML_Parser(MSXML)をObject定義する
'***************************************************
'リロードを伴わずにソース情報取得
'元々はXML形式のデータのやり取りを行うもの
'XML Parser
'JavaScriptではAjax(Asynchronous JavaScript + XML)
On Error Resume Next
Set objMSXML = CreateObject("MSXML2.XMLHTTP") 'MSXML2Class
If (Err.Number <> 0) Then
Set objMSXML = CreateObject("Microsoft.XMLHTTP")
If (Err.Number <> 0) Then
Set objMSXML = CreateObject("MSXML.XMLHTTPRequest")
End If
End If
On Error GoTo 0
If objMSXML Is Nothing Then
blnErr = True
Else
blnErr = False
End If
End Sub
Private Function responseXMLText(strURL As String) As String
'*********************************************
'XML又はTextで取得する
'*********************************************
'*********************************************
'Shift -JISをUnicodeに変換
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
'Dim strURL As String
Dim lngStatus As Long, strStatus As String, strSRC As String
Dim XMLTXT As Byte, blnSJIS As Boolean
Sub ExcelSheetAllName()
'*****************************************
'指定ブックにある全てのシート名を取得する
'*****************************************
Dim bok As Workbook, sht As Worksheet
Dim strMSG As String, i As Long
Set bok = ThisWorkbook
Application.ScreenUpdating = False
i = 0
For Each sht In bok.Worksheets
With sht
i = i + 1
strMSG = strMSG & i & vbTab & .Name & vbCr
End With
Next sht
Application.ScreenUpdating = True
MsgBox strMSG
End Sub
Sub ExcelSheetAllNameChange()
'*****************************************
'指定ブックにある全てのシート名を変更する
'*****************************************
Dim bok As Workbook, sht As Worksheet
Dim strMSG As String, i As Long
Set bok = ThisWorkbook
Application.ScreenUpdating = False
i = 0
For Each sht In bok.Worksheets
With sht
i = i + 1
.Name = "シート" & i
End With
Next sht
Application.ScreenUpdating = True
MsgBox "END"
End Sub
Sub ExcelSheetAllCount()
'***********************************************
'指定ブックにある全てのシートの数をカウントする
'***********************************************
Dim bok As Workbook
Set bok = ThisWorkbook
MsgBox "シート数" & vbTab & bok.Sheets.Count
End Sub
Sub ExcelSheetAdd()
'***********************************************
'指定ブックのシートを追加する
'***********************************************
Dim bok As Workbook, sht As Worksheet
Set bok = ThisWorkbook
Set sht = bok.Sheets.Add
MsgBox "追加シート" & vbTab & sht.Name
End Sub
Sub ExcelSheetAddCount()
'***********************************************
'指定ブックのシートを複数追加する
'***********************************************
Dim bok As Workbook, bytCnt As Byte
bytCnt = 3
Set bok = ThisWorkbook
bok.Worksheets.Add Count:=bytCnt
MsgBox "追加シート" & vbTab & bytCnt
End Sub
Sub ExcelSheetAddAfter()
'*************************************************
'指定ブックのシートを最後(追加場所指定)に追加する
'*************************************************
Dim bok As Workbook, bytCnt As Byte
bytCnt = 2
Set bok = ThisWorkbook
With bok
.Worksheets.Add After:=.Worksheets(.Worksheets.Count), Count:=bytCnt
End With
MsgBox "最後に追加シート" & vbTab & bytCnt
End Sub
Sub ExcelSheetAddBeforeName()
'*****************************************************
'指定ブックのシートを名前と追加場所を指定して追加する
'*****************************************************
'シート群の最初に名前を指定して追加
'同名シートは追加不可です。
Dim bok As Workbook
Set bok = ThisWorkbook
With bok
.Worksheets.Add(Before:=.Worksheets(1)).Name = "テスト前"
End With
MsgBox "END"
End Sub
Sub ExcelSheetAddAppName()
'*****************************************************
'指定ブックのシートを名前と追加場所を指定して追加する
'*****************************************************
'指定シートの前に名前を指定して追加
'同名シートは追加不可です。
Dim bok As Workbook
Set bok = ThisWorkbook
With bok
.Worksheets.Add(Before:=.Worksheets("Sheet11")).Name = "横"
End With
MsgBox "END"
End Sub
Sub ExcelSheetMoveAfter()
'*****************************************************
'指定ブックのシートを移動する
'*****************************************************
'指定シートを指定シートの後に移動
Dim bok As Workbook
Set bok = ThisWorkbook
With bok
.Worksheets("横").Move After:=.Worksheets("テスト")
End With
MsgBox "END"
End Sub
Sub ExcelSheetDelete()
'*****************************************************
'指定ブックの指定シートを削除する
'*****************************************************
'全てのシートは削除不可(最低1枚は必要)
'以下の例はシート名に「Sheet」がつくシートを全て削除してます。
Dim bok As Workbook, sht As Worksheet
Set bok = ThisWorkbook
Application.ScreenUpdating = False
For Each sht In bok.Worksheets
With sht
If InStr(1, .Name, "Sheet") <> 0 Then
'ダイアログ非表示
Application.DisplayAlerts = False
.Delete
'ダイアログ表示
Application.DisplayAlerts = True
End If
End With
Next sht
Application.ScreenUpdating = True
MsgBox "END"
End Sub
Sub ExcelSheetCopy()
'*****************************************************
'指定ブックの指定シートをコピーする
'*****************************************************
'新しくブックを追加して指定シートの後にコピー
End Sub
Sub ExcelSheetVisibleFalse()
'*****************************************************
'指定ブックの指定シートを隠す(非表示)
'*****************************************************
'メニューから表示可能
Dim bok As Workbook
Set bok = ThisWorkbook
bok.Worksheets("テスト").Visible = False
MsgBox "END"
End Sub
Sub ExcelSheetVisibleTrue()
'*****************************************************
'指定ブックの指定シートを表示(再表示)
'*****************************************************
End Sub
Sub ExcelSheetHidden()
'*****************************************************
'指定ブックの指定シートを隠す(非表示)
'*****************************************************
'メニューから表示可能
Dim bok As Workbook
Set bok = ThisWorkbook
bok.Worksheets("テスト").Visible = xlSheetHidden
MsgBox "END"
End Sub
Sub ExcelSheetVeryHidden()
'*****************************************************
'指定ブックの指定シートを隠す(非表示)
'*****************************************************
'メニューから表示不可(VBAからのみ可能)
Dim bytLabelstr As Byte
Dim objME As Object
Dim MeMax As Long
Dim MeNow As Long
MeMax = Suu
MeNow = ForSuu
Set objME = Me.Label12
bytLabelstr = bytLabelstr + 1
If bytLabelstr = 40 Then
bytLabelstr = 0
End If
If bytLabelstr <= 20 Then
objME.Caption = ""
DoEvents
Else
objME.Caption = "Just a moment "
DoEvents
End If
If MeNow = MeMax Then objME.Caption = ""
Set objME = Nothing
Dim i As Long
With Me.ListBox1
.ColumnCount = 3
For i = 2 To 100
.AddItem
.List(.ListCount - 1, 0) = sht名簿.Cells(i, 1)
.List(.ListCount - 1, 1) = sht名簿.Cells(i, 2)
.List(.ListCount - 1, 2) = sht名簿.Cells(i, 26)
Next i
End With
Me.ListBox1.ListIndex = -1
'GetActiveWindow 関数(Windows API)
Declare Function GetActiveWindow Lib "user32" () As Long
'GetWindowRect 関数(Windows API)
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _
lpRect As RECT) As Long
:: ■実行テキストファイルの変数定義
set cmdTxtPath=C:\Temp\ftptest.txt
:: ■ログファイル生成場所の変数定義
set cmdLogPath=C:\Temp\ftplog
:: ■日付を取得及び変数定義
set cmdDateA=%date%
:: 必要箇所文字を取り出し結合
set cmdDateB=%cmdDateA:~0,4%%cmdDateA:~-5,2%%cmdDateA:~-2,2%
:: ■時刻を取得及び変数定義
:: 空白を0に置き換え格納
set cmdTimeA=%time: =0%
:: 必要箇所文字を取り出し結合
set cmdTimeB=%cmdTimeA:~0,2%%cmdTimeA:~3,2%%cmdTimeA:~6,2%
:: ◇ログを保存するフォルダ作成
MkDir "%cmdLogPath%\"
Option Explicit
Function ServerAddressLocal(wwwAddress As String) As String
'***************************************
'WWWアドレスをローカルアドレスに変更
'***************************************
'サーバー上のディレクトリーとローカルフォルダを一致させる
Dim strDel As String, str As String, BasicPointAddress As String
ServerAddressLocal = BasicPointAddress & "\" & str
End Function
Function FTPUpAddress(wwwAddress As String) As String
'***************************************
'WWWアドレスをFTP用アドレスに変更
'***************************************
'サーバーUP用のFTPアドレスに変更
Dim strDel As String, str As String, BasicPointAddress As String
Option Explicit
Private Sub test1()
Dim a As Double
Debug.Print "A"
On Error GoTo Jump
a = 2 / 0 '───┐
Debug.Print "B" '┼┐
a = 2 / 1 '││
Debug.Print "C" '││
Exit Sub '││
Debug.Print "D" '││
Jump: '───────┘│
Debug.Print "E" ' │
Resume Next '─────┘
Debug.Print "F"
'A
'E
'B
'C
End Sub
この例では、エラー処理コードは Exit Sub ステートメントと End Sub ステートメントの間にあり、通常のプロシージャの流れから区切られています。
Option Explicit
Private Sub test1()
'*******************
'On Error GoTo line
'*******************
Dim a As Double, b As Byte
b = 1
Debug.Print "①"
On Error GoTo Jump
a = 2 / 0
Debug.Print "②"
a = 2 / b
Debug.Print "③"
Exit Sub
Debug.Print "④"
Jump:
Debug.Print "⑤"
Resume Next
Debug.Print "⑥"
'①
'⑤
'②
'③
End Sub
Private Sub test2()
'*******************
'On Error Resume Next
'*******************
Dim a As Double, b As Byte
b = 1
Debug.Print "①"
On Error Resume Next
a = 2 / 0
Debug.Print "②"
a = 2 / b
Debug.Print "③"
Exit Sub
Debug.Print "④"
'①
'②
'③
End Sub
Private Sub test3()
'*******************
'On Error GoTo 0
'*******************
Dim a As Double
Debug.Print "①"
On Error Resume Next
a = 2 / 0
Debug.Print "②"
On Error GoTo 0
Debug.Print "③"
On Error Resume Next
Debug.Print "④"
a = 2 / 0
Debug.Print "⑤"
Exit Sub
Debug.Print "⑥"
'①
'②
'③
'④
'⑤
End Sub
Private Sub testA()
'*******************
'Resume [0]
'*******************
Dim a As Double, b As Byte
b = 0
Debug.Print "①"
On Error GoTo Jump
a = 2 / b
Debug.Print "②"
b = b - 1
a = 2 / b
Debug.Print "③"
Exit Sub
Debug.Print "④"
Jump:
Debug.Print "⑤"
b = b + 1
Resume
Debug.Print "⑥"
'①
'⑤
'②
'⑤
'③
End Sub
Private Sub testB()
'*******************
'Resume Next
'*******************
Dim a As Double, b As Byte
b = 1
Debug.Print "①"
On Error GoTo Jump
a = 2 / 0
Debug.Print "②"
a = 2 / b
Debug.Print "③"
Exit Sub
Debug.Print "④"
Jump:
Debug.Print "⑤"
Resume Next
Debug.Print "⑥"
'①
'⑤
'②
'③
End Sub
Private Sub testC()
'*******************
'Resume line
'*******************
Dim a As Double, b As Byte
b = 1
Debug.Print "①"
On Error GoTo Jump
a = 2 / 0
ReTry:
Debug.Print "②"
a = 2 / b
Debug.Print "③"
Exit Sub
Debug.Print "④"
Jump:
Debug.Print "⑤"
Resume ReTry
Debug.Print "⑥"
'①
'⑤
'②
'③
End Sub
Public Sub コンボ昇順(obj As ComboBox)
'*******************************************************************************
'コンボ(3列目がカナ設定)フリガナ順ソート
'*******************************************************************************
Dim n As Long, i As Long, m As String, s As Long, j As Long, t(3) As String
Dim Data(), a As Long, b As Byte
n = obj.ListCount
ReDim Data(n, 3)
For a = 1 To n
For b = 1 To 3
Data(a, b) = obj.List(a - 1, b - 1)
Next b
Next a
For i = 2 To n - 1 '1は項目
m = Data(i, 3)
s = i
For j = i + 1 To n
If Data(j, 3) < m Then
m = Data(j, 3)
s = j
End If
Next j
Sub 指定フォルダ指定ファイル削除()
'***********************************
'指定フォルダ指定ファイル削除
'***********************************
'指定フォルダ内のファルダを含むフォルダ内の特定ファイルを削除する
'指定フォルダを含む2階層まで検索
'このサンプルでは[Thumbs.db]を削除しています。
Dim strFilePath As String
Dim objFSO As Object
Dim strOpenPath As String
Dim objFolder As Object
Dim objSubFolder As Object
Dim objFile As Object
Dim strFileName As String
Dim GetFileName As String
Dim lngCnt As Long
GetFileName = "Thumbs" '検索するファイル名
lngCnt = 0
strOpenPath = ThisWorkbook.Path
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strOpenPath)
'フォルダ直下
For Each objFile In objFolder.Files
strFilePath = objFile.Path
strFileName = objFSO.GetFileName(strFilePath)
If InStr(1, strFileName, GetFileName) <> 0 Then
If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then
lngCnt = lngCnt + 1
'[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可
objFSO.GetFile(strFilePath).Delete
End If
End If
Next
'サブフォルダ
For Each objSubFolder In objFolder.SubFolders
For Each objFile In objSubFolder.Files
strFilePath = objFile.Path
strFileName = objFSO.GetFileName(strFilePath)
If InStr(1, strFileName, GetFileName) <> 0 Then
If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then
lngCnt = lngCnt + 1
'[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可
objFSO.GetFile(strFilePath).Delete
End If
End If
Next
Next
Option Explicit
Function FSODriveInfo(ByVal Drvpath As String)
'********************************************
'FSO 指定したドライブの種類を判別する
'********************************************
Dim fso, d, s, t
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(Drvpath)))
Select Case d.DriveType
Case 0: t = "不明"
Case 1: t = "リムーバブル ディスク"
Case 2: t = "ハード ディスク"
Case 3: t = "ネットワーク ディスク"
Case 4: t = "CD-ROM"
Case 5: t = "RAM ディスク"
End Select
s = Drvpath & " = DriveLetter:"
s = s & d.DriveLetter & ",DriveType: " & d.DriveType & "(" & t & ")"
s = s & ",SerialNumber: " & d.SerialNumber
FSODriveInfo = s
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Debug.Print FSODriveInfo("D:\")
'D:\ = DriveLetter:D,DriveType: 4(CD-ROM),SerialNumber: -999999999
End Sub
Option Explicit
Sub FSOTextFile(ByVal TxtPath As String, ByVal Character As String)
'****************************************************************
'FSO 指定したファイルの読取・追加・書込をするFSOTextFile
'****************************************************************
'
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim Fso, f
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f = Fso.OpenTextFile(TxtPath, ForWriting, True)
f.Write Character
f.Close
End Sub
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
Dim m As String
Dim s As String
p = ThisWorkbook.Path
m = "test.txt"
s = "テスト"
Call FSOTextFile(p & "\" & m, s)
'テスト
End Sub
Option Explicit
Sub ShowFolderList(folderspec)
'*****************************************************
'指定されたフォルダ内に置かれているすべてのフォルダの
'入った Folders コレクションを返す
'*****************************************************
Dim fs, f, f1, s, sf
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folderspec)
Set sf = f.SubFolders
For Each f1 In sf
s = s & f1.Name
s = s & vbCrLf
Next
MsgBox s
End Sub
Option Explicit
Function FSODriveInfoShareName(ByVal drvpath As String)
'***********************************************
'FSO 指定されたドライブのネットワーク共有名を取得
'***********************************************
Dim Fso, d
Set Fso = CreateObject("Scripting.FileSystemObject")
Set d = Fso.GetDrive(Fso.GetDriveName(Fso.GetAbsolutePathName(drvpath)))
FSODriveInfoShareName = d.DriveLetter & ": ShareName: " & d.ShareName
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Debug.Print FSODriveInfoShareName("C:\")
'C: ShareName: MSXXXXXX
End Sub
Option Explicit
Function FSOFileType(ByVal FilePath As String)
'**************************************************
'FSO ファイルの種類に関する情報を取得
'**************************************************
'パスはファイルを指定
'該当パスが無い場合はエラーになります。
Dim Fso, f, s
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f = Fso.GetFile(FilePath)
FSOFileType = f.Type
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
Dim m As String
p = ThisWorkbook.Path
m = ThisWorkbook.Name
Debug.Print FSOFileType(p & "\" & m)
'Microsoft Excel ワークシート
End Sub
Dim sht As Worksheet
Dim lIndex As Long
Dim hFolder As Folder
Dim subFolder As Folder
Dim Fso As FileSystemObject
Dim hFile As File
Dim iFolder As Folder
Set Fso = New FileSystemObject
Set hFolder = Fso.GetFolder(ThisWorkbook.Path & "\")
Set sht = ThisWorkbook.Worksheets.Add
With sht
'1.直下のファイル名取得(この場合このコードが実装されているファイル名が入る)
lIndex = 1
For Each hFile In hFolder.Files
.Cells(lIndex, 1).Value = hFile.Name 'ファイル名のみの場合
lIndex = lIndex + 1
Next hFile
'2.直下のフォルダ名及びファイル名取得
For Each subFolder In hFolder.SubFolders
.Cells(lIndex, 2).Value = "[" & subFolder.Name & "]"
lIndex = lIndex + 1
Set iFolder = Fso.GetFolder(subFolder.Path & "\")
For Each hFile In iFolder.Files
.Cells(lIndex, 3).Value = hFile.Name
lIndex = lIndex + 1
Next hFile
Set iFolder = Nothing
Next subFolder
End With
Set Fso = Nothing
Set subFolder = Nothing
Set hFolder = Nothing
Set hFile = Nothing
Set sht = Nothing
Option Explicit
Function FSOTextStream(ByVal txtPath As String, ByVal Character As String)
'*******************************************
'指定したファイルの読取・追加・書込をする
'*******************************************
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile txtPath ' Create a file.
Set f = fso.GetFile(txtPath)
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write Character
ts.Close
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
FSOTextStream = ts.ReadLine
ts.Close
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
Dim m As String
Dim s As String
p = ThisWorkbook.Path
m = "test.txt"
s = "テスト"
Debug.Print FSOTextStream(p & "\" & m, s)
'テスト
End Sub
Option Explicit
Sub FSOTextFile(ByVal txtPath As String, ByVal Character As String)
'****************************************************************
'FSO 指定したファイルの読取・追加・書込をするFSOTextFile
'****************************************************************
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(txtPath, ForWriting, True)
f.Write Character
f.Close
End Sub
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
Dim m As String
Dim s As String
p = ThisWorkbook.Path
m = "test.txt"
s = "テスト"
Call FSOTextFile(p & "\" & m, s)
'テスト
End Sub
Option Explicit
Sub SetScrrunDLL()
'*****************************************************
'このコードが実装されたブックが「FileSystemObject」
'が使えるように参照設定をする。
'*****************************************************
On Error GoTo MyERROE:
'参照設定
ThisWorkbook.VBProject.References.AddFromFile "C:\WINDOWS\system32\scrrun.dll"
MyERROE:
End Sub
Sub フォルダ名変更()
'*****************************************************
'指定文字を先頭に付加(追加)させる
'*****************************************************
'対象は同階層フォルダ
'結果を新しいシートを追加し一覧表示
Dim Fso As FileSystemObject
Dim sht As Worksheet, Nsht As Worksheet
Dim lIndex As Long
Dim hFolder As Folder
Dim subFolder As Folder
Dim FukaName As String
Dim MotoName As String
Dim PathName As String
Set Fso = New FileSystemObject
Set hFolder = Fso.GetFolder(ThisWorkbook.Path & "\")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set Nsht = ThisWorkbook.Worksheets.Add
Option Explicit
Function FSOFolderType(ByVal FolderPath As String)
'**************************************************
'FSO フォルダの種類に関する情報を取得
'**************************************************
'パスはフォルダを指定
'該当パスが無い場合はエラーになります。
Dim Fso, f, s
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f = Fso.GetFolder(FolderPath)
FSOFolderType = f.Type
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
p = ThisWorkbook.Path
Debug.Print FSOFolderType(p)
'ファイル フォルダ
End Sub
Option Explicit
Sub SetScrrunDLL()
'*****************************************************
'このコードが実装されたブックが「FileSystemObject」
'が使えるように参照設定をする。
'*****************************************************
On Error GoTo MyERROE:
'参照設定
ThisWorkbook.VBProject.References.AddFromFile "C:\WINDOWS\system32\scrrun.dll"
MyERROE:
End Sub
Sub フォルダ名変更()
'*****************************************************
'先頭から文字数指定しフォルダ名を変更する
'*****************************************************
'対象は同階層フォルダ
'結果を新しいシートを追加し一覧表示
Dim Fso As FileSystemObject
Dim sht As Worksheet, Nsht As Worksheet
Dim lIndex As Long
Dim hFolder As Folder
Dim subFolder As Folder
Dim cntdel As Long
Dim MotoName As String
Dim PathName As String
Set Fso = New FileSystemObject
Set hFolder = Fso.GetFolder(ThisWorkbook.Path & "\")
Set sht = ThisWorkbook.Worksheets("Sheet1")
Set Nsht = ThisWorkbook.Worksheets.Add
Option Explicit
'**************************************************
'HTML形式のテーブル(表)の値を取得する
'**************************************************
'1.ユーザーフォームを設置 UserForm1
'2.テキストボックスを設置 TextBox1
'3.コマンドボタンを設置 CommandButton1
'4.WebBrowserを設置 WebBrowser1
'**************************************************
'フォーム上のブラウザに指定アドレス先を表示
'**************************************************
Private Sub CommandButton1_Click()
Me.WebBrowser1.Navigate Trim(Me.TextBox1.Value)
End Sub
'**************************************************
'読み込み(DL)が完了後発生するイベント
'**************************************************
'注意:テーブルエレメントは行も列も「0」から始まります。
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim sht As Worksheet, cnt As Long
Dim cnty As Long, str As String
'抽出した値を格納するシートを指定
Set sht = ThisWorkbook.Worksheets("Sheet4")
Dim objTable As Object
Dim 全テーブル数 As Long
Dim 該当テーブル番号 As Long
Dim 行数 As Long, x As Long
Dim 列数 As Long, y As Long
Dim テキスト As String
Dim 目的タイトル As String
'HTMLドキュメントのテーブルタグをオブジェクトにセット
Set objTable = Me.WebBrowser1.Document.getElementsByTagName("TABLE")
'TABLEが無い場合
If objTable Is Nothing Then
Set objTable = Nothing
MsgBox "TABLE Object Nothing!"
Exit Sub
End If
'TABLEが無い場合
If objTable.Length = 0 Then
Set objTable = Nothing
MsgBox "TABLE Object 全テーブル数 = 0!"
Exit Sub
Else
全テーブル数 = objTable.Length - 1
End If
'エラー回避
If 行数 < 0 Then
MsgBox "TABLE Object ERR!"
Exit Sub
End If
'(項目行必要の場合は0から始める)
'(項目行不要の場合は1から始める)
For x = 1 To 行数
'目的のテーブル列数取得
列数 = objTable(該当テーブル番号).Rows(x).Cells.Length - 1
'エラー回避
If 列数 < 0 Then
MsgBox "TABLE Object ERR!"
Exit Sub
End If
'書き込むシートの最終行取得
cnt = sht.Cells(65536, 1).End(xlUp).Row + 1
'シート書き込み用列番号を初期化
cnty = 0
cnty = cnty + 1
sht.Cells(cnt, cnty).Value = 目的タイトル
For y = 0 To 列数
cnty = cnty + 1
テキスト = objTable(該当テーブル番号).Rows(x).Cells(y).innerText
Debug.Print "テ[" & 該当テーブル番号 & "]" & "行[" & x & "]" & "列[" & y & "]:" & テキスト
sht.Cells(cnt, cnty).Value = Trim(テキスト)
Next y
Next x
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
'[Microsoft Support]参照
'http://support.microsoft.com/kb/q244757/
Sub DownloadFile(strDLWWWPath As String, strDLFileName As String)
'*********************************************
'APIを使用しWeb上のファイルをダウンロードする
'*********************************************
'予め直下に「DownloadFile」フォルダを作成しておく
If Ret <> 0 Then
MsgBox "Download Error!", 48, strDLFileName
Else
MsgBox strDLFileName & " -Finish!", strDLFileName
End If
'APPLIES TO
'Microsoft Internet Explorer 4.0 128-Bit Edition
'Microsoft Internet Explorer 4.01 Service Pack 2
'Microsoft Internet Explorer 4.01 Service Pack 1
'Microsoft Internet Explorer 5.0
'Microsoft Internet Explorer 5.01
'Microsoft Internet Explorer 5.5
'Microsoft Visual Basic 5.0 Learning Edition
'Microsoft Visual Basic 6.0 Learning Edition
'Microsoft Visual Basic 5.0 Professional Edition
'Microsoft Visual Basic 6.0 Professional Edition
'Microsoft Visual Basic 5.0 Enterprise Edition
'Microsoft Visual Basic Enterprise Edition for Windows 6.0
End Sub
Private Sub test()
DownloadFile "http://www.jp-ia.com/_ans", "file86.htm"
End Sub
End Sub
Private Sub SubFolderSearch(StartFolderPath As String)
'**************************************************
'フォルダパス及びフォルダ名取得再帰処理
'**************************************************
'無限ループ処理の為、フォルダやファイルの削除など行う場合は
'必ずバックアップを行って下さい。
'追加処理をした場合PCのハングアップの危険もあります。
'一応動作確認は行ってます。
Dim SearchMainFolder As Folder
Dim SearchSubFolderA As Folder
Dim SearchSubFolderB As Folder
Dim objFolder As Object '*処理
Dim objFile As Object '*処理
Dim strFilePath As String '*処理
Dim strFileName As String '*処理
'*処理---------------------------------------------------------------/
'フォルダ直下
With objFSO
Set objFolder = .GetFolder(StartFolderPath)
For Each objFile In objFolder.Files
strFilePath = objFile.Path
strFileName = .GetFileName(strFilePath)
If InStr(1, strFileName, GetFileName) <> 0 Then
If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then
lngCnt = lngCnt + 1 '処理数
'[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可
.GetFile(strFilePath).Delete
End If
End If
Next
Set objFolder = Nothing
End With
'*処理---------------------------------------------------------------/
'フォルダ数
lngRootCnt = lngRootCnt + 1
With objFSO
Set SearchMainFolder = .GetFolder(StartFolderPath)
For Each SearchSubFolderA In SearchMainFolder.SubFolders
'*処理---------------------------------------------------------------/
'フォルダ直下
Set objFolder = .GetFolder(SearchSubFolderA)
For Each objFile In objFolder.Files
strFilePath = objFile.Path
strFileName = .GetFileName(strFilePath)
If InStr(1, strFileName, GetFileName) <> 0 Then
If MsgBox(strFilePath & vbNewLine & "Delete?", vbOKCancel, strFileName) = vbOK Then
lngCnt = lngCnt + 1 '処理数
'[Kill]関数では"Thumbs.db"等の特殊ファイルは削除不可
.GetFile(strFilePath).Delete
End If
End If
Next
Set objFolder = Nothing
'*処理---------------------------------------------------------------/
'フォルダ数
lngRootCnt = lngRootCnt + 1
If SearchSubFolderA.SubFolders.Count > 0 Then
For Each SearchSubFolderB In SearchSubFolderA.SubFolders
Call SubFolderSearch(SearchSubFolderB.Path)
Next SearchSubFolderB
End If
Next SearchSubFolderA
End With
Set SearchMainFolder = Nothing
Set SearchSubFolderA = Nothing
Set SearchSubFolderB = Nothing
End Sub
Sub SetScrrunDLL()
'*****************************************************
'このコードが実装されたブックが「FileSystemObject」
'が使えるように参照設定をする。
'*****************************************************
On Error GoTo MyERROE:
'参照設定
ThisWorkbook.VBProject.References.AddFromFile "C:\WINDOWS\system32\scrrun.dll"
MyERROE:
End Sub
Dim sht As Worksheet, cntLow As Long
Dim strExtension As String, lngSize As Long
Dim objMsSR As Object
Sub GetAllSubFolderAndFiles()
'************************************************************
'指定フォルダ内のサブフォルダとファイル(詳細)を列挙(深階層)
'************************************************************
Private Sub SearchSubFolderAndFiles(objMainFld As Folder)
'****************
'サブルーチン
'****************
Dim objFld As Folder
Dim objFile As File
Dim strFldName As String
Dim strFldSize As String
strFldName = objMainFld.Name
'ドライブ・ディスクを回避(受付)
If strFldName = "" And objMainFld.Attributes = 22 Then
'22=Hidden(2)+System(4)+Directory(16)
For Each objFld In objMainFld.SubFolders
Call SearchSubFolderAndFiles(objFld)
Next objFld
'通常フォルダは全て受け付け
ElseIf objMainFld.Attributes = 16 Then
'16=Directory(16)
strFldSize = objMainFld.Size
For Each objFld In objMainFld.SubFolders
Call SearchSubFolderAndFiles(objFld)
Next objFld
Else
GoTo TheEnd:
End If
For Each objFile In objMainFld.Files
With objFile
If objMsSR.GetExtensionName(.Path) = strExtension And .Size > lngSize Then
cntLow = cntLow + 1
'●Name プロパティ
'ファイルまたはフォルダ名の取得
'●Size プロパティ
'ファイルバイトサイズ・フォルダ合計バイトサイズの取得
'●DateCreated プロパティ
'ファイルまたはフォルダ作成日時の取得
'●DateLastModified プロパティ
'ファイルまたはフォルダ更新日時の取得
'●DateLastAccessed プロパティ
'ファイルまたはフォルダアクセス日時の取得
Option Explicit
Function FSOFileShortName(ByVal FilePath As String)
'**************************************
'FSO 従来の 8.3 形式のファイル名取得
'**************************************
'パスはファイルを指定
'該当パスが無い場合はエラーになります。
Dim Fso, f, s
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f = Fso.GetFile(FilePath)
s = UCase(f.Name) & " ShortName:" & f.ShortName
FSOFileShortName = s
'UCase 関数
'指定したアルファベットの小文字を大文字に変換する文字列処理関数です。
'小文字だけが大文字に変換されます。
'小文字のアルファベット以外の文字は影響を受けません。
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
Dim m As String
p = ThisWorkbook.Path
m = ThisWorkbook.Name
Debug.Print FSOFileShortName(p & "\" & m)
'KEYWORD修正.XLS ShortName:KEYWOR~1.XLS
End Sub
Option Explicit
Function FSOFolderShortName(ByVal FolderPath As String)
'**************************************
'FSO 従来の 8.3 形式のフォルダ名取得
'**************************************
'パスはフォルダを指定
'該当パスが無い場合はエラーになります。
Dim Fso, f, s
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f = Fso.GetFolder(FolderPath)
s = UCase(f.Name) & " ShortName:" & f.ShortName
FSOFolderShortName = s
'UCase 関数
'指定したアルファベットの小文字を大文字に変換する文字列処理関数です。
'小文字だけが大文字に変換されます。
'小文字のアルファベット以外の文字は影響を受けません。
End Function
Private Sub test()
FSOSetDLL 'FSO参照設定
Dim p As String
p = ThisWorkbook.Path
Debug.Print FSOFolderShortName(p)
'コピー ~ TES_TGG_XX ShortName:コピー~1
End Sub
Option Explicit
Sub ExcelDAO_CreateDatabase()
'********************************************
'DAOデータベース(.mdb)作成~データ入力一連
'********************************************
'参照設定Microsoft DAO Object Libraly
'フィールド名をコードで設定する場合
Dim strFilePath As String
Dim strFileName As String
Dim strTblName As String
Dim strTblPath As String
Dim objWrkSpc As DAO.Workspace
Dim objDtbs As DAO.Database
Dim objTbl As DAO.TableDef
Dim objFld As DAO.Field
Dim objIndx As DAO.Index
Dim objRcrd As DAO.Recordset
Set objRcrd = objDtbs.OpenRecordset(Name:=strTblName)
'-------------------------------------------------------------------
'【新規レコード追加】
objRcrd.AddNew
'【データ入力】
Let objRcrd.Fields(0).Value = "3" 'フィールド[1]※注意1&2
Let objRcrd.Fields(1).Value = "10001" 'フィールド[2]
Let objRcrd.Fields(2).Value = "山田一郎" 'フィールド[3]
'【レコード保存】
objRcrd.Update
'-------------------------------------------------------------------
'更に追加
objRcrd.AddNew
Let objRcrd.Fields(0).Value = "13" 'フィールド[1]
Let objRcrd.Fields(1).Value = "10002" 'フィールド[2]
Let objRcrd.Fields(2).Value = "山田二郎" 'フィールド[3]
'Let objRcrd.Fields(3).Value = "やまだじろう" 'フィールド[4]※注意3
objRcrd.Update
'-------------------------------------------------------------------
'更に追加は同上
'-------------------------------------------------------------------
'※注意1
'オートナンバー設定なので値は不要でもOK
'※注意2
'オートナンバー重複なし設定なので値を入力した場合、重複するとエラーになる
'※注意3
'フィールド設定が無いファールドに値を入力するとエラーになります。
'【ファイル終了】
objDtbs.Close
'【開放】
Set objFld = Nothing
Set objTbl = Nothing
Set objDtbs = Nothing
'【メッセージ】
MsgBox strFileName & vbCr & vbCr & strTblPath, 0, "完了"
'【終了】
Exit Sub
'【エラートラップ】
DAO_CreateDatabase:
If Err = 3204 Then
If MsgBox("同フォルダに同名ファイルが既存しています。" & vbCrLf & "[はい]上書き/[いいえ]終了", vbYesNo, "") = vbYes Then
Kill strTblPath
Resume
Else
Exit Sub
End If
Else
MsgBox "予期せぬエラーが発生しました。" & vbCrLf & Err.Description, vbCritical, "CreateDatabase"
End If
Option Explicit
Sub DicArraySameElementDelBou(ByVal DB As Variant, ByRef DB2() As String)
'*****************************************************
'FSO 配列の同じ要素を削除するDictionary(Bound)
'*****************************************************
'Dictionaryオブジェクト
Dim obj As Object, i As Long, n As Long
Set obj = CreateObject("Scripting.Dictionary")
n = 0
For i = LBound(DB) To UBound(DB)
If obj.Exists(DB(i)) = False Then
obj.Add DB(i), ""
ReDim Preserve DB2(n) As String
DB2(n) = DB(i)
n = n + 1
End If
Next i
Set obj = Nothing
End Sub
Private Sub test()
Dim i As Long, x(5) As String, DB2() As String
'テストデータ
x(0) = "1"
x(1) = "A"
x(2) = "1"
x(3) = "B"
x(4) = ""
x(5) = "1"
Call DicArraySameElementDelBou(x, DB2())
'値を表示
For i = LBound(DB2) To UBound(DB2)
Debug.Print i & vbTab & DB2(i)
Next i
Option Explicit
Sub DAO_Find_Record_Sample()
'***********************************************
'DAO 条件に一致するレコードを取得(Findメソッド)
'***********************************************
'[Microsoft DAO 3.6 Object Library]参照設定
'エクセル連携サンプル(122,852個からのデータ検索)
Dim objDtbs As DAO.Database
Dim objRcrd As DAO.Recordset
Dim strTblName As String
Dim strFilePath As String
Dim strFileName As String
Dim strFindFieldName As String
Dim strMatchFieldName(4) As String
Dim strSeek As String
Dim strSQL As String
Dim strMSG As String, h As Long
Option Explicit
Sub DicArraySameElementDelEach(ByVal DB As Variant, ByRef DB2() As String)
'*****************************************************
'FSO 配列の同じ要素を削除するDictionary(Each)
'*****************************************************
'Dictionaryオブジェクト
Dim obj As Object, vrn As Variant, n As Long
Set obj = CreateObject("Scripting.Dictionary")
n = 0
For Each vrn In DB
If obj.Exists(vrn) = False Then
obj.Add vrn, ""
ReDim Preserve DB2(n) As String
DB2(n) = vrn
n = n + 1
End If
Next vrn
Set obj = Nothing
End Sub
Private Sub test()
Dim i As Long, x(5) As String, DB2() As String
'テストデータ
x(0) = "1"
x(1) = "A"
x(2) = "1"
x(3) = "B"
x(4) = ""
x(5) = "1"
Call DicArraySameElementDelEach(x, DB2())
'値を表示
For i = LBound(DB2) To UBound(DB2)
Debug.Print i & vbTab & DB2(i)
Next i
Sub DAOを使用しMDBデータをシートにインポート()
'*****************************************
'DAOを使用しMDBデータをシートにインポート
'*****************************************
'VBEメニュー
'「ツール」→「参照設定」→ "Microsoft DAO 3.6 Object Library"チェック
Dim MYSHT As Worksheet
Dim MDBオブジェクト As Database
Dim テーブル名 As String
Dim MDB名 As String
Dim レコード As Recordset
Dim レコード数 As Integer
Dim エスキューエル As String
'データベースファイルフォルダーパス
ChDir "C:\My Documents\データベースフォルダ"
'「ファイルを開く」ダイアログ表示("データベースファイル(*.mdb))
MDB名 = Application.GetOpenFilename("データベースファイル(*.mdb),*.mdb")
'上記で[キャンセル]が押されたらプロシージャを終了
If MDB名 = "False" Then Exit Sub
'変数に指定シートSET
Set MYSHT = ThisWorkbook.Worksheets("Sheet1")
'シート全体をクリア
MYSHT.Cells.Clear
Set MDBオブジェクト = OpenDatabase(MDB名)
エスキューエル = "SELECT * FROM " & "Sheet1" & ";"
Set レコード = MDBオブジェクト.OpenRecordset(エスキューエル)
With MYSHT
For レコード数 = 1 To レコード.Fields.Count
.Cells(1, レコード数).Value = レコード.Fields(レコード数 - 1).Name
Next レコード数
.Range("A2").CopyFromRecordset レコード
End With
レコード.Close
MDBオブジェクト.Close
Set レコード = Nothing
Set MDBオブジェクト = Nothing
Set MYSHT = Nothing
Option Explicit
Sub DAO_MDB_OpenRead()
'***************************************************
'DAOを使いMDBファイルを開けてデータを読む(ExcelVBA)
'***************************************************
'[Microsoft DAO 3.6 Object Library]参照設定
Dim objDtbs As DAO.Database
Dim objRcrd As DAO.Recordset
Dim strFilePath As String
Dim strFileName As String
Dim strTblName As String
Dim strFieldName() As String
Dim lngFldCnt As Long
Dim lngMvRcrd As Long
Dim strMv As String
Dim i As Long
'【データベースを開く】
Set objDtbs = OpenDatabase(strFilePath & "\" & strFileName)
'【テーブルを開く】
Set objRcrd = objDtbs.OpenRecordset(strTblName)
With objRcrd
'【フィールド数カウント】
For i = 1 To .Fields.Count
lngFldCnt = lngFldCnt + 1
ReDim Preserve strFieldName(lngFldCnt) As String
'【フィールド名取得】
strFieldName(lngFldCnt) = .Fields(i - 1).Name
Next
End With
'【先頭のレコードに移動】
objRcrd.MoveFirst
Do Until objRcrd.EOF
lngMvRcrd = lngMvRcrd + 1
strMv = ""
'【レコードの値を取得】
For i = 1 To lngFldCnt
strMv = strMv & i & vbTab & strFieldName(i) & vbTab & vbTab & objRcrd(strFieldName(i)).Value & vbCr
Next i
If MsgBox(strMv, vbOKCancel, "レコード" & lngMvRcrd) = vbCancel Then
GoTo OpenRead_END:
End If
'【次のレコードに移動】
objRcrd.MoveNext
Loop
If Dir(objName) = "" Then
'DAO Version3.5(Access97)
objName = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao350.dll"
If Dir(objName) = "" Then
MsgBox "DAO DLLが見つかりません!", vbCritical, "DAO参照設定Error!"
Exit Sub
End If
End If
On Error GoTo ONERR:
objBok.VBProject.References.AddFromFile (objName)
Exit Sub
ONERR:
'参照設定済み以外のエラー
If Err.Number <> 32813 Then
MsgBox Err.Number & vbTab & Err.Description, vbCritical, "DAO参照設定Error!"
End If
Option Explicit
Sub DAO_Find_Record()
'***********************************************
'DAO 条件に一致するレコードを取得(Findメソッド)
'***********************************************
'[Microsoft DAO 3.6 Object Library]参照設定
Dim objDtbs As DAO.Database
Dim objRcrd As DAO.Recordset
Dim strTblName As String
Dim strFilePath As String
Dim strFileName As String
Dim strFindFieldName As String
Dim strMatchFieldName(4) As String
Dim strSeek As String
Dim strSQL As String
Dim strMSG As String
Dim a, d, i, s ' 変数を作成します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
a = d.Keys ' キーを取得します。
For i = 0 To d.Count - 1 ' 配列に繰り返し処理を行います。
Debug.Print a(i) ' 結果を返します。
Next
'a
'B
'c
End Sub
Private Sub testItem()
'*******************************
'item プロパティ
'*******************************
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
Debug.Print d.item("c") ' 項目を取得します。
'カイロ
End Sub
Private Sub testkey()
'*******************************
'key プロパティ
'*******************************
Dim d, msg ' 変数を作成します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
If d.Exists("c") Then
msg = "指定したキーは存在します。"
Else
msg = "指定したキーはありません。"
End If
Debug.Print msg
'指定したキーは存在します。
End Sub
Private Sub testItems()
'*******************************
'Items メソッド
'*******************************
Dim a, d, i, s ' 変数を作成します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
a = d.Items ' 項目を取得します。
For i = 0 To d.Count - 1 ' 取得した配列に繰り返し処理を行います。
Debug.Print a(i) ' 結果を返します。
Next
'アテネ
'ベオグラード
'カイロ
End Sub
Private Sub testKeys()
'*******************************
'Keys メソッド
'*******************************
Dim a, d, i ' 変数を作成します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
a = d.Keys ' キーを取得します。
For i = 0 To d.Count - 1 ' 取得した配列に繰り返し処理を行います。
Debug.Print a(i) ' 結果を返します。
Next
'a
'B
'c
End Sub
Private Sub testRemove()
'*******************************
'Remove メソッド
'*******************************
Dim a, d, i ' 変数を作成します。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "アテネ" ' キーと項目を追加します。
d.Add "b", "ベオグラード"
d.Add "c", "カイロ"
d.Remove ("b") ' 2 つ目の組を削除します。
a = d.Items ' 項目を取得します。
For i = 0 To d.Count - 1 ' 配列に繰り返し処理を行います。
Debug.Print a(i) ' 結果を返します。
Next
'アテネ
'カイロ
End Sub
Private Sub testRemoveAll()
'*******************************
'RemoveAll メソッド
'*******************************
Dim MyIndex, FileNumber
' ループを 5 回繰り返します。
For MyIndex = 1 To 5
' 未使用のファイル番号を取得します。
FileNumber = FreeFile
' ファイル名を作成します。
Open "TEST" & MyIndex For Output As #FileNumber
' 文字列を出力します。
Write #FileNumber, "これはサンプルです。"
' ファイルを閉じます。
Close #FileNumber
Next MyIndex
With Application.FileSearch
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.Filename = "*.doc"
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
If MsgBox(str(1) & vbCr & vbCr & str(2), vbOKCancel, FileName) = vbCancel Then
'Cancelした場合
MsgBox str(3), vbInformation, FileName
Exit Sub
End If
str(4) = BkOrBackUp(BkFaolName)
If str(4) = "" Then
MsgBox "バックアップを完了出来ませんでした。", vbCritical, FileName
Else
MsgBox "バックアップを完了しました。" & vbCr & vbCr & _
"完了場所" & vbCr & str(4), vbInformation, FileName
End If
End Sub
Function BkOrBackUp(strFolname As String) As String
'********************************
'ファイルのコピー(バックアップ)
'********************************
'コピー(バックアップ)したパス~ファイル名を返す
'エクセルブック限定
Dim TruePath As String, FalsePath As String
Dim FalseName As String, NewPath As String
End Function
Sub BKUFolder(folName As String)
'**************************************
'目的のフォルダを検索、無い場合作成する
'**************************************
'バックアップ用
'無い場合目的フォルダを作成
If Dir$(strFl_mn, vbDirectory) = "" Then
MkDir strFl_mn
End If
End Sub
Function DateTimeName() As String
'*********************************
'現在の日付と時刻から文字列作成
'*********************************
'ファイル名やフォルダ名に使用する場合など
'14文字(yyyymmddhhnnss)で返します。
'年年年年月月日日時時分分秒秒
Dim str As String
str = Now
DateTimeName = Format(str, "yyyy") & Format(str, "mm") & Format(str, "dd") _
& Format(str, "hh") & Format(str, "nn") & Format(str, "ss")
End Function
'Private Sub testDateTimeName()
' MsgBox DateTimeName
'End Sub
'
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.Filename = "cmd*.*"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & " 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "ファイルは見つかりませんでした。"
End If
End With
Dim MyPath As String
Dim TargetPath As String
Dim blnCheck As Boolean
Dim strChoice As String
Dim Mypractice As Integer
Dim FolderName As String
Dim objFSO As Object
Mytrial:
Set objFSO = CreateObject("Scripting.FileSystemObject") 'FSO定義
If blnCheck = False Then '無い場合 strchoice
strChoice = MsgBox(TargetPath & " Path無いか、該当フォルダ不明です。もう一度実行しますか?" _
& vbCr & vbCr & "《はい》:この処理を中止します。" _
& vbCr & "《いいえ》:もう一度実行します。", vbYesNo, "ERROR")
Select Case strChoice
Case vbNo '《いいえ》
Set objFSO = Nothing
Exit Sub
Case vbYes '《はい》practice
Set objFSO = Nothing
GoTo Mytrial
End Select
End If
For Mypractice = 1 To 5
FolderName = TargetPath & CStr(Mypractice) & "\"
blnCheck = objFSO.Folderexists(FolderName)
If blnCheck = False Then
objFSO.copyfolder MyPath, TargetPath & CStr(Mypractice)
MsgBox "<<BackUp>>終了", 0, "END"
Set objFSO = Nothing
Exit Sub
End If
Next Mypractice
objFSO.deletefolder TargetPath & "1"
Name TargetPath & "2" As TargetPath & "1"
Name TargetPath & "3" As TargetPath & "2"
Name TargetPath & "4" As TargetPath & "3"
Name TargetPath & "5" As TargetPath & "4"
Public Sub psbブックを開く(myPath As String)
'*******************************************************************************
'パスワードを使用しブックを開く
'*******************************************************************************
'’画面更新無効
Application.ScreenUpdating = False
'’変数の定義
Dim TargetBook, strFileName As String
strFileName = Dir(myPath) 'ファイル名を取得
''error発生の場合次へ・・
On Error Resume Next
''該当Bookをセット
Set TargetBook = Workbooks(strFileName)
'’error発生の場合無効
On Error GoTo 0
'’既に開かれていた場合
If IsObject(TargetBook) Then
'’保存なしにて閉じる
Workbooks(strFileName).Close savechanges:=False
End If
'’セット終了
Set TargetBook = Nothing
'’ターゲットブックを変更可にてオープン
With Workbooks
.Open Filename:=(myPath), ReadOnly:=False, Password:=fncPass
End With
Public Sub psbパスワード保存(Mybook As Workbook)
'*******************************************************************************
'ブックにパスワードを設定し保存して閉じる
'*******************************************************************************
Dim a As String, b As String, i As Long, MySheet As Worksheet
a = Mybook.Path: b = Mybook.Name
With Mybook
Call psbブック保護(Mybook)
For i = 1 To Sheets.Count
Set MySheet = Mybook.Sheets(i)
Call psbシート保護(MySheet)
Set MySheet = Nothing
Next i
.SaveAs Filename:=a & "\" & b, WriteResPassword:=fncPass
.Close
End With
End Sub
Public Sub pbsBackUpTxt()
'*******************************************************************************
'バックアップ先の指定
'*******************************************************************************
Dim a As String, b As String
b = fncTxtReadsCSV(fncBackUpRouteTxt)
If MsgBox("現在のバックアップ先は" & vbCr & vbCr & _
b & vbCr & vbCr & "変更しますか?", vbInformation + vbYesNo, "バックアップ先の確認") = vbNo Then Exit Sub
Retry:
a = fncDialogFolder("バックアップ")
If Right(a, 2) = ":\" Then
MsgBox "バックアップ先の指定に「新しいフォルダ」を作成してください。", vbCritical, "ERROR "
GoTo Retry:
End If
If a = "" Then
MsgBox "バックアップ先の指定をキャンセルしました。", vbCritical, "バックアップ先の指定"
Exit Sub
End If
pbsTxtWrites fncBackUpRouteTxt, a
MsgBox a & vbCr & vbCr & "に登録しました。", vbInformation, "バックアップ先の指定"
End Sub
Sub pbsバックアップ()
'*******************************************************************************
'バックアップ
'*******************************************************************************
Dim a As String, b As String
Dim jia As New Cls_BackUp
a = fncTxtReadsCSV(fncBackUpRouteTxt)
b = GetDriveObjectStr(a)
If b = "" Then
MyErrMSG
Exit Sub
End If
If DriveUmu(b) = False Then
MyErrMSG
Exit Sub
End If
If fncDirectoryExistence(a) = False Then
MyErrMSG
Exit Sub
End If
If Right(a, 1) <> "\" Then
a = a & "\"
End If
If Right(a, 2) = ":\" Then
MsgBox "バックアップ先の指定に「新しいフォルダ」を作成してください。", vbCritical, "ERROR "
Exit Sub
End If
'以下は簡略した方法(セル書き込みあり)
' With Range("IV1")
' .Formula = ActiveWorkbook.Name
' .Replace "xls", "bck"
' ActiveWorkbook.SaveAs .Value
' .Clear
' End With
End Sub
Dim bk As Workbook, st As Worksheet
Dim pt As String, nm As String
'===================================
'Application.DisplayAlerts = False
'===================================
pt = "C:\test\"
nm = "BookTest.xls"
Set bk = Workbooks.Add
Set st = bk.Worksheets.Add
st.Delete
Set st = bk.Worksheets.Add
st.Cells(1, 1).Value = "A"
bk.Close
'bk.Close SaveChanges:=True, Filename:=pt & nm
' ↑
'どちらでもOK
' ↓
'bk.SaveAs Filename:=pt & nm
End Sub
Private Sub AlertsTest2()
Dim bk As Workbook, st As Worksheet
Dim pt As String, nm As String
'===================================
'Application.DisplayAlerts = False
'===================================
pt = "C:\test\"
nm = "BookTest.xls"
Workbooks.Open Filename:=pt & nm
Set bk = Workbooks(nm)
Set st = bk.Worksheets.Add
st.Delete
Set st = bk.Worksheets.Add
st.Cells(1, 1).Value = "A"
bk.Close
Dim bk As Workbook, st As Worksheet
Dim pt As String, nm As String
'===================================
'Application.DisplayAlerts = False
'===================================
pt = "C:\test\"
nm = "BookTest.xls"
Workbooks.Open Filename:=pt & nm
Set bk = Workbooks(nm)
Set st = bk.Worksheets.Add
st.Delete
Set st = bk.Worksheets.Add
st.Cells(1, 1).Value = "A"
bk.Close SaveChanges:=True, Filename:=pt & nm
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim a As String
With Me.WebBrowser1.Document
a = .documentelement.innerhtml '<html></html>まで
End With
MsgBox a
End Sub
Microsoft Visual Basic または Visual C++ ですぐにアクセスできません
問題解決:http://support.microsoft.com/kb/303322/ja
<onload Event>
レスポンスデータのダウンロード完了後に発生
IEでの使用は未対応
IEでの使用は<onreadystatechange Event>を使用する
VB・VBAサンプル
Option Explicit
Sub GetMSXML(ByRef objMSXML As Object, ByRef blnErr As Boolean)
'***************************************************
'XML_Parser(MSXML)をObject定義する
'***************************************************
'リロードを伴わずにソース情報取得
'元々はXML形式のデータのやり取りを行うもの
'XML Parser
'JavaScriptではAjax(Asynchronous JavaScript + XML)
On Error Resume Next
Set objMSXML = CreateObject("MSXML2.XMLHTTP") 'MSXML2Class
If (Err.Number <> 0) Then
Set objMSXML = CreateObject("Microsoft.XMLHTTP")
If (Err.Number <> 0) Then
Set objMSXML = CreateObject("MSXML.XMLHTTPRequest")
End If
End If
On Error GoTo 0
If objMSXML Is Nothing Then
blnErr = True
Else
blnErr = False
End If
End Sub
Private Sub test_UserNamePassword()
'*********************************************
'同期 データを取得した時点で処理
'*********************************************
'*********************************************
'"UserName", "Password"を設置
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
Dim strURL As String
'パラメータ
strURL = "http://www.yahoo.co.jp/"
Call GetMSXML(objMSXML, blnErr)
If blnErr = True Then Exit Sub
With objMSXML
.Open "GET", strURL, False, "UserName", "Password"
.send
reTry:
If .readyState <> 4 Then
Debug.Print .readyState
DoEvents
GoTo reTry:
Else
Debug.Print .readyState
End If
End With
End Sub
Private Sub test_readyState()
'*********************************************
'サーバーにリクエスト中の処理状態を取得
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
Dim strURL As String
'パラメータ
strURL = "http://www.yahoo.co.jp/"
Call GetMSXML(objMSXML, blnErr)
If blnErr = True Then Exit Sub
With objMSXML
.Open "GET", strURL, True
.send
reTry:
If .readyState <> 4 Then
Debug.Print .readyState
DoEvents
GoTo reTry:
Else
Debug.Print .readyState
End If
End With
End Sub
Private Sub test_getResponseHeader()
'*********************************************
'レスポンスヘッダ取得
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
Dim strURL As String
Dim lngStatus As Long, strSRC(5) As String
Dim blnRspns As Boolean
'パラメータ
strURL = "http://www.yahoo.co.jp/"
With objMSXML
.Open "GET", strURL, True
.send
reTry:
If .readyState <> 4 Then
Debug.Print .readyState
DoEvents
GoTo reTry:
Else
Debug.Print .readyState
End If
lngStatus = .status
If (.status < 200 Or .status >= 300) Then
Debug.Print lngStatus & vbTab & strStatus
Exit Sub
Else
Debug.Print lngStatus & vbTab & strStatus
End If
If blnRspns = True Then
strSRC(0) = .getAllResponseHeaders
Else
strSRC(1) = .getResponseHeader("ETag")
strSRC(2) = .getResponseHeader("Content-Length")
strSRC(3) = .getResponseHeader("Keep-Alive")
strSRC(4) = .getResponseHeader("Content-Type")
strSRC(5) = .getResponseHeader("Last-Modified")
End If
Dim i As Byte
For i = 0 To 5
Debug.Print strSRC(i)
Next i
End With
End Sub
Private Sub test_responseXMLText()
'*********************************************
'XML又はTextで取得する
'*********************************************
'*********************************************
'Shift -JISをUnicodeに変換
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
Dim strURL As String
Dim lngStatus As Long, strStatus As String, strSRC As String
Dim XMLTXT As Byte, blnSJIS As Boolean
With objMSXML
.Open "GET", strURL, True
.send
reTry:
If .readyState <> 4 Then
DoEvents
GoTo reTry:
End If
lngStatus = .status
strStatus = .statusText
If (.status < 200 Or .status >= 300) Then
Debug.Print lngStatus & vbTab & strStatus
Exit Sub
Else
Debug.Print lngStatus & vbTab & strStatus
End If
If XMLTXT = 0 Then
'XML形式以外はエラーになります。
strSRC = .responseXML
Else
strSRC = .responseText
End If
If blnSJIS = True Then
strSRC = StrConv(.responseBody, vbUnicode)
Else
strSRC = .responseText
End If
Debug.Print strSRC
End With
End Sub
Private Sub test_abort()
'*********************************************
'中止する
'*********************************************
Dim objMSXML As Object, blnErr As Boolean
Dim strURL As String
'パラメータ
strURL = "http://www.yahoo.co.jp/"
Call GetMSXML(objMSXML, blnErr)
If blnErr = True Then Exit Sub
With objMSXML
.Open "GET", strURL, True
.send
reTry:
If .readyState <> 4 Then
Debug.Print .readyState
DoEvents
GoTo reTry:
Else
Debug.Print .readyState
End If
Option Explicit
Public Function fncDialogFolder(strMsg As String) As String '全ドライブ
'**********************************************
'フォルダ選択ダイアログを表示し選択パスを返す
'**********************************************
Dim Shell, myPath, str As String
Set Shell = CreateObject("Shell.Application")
Set myPath = Shell.BrowseForFolder(&O0, strMsg & _
"をするフォルダを選んでください", &H1 + &H10, "")
If Not myPath Is Nothing Then
str = myPath.Items.Item.Path & "\"
Else 'キャンセルが押された場合の処置
str = ""
End If
Set Shell = Nothing
Set myPath = Nothing
fncDialogFolder = str
End Function
Function BrowseFolder() As String
'**********************************************
'フォルダ選択ダイアログを表示し選択パスを返す
'**********************************************
Dim Shell
Set Shell = CreateObject("Shell.Application") _
.BrowseForFolder(&O0, "フォルダ選択", &H1 + &H10, 0)
If Shell Is Nothing Then
MsgBox "フォルダは選択されませんでした!", vbCritical
BrowseFolder = ""
Exit Function
Else
BrowseFolder = Shell.Items.Item.Path & "\"
End If
End Function
Private Sub test()
MsgBox BrowseFolder
End Sub
fileToOpen = Application _
.GetOpenFilename("テキスト ファイル (*.txt), *.txt")
If fileToOpen <> False Then
MsgBox "選択されたファイル : " & fileToOpen
End If
サンプル
Option Explicit
Function GetFilename() As String
'**********************************************
'ファイルを開くダイアログボックスを表示取得
'**********************************************
'選択なしの場合は空白が返る
Dim tmp As Variant, 種類 As String, タイトル As String
If tmp = False Then
MsgBox "ファイルは選択されませんでした!", vbCritical
GetFilename = ""
Exit Function
Else
GetFilename = tmp
End If
End Function
Private Sub test()
MsgBox GetFilename
End Sub
Sub 印刷ダイアログボックスを表示する()
'*********************************************
'印刷ダイアログボックスを表示する
'*********************************************
Application.Dialogs(xlDialogPrint).Show
End Sub
Public Function psbブックを開きCOL数取得(myPath As String) As Long
'*******************************************************************************
'パスワードを使用しブックを開きCOL数を返す
'*******************************************************************************
Dim BokName As String, Bok As Workbook, b As Long
Dim i, cnt As Integer
Workbooks.Open Filename:=(myPath), ReadOnly:=False, Password:=fncPass
BokName = Dir(myPath)
Set Bok = Workbooks(BokName)
b = 0
With Bok
cnt = .Sheets.Count
For i = 1 To cnt
If .Sheets(i).Name = "Sheet1" Then
b = .Sheets(i).Range("IV1").End(xlToLeft).Column
Exit For
End If
Next
End With
Set Bok = Nothing
psbブックを開きCOL数取得 = b
End Function
Dim sht As Worksheet
Dim i As Long
Dim Col As Long 'Columns
Dim Rng(5) As Range
Dim RangeValue As String
Dim HyperlinksCount As Long
Dim HyperlinkAddress As String
Dim HyperlinkSubAddress As String
Set sht = ThisWorkbook.Worksheets("Sheet1")
Col = 1 'リンク設置列
With sht
For i = 1 To .Cells(65536, Col).End(xlUp).Row
Set Rng(1) = .Cells(i, Col) '参照セル
Set Rng(2) = .Cells(i, Col + 1) '値
Set Rng(3) = .Cells(i, Col + 2) 'リンク数
Set Rng(4) = .Cells(i, Col + 3) 'リンク
Set Rng(5) = .Cells(i, Col + 4) 'サブアドレス
'セル値の取得
RangeValue = Rng(1).Value
Rng(2).Value = RangeValue
'リンクの設置数取得
HyperlinksCount = Rng(1).Hyperlinks.Count
Rng(3).Value = HyperlinksCount
If HyperlinksCount <> 0 Then '在れば
'リンク取得
HyperlinkAddress = Rng(1).Hyperlinks(1).Address
Rng(4).Value = HyperlinkAddress
'サブアドレス取得
HyperlinkSubAddress = Rng(1).Hyperlinks(1).SubAddress
Rng(5).Value = HyperlinkSubAddress
'リンク設置
.Hyperlinks.Add Rng(3), HyperlinkAddress
'リンク削除
Rng(1).Hyperlinks.Delete
End If
Set Rng(1) = Nothing
Set Rng(2) = Nothing
Set Rng(3) = Nothing
Set Rng(4) = Nothing
Set Rng(5) = Nothing
Next i
End With
With shtENDefc
.Columns("A:C").Sort Key1:=.Range("C2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
End With
Public Function Fnc最終行(obj As Worksheet) As Long
'*******************************************************************************
'A列最終行取得
'*******************************************************************************
Fnc最終行 = obj.Range("a65536").End(xlUp).Row
End Function
i = 0
For Each Sht In bok.Worksheets
With Sht
i = i + 1
strMSG = strMSG & i & vbTab & .Name & vbCr
'シート保護
.Protect Password:=strPass, DrawingObjects:=True, Contents:=True, _
Scenarios:=True, UserInterfaceOnly:=True
End With
Next Sht
Sub ExcelSheetAllUnProtect()
'*******************************************
'指定ブックにある全てのシートを保護解除する
'*******************************************
'指定ブックも保護解除
Dim bok As Workbook, Sht As Worksheet
Dim strMSG As String, i As Long, strPass As String
strPass = PassName 'パスワード設定(すべて同じパスワード)
Set bok = ThisWorkbook
Application.ScreenUpdating = False
'ブック保護解除
bok.Unprotect Password:=strPass
i = 0
For Each Sht In bok.Worksheets
With Sht
i = i + 1
strMSG = strMSG & i & vbTab & .Name & vbCr
'シート保護解除
.Unprotect Password:=strPass
End With
Next Sht
Public Sub シート削除(Book As Workbook, SheetName As String)
'*******************************************************************************
'指定ブックの指定名称シートを削除する
'*******************************************************************************
Application.DisplayAlerts = False
Book.Worksheets(SheetName).Delete
Application.DisplayAlerts = True
End Sub
Function ファイル列挙シート名(tgtPath As String) As String
'***********************************************
'指定フォルダ内のファイルの一覧を取得列挙する。
'返値:列挙したシート名を返す
'拡張子指定可能
'***********************************************
'引数:tgtPath には取得列挙するフォルダフルパスを指定
Dim buf As String, i As Long, sht As Worksheet
Dim 拡張子指定 As String, X As String
Option Explicit
Sub ExcelSort()
'*************************************
'セル 範囲を指定し並び替える
'*************************************
Dim sht As Worksheet, rng As Range
Dim Key(2) As Range
Set sht = ThisWorkbook.Worksheets("SubIndex")
Set rng = sht.Columns("A:D")
Set Key(1) = sht.Range("C1")
Set Key(2) = sht.Range("D1")
With sht
rng.Sort Key1:=Key(1), Order1:=xlAscending, Key2:=Key(2) _
, Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
End With
Option Explicit
Sub CellRangeListData(ByVal Sht As Worksheet, ByRef RngDB As Variant)
'***************************************************************************
'データが連続しているセル範囲(表)全部のデータを変数へ格納(コードたった1行)
'***************************************************************************
'Cell(1,1)からデータが入っていることが条件
'[Shift]+[Ctrl]+[*]と同じ範囲
RngDB = Sht.Cells(1, 1).CurrentRegion
End Sub
Private Sub test()
Dim Sht As Worksheet
Dim RngDB As Variant
Dim y As Long, x As Long
Set Sht = ThisWorkbook.Worksheets("Sheet1")
Call CellRangeListData(Sht, RngDB)
For y = LBound(RngDB) To UBound(RngDB)
For x = LBound(RngDB, 2) To UBound(RngDB, 2)
Debug.Print RngDB(y, x)
Next x
Next y
'a
'b
'c
Set Sht = Nothing
Option Explicit
Sub CellRangeListRowCol(ByVal Sht As Worksheet, ByRef r As Long, ByRef c As Long)
'******************************************************************************
'データが連続しているセル範囲(表)の最後の行数と列数を取得(コードたった1行)
'******************************************************************************
'Cell(1,1)からデータが入っていることが条件
'[Shift]+[Ctrl]+[*]と同じ範囲
Dim RngDB As Variant
RngDB = Sht.Cells(1, 1).CurrentRegion
r = UBound(RngDB)
c = UBound(RngDB, 2)
End Sub
Private Sub test()
Dim Sht As Worksheet
Dim r As Long, c As Long
Set Sht = ThisWorkbook.Worksheets("Sheet1")
Call CellRangeListRowCol(Sht, r, c)
Debug.Print r
Debug.Print c
Set Sht = Nothing
Option Explicit
Sub ExcelReDimPreserve()
'*************************************
'セル データを項目別に変数に格納する
'*************************************
Dim sht As Worksheet, strCat() As String
Dim i As Long, Newstr As String, j As Long
Dim Oldstr As String, CellData() As String
Dim cntData As Long, cntCat As Long, ttl() As Long
Set sht = ThisWorkbook.Worksheets("SubIndex")
Oldstr = ""
j = 0
With sht
ExcelSort '事前に並べ替え
cntData = .Cells(65536, 1).End(xlUp).Row
ReDim CellData(cntData, 3) As String
'見出しが無いデータと仮定
For i = 1 To cntData
Newstr = Trim(.Cells(i, 3).Value)
If Oldstr <> Newstr Then
j = j + 1
ReDim Preserve strCat(j) As String
ReDim Preserve ttl(j) As Long
strCat(j) = Newstr
Oldstr = Newstr
CellData(i, 0) = j
CellData(i, 1) = .Cells(i, 2).Value
CellData(i, 2) = .Cells(i, 3).Value
CellData(i, 3) = .Cells(i, 4).Value
ttl(j) = ttl(j) + 1
Else
CellData(i, 0) = j
CellData(i, 1) = .Cells(i, 2).Value
CellData(i, 2) = .Cells(i, 3).Value
CellData(i, 3) = .Cells(i, 4).Value
ttl(j) = ttl(j) + 1
End If
Next i
End With
For cntCat = 1 To j
Debug.Print cntCat & " " & strCat(cntCat) & " (" & ttl(cntCat) & ")"
For i = 1 To cntData
If CellData(i, 0) = cntCat Then
Debug.Print " " & CellData(i, 3) & " " & CellData(i, 1)
End If
Next i
Next cntCat
End Function
Function クリップボード取得() As String
Dim DtObj As New DataObject
With DtObj
.GetFromClipboard 'DataObjectに取得
クリップボード取得 = .GetText 'DataObjectを変数取得
End With
End Function
Private Sub test()
クリップボード格納 ("ほにゃらら")
MsgBox クリップボード取得
End Sub
Option Explicit
Public Function OnlyFolderName(strPath As String) As String
'***************************************
'今いるパスからフォルダ名だけを取得する
'***************************************
Dim spl As Variant, st As Variant
st = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
'st = Split(strPath, "\")
'st = st(UBound(st))
OnlyFolderName = st
End Function
Private Sub test()
MsgBox OnlyFolderName(ThisWorkbook.Path)
End Sub
Dim strThePath As String
Dim strTheTxtPath As String
Dim AddFilePath As String
Dim Strsend As String
Dim FileName() As String
Dim TXt(20) As String, cntFile As Long, Basictxt(6) As String
Dim AddTxt As String, temporaryTXT As String, cntBasictxt As Long
Dim SearchLetter As String, FolName As String
Dim strFileName() As String
Dim i As Long, lngMin As Long, lngMax As Long
Dim n As Long, buf As Variant, tmp As String
Dim j As Long, strTXT() As String, cntLowTXT As Long
Next cntFile
End Sub
Private Function Read_Basic(TxtPath As String, strNo As Byte) As String
'*******************************************************************************
'ファイルを読みこむ
'*******************************************************************************
Dim n As Long, buf As String, strPath As String
strPath = TxtPath & strNo & ".txt"
n = FreeFile '使われていないファイル番号を自動的に割り振る
buf = Space(FileLen(strPath))
Open strPath For Binary As #n 'binaryモードで開いたファイル
Get #n, , buf
Close #n
Read_Basic = buf
End Function
Private Sub FileNameEnumeration(ByRef strFileName() As String, ByVal strPath As String)
'***********************************************
'指定フォルダ内のファイル名一覧を取得列挙する。
'***********************************************
'呼び出される側
'可変変数
'Dim strPth As String
Dim buf As String, i As Long
Dim strExtension As String
'strPath = strThePath
strExtension = "txt" '拡張子
i = 0
buf = Dir(strPath & "\*." & strExtension)
Do While buf <> ""
ReDim Preserve strFileName(i) As String
strFileName(i) = buf
i = i + 1
buf = Dir()
Loop
End Sub
Private Sub TXT_Write(FileName As String, str As String)
'*******************************************************************************
'指定パスのテキストファイルに書き込み
'*******************************************************************************
Dim n As Long
n = FreeFile '使われていないファイル番号を自動的に割り振る
Open FileName For Output As #n
Print #n, str
Close #n
'’画面更新無効
Application.ScreenUpdating = False
'’変数の定義
Dim TargetBook
''error発生の場合次へ・・
On Error Resume Next
''該当Bookをセット
Set TargetBook = Workbooks(TargetBookName)
'’error発生の場合無効
On Error GoTo 0
'’既に開かれていた場合
If IsObject(TargetBook) Then
'’保存なしにて閉じる
Workbooks(TargetBookName).Close SaveChanges:=False
End If
'’セット終了
Set TargetBook = Nothing
'’パスの定義
Dim PathBook As String
'’パスの取得
PathBook = Workbooks(PathBookName).Path
'’ターゲットブックを変更可にてオープン
With Workbooks
.Open Filename:=PathBook & "\" & TargetBookName, ReadOnly:=False
End With
Function GetOneHierarchyFolder() As String
'***************************************
'一つ上のフォルダ名を取得する
'***************************************
'※エラー等は空白を返る
Dim BkPth As String, i As Long, Strtmp As String
BkPth = ThisWorkbook.Path
For i = Len(BkPth) To 0 Step -1
If InStr(i, BkPth, "\") > 0 Then
Strtmp = Mid(BkPth, InStr(i, BkPth, "\") + 1)
Exit For
End If
Next
GetOneHierarchyFolder = Strtmp
End Function
Private Sub test()
MsgBox GetOneHierarchyFolder
End Sub
'無い場合目的フォルダを作成
If Dir$(strFl_mn, vbDirectory) = "" Then
MkDir strFl_mn
Exit Sub
Else 'ある場合
'ファイルが存在するか確認
dirFile = Dir(strFl_mn & "\*.*", 0)
'ファイルが存在する場合
If dirFile <> "" Then
Kill strFl_mn & "\*.*"
End If
'既存のフォルダを削除する場合の処理
'dirFile = Dir()
'RmDir strFl_mn
End If
' C:\ 内のフォルダの名前を表示します。
MyPath = "c:\" ' パスを設定します。
MyName = Dir(MyPath, vbDirectory) ' 最初のフォルダ名を返します。
Do While MyName <> "" ' ループを開始します。
' 現在のフォルダと親フォルダは無視します。
If MyName <> "." And MyName <> ".." Then
' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' フォルダであれば、それを表示します。
End If
End If
MyName = Dir ' 次のフォルダ名を返します。
Loop
Option Explicit
Function FolderMaking(strPath As String, FolderName As String) As Boolean
'****************************************
'フォルダ作成(エラー回避)
'****************************************
Dim strErr As String
On Error GoTo ErrEND:
If Dir(strPath & "\" & FolderName, vbDirectory) = "" Then
MkDir strPath & "\" & FolderName
FolderMaking = True
Else
MsgBox FolderName & " は作成出来ません。", vbCritical, strPath
FolderMaking = False
End If
Exit Function
ErrEND:
strErr = Err.Description
'MsgBox strErr
Debug.Print strErr
FolderMaking = False
End Function
Private Sub test()
Dim a As String, b(20) As String, i As Byte
a = ThisWorkbook.Path
Option Explicit
Function FolderExistence(strPath As String) As Boolean
'********************************************
'フォルダが存在しているかどうかを確認する
'********************************************
Dim strErr As String
On Error GoTo ErrEND:
If Dir(strPath, vbDirectory) = "" Then
FolderExistence = False
Else
FolderExistence = True
End If
Exit Function
ErrEND:
strErr = Err.Description
'MsgBox strErr
Debug.Print strErr
FolderExistence = False
End Function
Private Sub test()
Dim a As String, b(20) As String, i As Byte
a = ThisWorkbook.Path
Option Explicit
Function FileExtensionName(strFileName As String) As String
'*****************************
'ファイルの拡張子名を取得
'*****************************
'[.]付きで返す
Dim i As Long
i = InStrRev(strFileName, ".")
'i = i + 1 '([.]無しで返す場合)
FileExtensionName = Mid(strFileName, i)
End Function
Function FileNonExtensionNameFso(strPath As String)
'***********************************
'ファイル名だけ拡張子なしを取得FSO
'***********************************
'[.]無しで返す
Dim objSFSO
Set objSFSO = CreateObject("Scripting.FileSystemObject")
Sub ファイルコピーFSO(コピー元 As String, コピー先 As String)
'******************************************
'FSOファイルコピー(パラメータ(引数)はフルパス)
'******************************************
'*[参照設定] で「Microsoft Scripting Runtime」にチェック
'*パラメータ(引数)[コピー元]には[*.txt]のように[*]を使用可能
'*パラメータ(引数)[コピー先]には最後に[\]が必須
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject
objFSO.MoveFile コピー元, コピー先
Set objFSO = Nothing
End Sub
Sub ファイルコピー(コピー元 As String, コピー先 As String)
'******************************************
'ファイルコピー(パラメータ(引数)はフルパス)
'******************************************
FileCopy コピー元, コピー先
End Sub
Sub ファイル移動(移動元 As String, 移動先 As String)
'********************************************
'ファイルを移動(同一ドライブの場合)
'********************************************
Name 移動元 As 移動先
End Sub
Sub ファイルの一覧を取得する()
'*******************************************************************************
'ファイルの一覧を取得する
'*******************************************************************************
Dim buf As String, i As Long
buf = Dir("D:\*.*")
Do While buf <> ""
i = i + 1
Worksheets("Sheet1").Cells(i, 1) = buf
buf = Dir()
Loop
End Sub
Option Explicit
Public Sub AutomaticCellsTxt()
'****************************************
'テキストファイルを大量作成(セルの文字)
'****************************************
'同じファイル名は上書きされます。
Dim TxtPath As String, str(5) As String
Dim StartNo As Long, EndNo As Long
Dim n As Long, i As Long
Dim FileName As String, strWrite As String
Dim sht As Worksheet
Option Explicit
Function DoesFileExist(strFileSpec As String) As Boolean
' strFilespec 引数で指定されたファイルが存在する
' 場合は True を返します。
' strFileSpec が有効なファイルではない場合、または
' strFileSpec がディレクトリの場合は False を返します。
Const INVALID_ARGUMENT As Long = 53
On Error GoTo DoesfileExist_Err
If (GetAttr(strFileSpec) And vbDirectory) <> vbDirectory Then
DoesFileExist = CBool(Len(Dir(strFileSpec)) > 0)
Else
DoesFileExist = False
End If
DoesfileExist_End:
Exit Function
DoesfileExist_Err:
DoesFileExist = False
Resume DoesfileExist_End
End Function
Option Explicit
Function GetAllFilesInDir(ByVal strDirPath As String) As Variant
' strDirPath で指定されたディレクトリをループしてすべて調べ、
' 配列に各ファイル名を保存します。その後、呼び出し側のプロ
' シージャにその配列を返します。
' strDirPath が有効なディレクトリではない場合は False を返します。
Dim strTempName As String
Dim varFiles() As Variant
Dim lngFileCount As Long
On Error GoTo GetAllFiles_Err
' strDirPath が "\" 文字で終わっていることを確認します。
If Right$(strDirPath, 1) <> "\" Then
strDirPath = strDirPath & "\"
End If
' strDirPath がディレクトリであることを確認します。
If (GetAttr(strFileSpec) And vbDirectory) = vbDirectory Then
strTempName = Dir(strDirPath, vbDirectory)
Do Until Len(strTempName) = 0
' "." と ".." を除外します。
If (strTempName <> ".") And (strTempName <> "..") Then
' サブディレクトリ名がないことを確認します。
If (GetAttr(strDirPath & strTempName) _
And vbDirectory) <> vbDirectory Then
' 見つかったファイル名に応じて配列の
' サイズを増加し、そのファイル名を配列
' に追加します。
ReDim Preserve varFiles(lngFileCount)
varFiles(lngFileCount) = strTempName
lngFileCount = lngFileCount + 1
End If
End If
' Dir 関数を使用して、次のファイル名を検索します。
strTempName = Dir()
Loop
' 見つかったファイルの配列を返します。
GetAllFilesInDir = varFiles
End If
GetAllFiles_End:
Exit Function
GetAllFiles_Err:
GetAllFilesInDir = False
Resume GetAllFiles_End
End Function
Option Explicit
Sub TestGetAllFiles()
Dim varFileArray As Variant
Dim lngI As Long
Dim strDirName As String
Const NO_FILES_IN_DIR As Long = 9
Const INVALID_DIR As Long = 13
On Error GoTo Test_Err
strDirName = "c:\my documents"
varFileArray = GetAllFilesInDir(strDirName)
For lngI = 0 To UBound(varFileArray)
Debug.Print varFileArray(lngI)
Next lngI
Test_Err:
Select Case Err.Number
Case NO_FILES_IN_DIR
MsgBox "The directory named '" & strDirName _
& "' contains no files."
Case INVALID_DIR
MsgBox "'" & strDirName & "' is not a valid directory."
Case 0
Case Else
MsgBox "Error #" & Err.Number & " - " & Err.Description
End Select
End Sub
Dim fsoSysObj As Scripting.FileSystemObject
Dim fdrFolder As Scripting.Folder
Dim fdrSubFolder As Scripting.Folder
Dim filFile As Scripting.File
' 新しい FileSystemObject を返します。
Set fsoSysObj = New Scripting.FileSystemObject
On Error Resume Next
' フォルダを取得します。
Set fdrFolder = fsoSysObj.GetFolder(strPath)
If Err <> 0 Then
' パスが間違っています。
GetFiles = False
GoTo GetFiles_End
End If
On Error GoTo 0
' Files コレクションをループし、Dictionary に追加します。
For Each filFile In fdrFolder.Files
dctDict.Add filFile.Path, filFile.Path
Next filFile
' 再帰フラグが真の場合、再帰的に呼び出します。
If blnRecursive Then
For Each fdrSubFolder In fdrFolder.SubFolders
GetFiles fdrSubFolder.Path, dctDict, True
Next fdrSubFolder
End If
Option Explicit
Sub TestGetFiles()
' GetFiles 関数をテストするために呼び出します。
Dim dctDict As Scripting.Dictionary
Dim varItem As Variant
Dim strDirPath As String
strDirPath = "c:\my documents\"
' 新規 Dictionary を作成します。
Set dctDict = New Scripting.Dictionary
' 再帰的に呼び出し、Dictionary オブジェクトにファイルを返します。
If GetFiles(strDirPath, dctDict, True) Then
' Dictionary 内の項目を出力します。
For Each varItem In dctDict
Debug.Print varItem
Next
End If
End Sub
Option Explicit
Function ChangeFileAttributes(strPath As String, _
Optional lngSetAttr As FileAttribute, _
Optional lngRemoveAttr As FileAttribute, _
Optional blnRecursive As Boolean) As Boolean
Dim fsoSysObj As Scripting.FileSystemObject
Dim fdrFolder As Scripting.Folder
Dim fdrSubFolder As Scripting.Folder
Dim filFile As Scripting.File
' 新規 FileSystemObject を返します。
Set fsoSysObj = New Scripting.FileSystemObject
On Error Resume Next
' フォルダを取得します。
Set fdrFolder = fsoSysObj.GetFolder(strPath)
If Err <> 0 Then
' パスが間違っています。
ChangeFileAttributes = False
GoTo ChangeFileAttributes_End
End If
On Error GoTo 0
' 呼び出し側が設定する属性を渡した場合は、すべてに対して設定します。
If lngSetAttr Then
For Each filFile In fdrFolder.Files
If Not (filFile.Attributes And lngSetAttr) Then
filFile.Attributes = filFile.Attributes Or lngSetAttr
End If
Next
End If
' 呼び出し側が削除する属性を渡した場合は、すべてに対して削除します。
If lngRemoveAttr Then
For Each filFile In fdrFolder.Files
If (filFile.Attributes And lngRemoveAttr) Then
filFile.Attributes = filFile.Attributes - lngRemoveAttr
End If
Next
End If
' 呼び出し側が blnRecursive 引数に True を設定した場合は、
' 関数を再帰的に呼び出します。
If blnRecursive Then
' サブフォルダをループします。
For Each fdrSubFolder In fdrFolder.SubFolders
' サブフォルダのパスを指定して関数を呼び出します。
ChangeFileAttributes fdrSubFolder.Path, lngSetAttr, _
lngRemoveAttr, True
Next
End If
ChangeFileAttributes = True
ChangeFileAttributes_End:
Exit Function
End Function
Option Explicit
Sub TestChangeAttributes()
If ChangeFileAttributes("c:\my documents", , _
Hidden, False) = True Then
MsgBox "File attributes succesfully changed!"
End If
End Sub
Dim fsoFileSearch As Office.FileSearch
Dim varFile As Variant
Dim strFileList As String
' 入力が有効な場合に、ファイル検索を行います。
If Len(strFileSpec) >= 3 And InStr(strFileSpec, "*.") > 0 Then
Set fsoFileSearch = Application.FileSearch
With fsoFileSearch
.NewSearch
.LookIn = "c:\"
.Filename = strFileSpec
.SearchSubFolders = False
If .Execute() > 0 Then
For Each varFile In .FoundFiles
strFileList = strFileList & varFile & vbCrLf
Next varFile
End If
End With
MsgBox strFileList
Else
MsgBox strFileSpec & " is not a valid file specification."
Exit Function
End If
End Function
' C:\ 内のフォルダの名前を表示します。
MyPath = "c:" ' パスを設定します。
MyName = Dir(MyPath, vbDirectory) ' 最初のフォルダ名を返します。
Do While MyName <> "" ' ループを開始します。
' 現在のフォルダと親フォルダは無視します。
If MyName <> "." And MyName <> ".." Then
' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' フォルダであれば、それを表示します。
End If
End If
MyName = Dir ' 次のフォルダ名を返します。
Loop
Option Explicit
Public Function FileExistence(FilePath As String) As Boolean
'**************************************************
'ファイルが存在しているかどうかを確認する
'**************************************************
If Dir(FilePath) <> "" Then
FileExistence = True
Else
FileExistence = False
End If
End Function
Public Function FileExistenceFSO(FilePath As String) As Boolean
'**************************************************
'ファイルが存在しているかどうかを確認する(FSO)
'**************************************************
With CreateObject("Scripting.FileSystemObject")
If .FileExists(FilePath) Then
FileExistenceFSO = True
Else
FileExistenceFSO = False
End If
End With
End Function
Private Sub test()
Dim i As String
i = ThisWorkbook.Path & "\"
Debug.Print FileExistence(i & "*.xls")
Debug.Print FileExistence(i & "test.xls")
Debug.Print FileExistence(i)
Debug.Print FileExistence("test.xls")
Debug.Print FileExistence("xls")
Sub ファイルを移動削除()
'*******************************************************************************
'ファイルを移動削除
'*******************************************************************************
Dim 移動元ファイル As String, 移動先ファイル As String
Option Explicit
Sub ファイル移動(移動元 As String, 移動先 As String)
'********************************************
'ファイルを移動(同一ドライブの場合)
'********************************************
Name 移動元 As 移動先
End Sub
Sub FSOを使用しファイルを削除() '********************************* 'FSOを使用しファイルを削除 '********************************* Dim objFSO As Object, DelPath As String, DelFile As String DelPath = ThisWorkbook.Path DelFile = "DEL1.txt" Set objFSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next objFSO.DeleteFile DelPath & "\" & DelFile On Error GoTo 0 Set objFSO = Nothing End Sub
Sub Killを使用しファイルを削除() '********************************* 'Killを使用しファイルを削除 '********************************* Dim DelPath As String, DelFile As String DelPath = ThisWorkbook.Path DelFile = "DEL2.txt" On Error Resume Next Kill DelPath & "\" & DelFile On Error GoTo 0 End Sub
Sub ファイルを削除(パス As String, ファイル名 As String) '************************************** 'ファイルを削除 引数指定 'パスの最後に[\]を付けない '************************************** On Error Resume Next Kill パス & "\" & ファイル名 On Error GoTo 0 End Sub
With Application.FileSearch
If .Execute() > 0 Then '■①.Execute
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。" '■②.FoundFiles
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents" '■③.LookIn
.FileName = "*.doc" '■④.Filename
If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
'■②.FoundFiles・・FoundFiles プロパティの使用例
'次の使用例は、ファイル検索で見つかったファイルの一覧をチェックし、各ファイルのパスを表示します。
With Application.FileSearch
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileName = "cmd*.*"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileName = "cmd*.*"
If .Execute > 0 Then
MsgBox .FoundFiles.Count & " 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "ファイルは見つかりませんでした。"
End If
End With
'次の使用例は、検索条件を既定の設定にリセットした後、新しい検索を開始します。
With Application.FileSearch
.NewSearch '■⑤NewSearch
.LookIn = "C:\My Documents"
.SearchSubFolders = True '■⑥.SearchSubFolders
.FileName = "Run"
.MatchTextExactly = True '■⑦.MatchTextExactly
.FileType = msoFileTypeAllFiles '■⑧.FileType
End With
With Application.FileSearch
.NewSearch
.LookIn = "C:\My Documents"
.SearchSubFolders = True
.FileName = "run"
.TextOrProperty = "San*"
.MatchAllWordForms = True
.FileType = msoFileTypeAllFiles
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.SearchSubFolders = True
.FileName = "cmd*"
If .Execute() > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set fs = Application.FileSearch
With fs
.LookIn = "C:\My Documents"
.FileType = msoFileTypeBinders
If .Execute > 0 Then
MsgBox .FoundFiles.Count & _
" 個のバインダー ファイルが見つかりました。"
For i = 1 To .FoundFiles.Count
MsgBox .FoundFiles(i)
Next i
Else
MsgBox "バインダー ファイルは見つかりませんでした。"
End If
End With
Public Function fncFileName(strPath As String) As String
'*******************************************************************************
'パスからファイル名やフォルダ名を返す
'*******************************************************************************
fncFileName = Dir(strPath)
End Function
Option Explicit
Function SavedAlerts(bok As Workbook)
'*********************************
'ブックに変更があるか判断する
'*********************************
'Saved プロパティ
' True の場合、ブックは最後の保存した状態から変更が加えられていません。
If bok.Saved = False Then
If MsgBox("保存しますか?", vbYesNo, bok.Name) = vbYes Then
'上書きを無視する(アラート非表示)
Application.DisplayAlerts = False
bok.Close SaveChanges:=True, Filename:="C:\規定パス\" & "規定名.xls"
Application.DisplayAlerts = True 'アラート表示-元に戻す
Else
'何か処理があれば
bok.Close
End If
Else
'何か処理があれば
End If
Sub psbコード実行中のブック以外のブックを閉じる()
'*******************************************************************************
'コード実行中のブック以外のブックを保存なしで閉じる
'*******************************************************************************
Dim 要素
For Each 要素 In Workbooks '各ワークブックに対して反復処理する
If 要素.Name <> ThisWorkbook.Name Then 'コード実行中のブック名と違うなら
要素.Close savechanges:=False '保存しないで閉じる
End If
Next
Dim objcombo As CommandBarComboBox
Dim strFontName As String
Dim intFor As Integer
Dim sht As Worksheet
Dim lngThisRow As Long
Dim Mystr As String
Mystr = "Test"
Set sht = ActiveWorkbook.ActiveSheet
Set objcombo = CommandBars(4).Controls(1)
Application.ScreenUpdating = False
With sht
.Range("a1:c65536").Clear '①
.Range("a1").Value = "FontName" '②
End With
For intFor = 1 To objcombo.ListCount
strFontName = objcombo.List(intFor)
With sht
lngThisRow = .Range("a1").CurrentRegion.Rows.Count + 1 '③
.Range("a" & lngThisRow).Value = strFontName '④
.Range("c" & lngThisRow).Value = Mystr '⑤
If intFor <= 253 Then '⑦
With .Range("c" & lngThisRow).Font '⑥
.Name = strFontName
.Size = 18
End With
End If
End With
Next intFor
Public Function fncシート新ブック保存(TagetBook As Workbook, TagetSheet As Worksheet, FolPath As String, ファイル名 As String) As String
'*******************************************************************************
'指定シートを新しいブックに保存(指定フォルダへ)必ずシート名は[Sheet1]にする
'保存後そのパスとファイル名を返す
'*******************************************************************************
Dim NewBook As Workbook, strName As String, NewSheet As Worksheet
strName = 保存名作成
Set NewBook = Workbooks.Add
Dim i, cnt As Integer
cnt = NewBook.Sheets.Count
For i = 1 To cnt
If NewBook.Sheets(i).Name = "Sheet1" Then
NewBook.Sheets(i).Name = "Sheet0"
Exit For
End If
Next
Option Explicit
Function FolderExtensionFilesCount(FolderPath As String, Extension As String) As Long
'************************************************
'指定フォルダ内の指定拡張子ファイルの数をカウント
'************************************************
Dim buf As String, i As Long
buf = Dir(FolderPath & "\*." & Extension)
Do While buf <> ""
i = i + 1
buf = Dir()
Loop
FolderExtensionFilesCount = i
End Function
Private Sub test()
Dim FolderPath As String, Extension As String
FolderPath = ThisWorkbook.Path
Extension = "jpg"
Debug.Print FolderExtensionFilesCount(FolderPath, Extension)
' 4
End Sub
Dim FName() As String, FPath() As String, cntF As Long
Dim LName() As String, LPath() As String, LSize() As Double, cntL As Long
Sub FolderInFolderFileReference( _
ByRef FNm() As String, ByRef FPt() As String, _
ByRef LNm() As String, ByRef LPt() As String, ByRef LSz() As Double)
'****************************************************************
'指定フォルダの最下階層までフォルダやファイルを参照(NameSpace)
'****************************************************************
'F:Folder を示します。
'L:File を示します。
'ZIPファイル対象。
Dim objShlApp As Object
Dim objNmSpc As Object
Dim objFldItmS As Object
Dim n As Long
Set objFldItmS = Nothing
Set objNmSpc = Nothing
Set objShlApp = Nothing
End Sub
Private Sub WorkToRecur(objTmpFldItmS)
'********************************
'再帰処理
'********************************
Dim objFldItm As Object
Dim objItm As Object
Dim n As Variant
For n = 0 To objTmpFldItmS.Count - 1
Set objItm = objTmpFldItmS.Item(n)
If objItm.IsFolder Then
'Case Folder
ReDim Preserve FName(cntF) As String
ReDim Preserve FPath(cntF) As String
For n = LBound(FNm) To UBound(FNm)
Debug.Print FNm(n) & vbTab & FPt(n)
Next n
MsgBox UBound(FNm) + 1
For n = LBound(LNm) To UBound(LNm)
Debug.Print LNm(n) & vbTab & LSz(n)
Next n
MsgBox UBound(LNm) + 1
'0101.jpg 4956
'0102.jpg 4853
'0103.jpg 4383
'0104.jpg 4360
'0105.jpg 3961
End Sub
Option Explicit
Sub FileVariableInFolder(ByRef strFile() As String _
, ByVal strFolderPath As String, ByVal strExtension As String)
'**************************************************
'指定フォルダ指定拡張子のファイル一覧を変数で返す
'**************************************************
Dim buf As String, i As Long
i = 0
buf = Dir(strFolderPath & "\*." & strExtension)
Do While buf <> ""
ReDim Preserve strFile(i) As String
strFile(i) = buf
i = i + 1
buf = Dir()
Loop
End Sub
Private Sub test()
Dim strFile() As String
Dim strFolderPath As String
Dim strExtension As String
Option Explicit
Function NumberExtensionFilesInFolder(tgtPath As String) As Long
'************************************************
'指定フォルダ内の指定拡張子ファイルの数をカウント
'************************************************
'引数:tgtPath には取得列挙するフォルダフルパスを指定
Dim buf As String, i As Long
Dim 拡張子指定 As String
拡張子指定 = "jpg"
buf = Dir(tgtPath & "\*." & 拡張子指定)
Do While buf <> ""
i = i + 1
buf = Dir()
Loop
Sub 実質オープン()
'*******************************************************************************
'実質オープン
'*******************************************************************************
アプリ非表示
画面を更新しない
Dim 要素
For Each 要素 In Workbooks '各ワークブックに対して反復処理する
If 要素.Name <> ThisWorkbook.Name Then 'コード実行中のブック名と違うなら
要素.Close savechanges:=False '保存しないで閉じる
End If
Next
frmMain.Show
End Sub
Sub psbブック保護(Mybook As Workbook)
'*******************************************************************************
'ブック保護
'*******************************************************************************
Mybook.Protect Password:=fncPass, Structure:=True, Windows:=False 'ブック保護
End Sub
Sub psbブック非保護(Mybook As Workbook)
'*******************************************************************************
'ブック非保護
'*******************************************************************************
Mybook.Unprotect Password:=fncPass 'ブック非保護
End Sub
Sub psbシート保護(Mysht As Worksheet)
'*******************************************************************************
'シート保護
'*******************************************************************************
Mysht.Protect Password:=fncPass, DrawingObjects:=True, Contents:=True, Scenarios:=True 'シート保護
End Sub
Sub psbシート非保護(Mysht As Worksheet)
'*******************************************************************************
'シート非保護
'*******************************************************************************
Mysht.Unprotect Password:=fncPass
End Sub
Sub psb全ブック保存閉()
'*******************************************************************************
'全てのブックを保存し、閉じるマクロ
'*******************************************************************************
Dim w
For Each w In Application.Workbooks
w.Save
Next w
Workbooks.Close
End Sub
Sub ヘッダーを変えながら印刷する()
'
' 手書表 (1)を指定枚数、ヘッダーを変えながら印刷する。
'
'
Const strX As String = "ヘッダーを変えながら印刷する"
Dim shtKyudanName As Worksheet
Dim shtHyou As Worksheet
Dim strPrintSuu As String
Dim strName As String
'
If MsgBox("手書表を印刷しますか?", vbOKCancel, strX) = vbCancel Then Exit Sub
If IsNumeric(strPrintSuu) = False Then
If MsgBox("数値で入力されていません!もう一度入力しますか?", vbYesNo + vbCritical, strX) = vbNo Then
Exit Sub
Else
GoTo MyRE:
End If
End If
Set shtKyudanName = ThisWorkbook.Sheets("球団名")
Set shtHyou = ThisWorkbook.Sheets("手書表 (1)")
Dim objoutlook As Object
Dim objoutlookmsg As Object
Set objoutlook = CreateObject("outlook.apprlication")
Set objoutlookmsg = objoutlook.createitem(0)
Set objattachments = objoutlookmsg.attachments
With objattachments
.Add "ファイル名"
With objoutlookmsg
.Recipients.Add "アドレス"
.Subject = "題名"
.body = "本文"
.send
End With
End With
Set objoutlookmsg = Nothing
Set objoutlook = Nothing
Private Sub SendMail(TantouMei As String, MailAdd As String, Kenmei As String, Honbun As String)
On Error GoTo erroeshori
With CreateObject("CDO.Message")
Set .Configuration = CreateObject("CDO.Configuration")
.From = MsgFrom
.To = MailAdd
.Subject = Kenmei
.TextBody = Honbun
.Send
Set .Configuration = Nothing
End With
MsgBox "送信完了しました", vbInformation, Me.Caption
Exit Sub