RangeとCellsを利用した範囲指定のサンプル
B1セルの指定
Range("B1")
Cells(1, 2)
Cells(1,”B”)
A1〜B3セルの範囲指定
Range("A1:B3")
Range("A1", "B3")
Range(Cells(1, 1), Cells(3,2))
Range("A1", Cells(3,2))
Range("A1:A3", "B1")
A1とB3セルの指定
Range("A1,B3")
1〜3行の範囲指定
Range(Rows(1), Rows(3))
Range("1:3")
1〜3列の範囲指定
Range(Columns(1), Columns(3))
Range("A:C")
全セル指定
Range(Rows(1), Columns(1))
Cells ※行・列を指定しない
※Cellsで取得できるセルは1つか全てであり、行や列などの複数セルは選択できない
隣接していない複数セルの範囲指定
Union(Range("K1:K7"), Range("P1:P7")).Select
※隣接していない複数セルの範囲指定には Union を利用する
(注)Rangeの引数について
Rangeの引数は2つまでしか指定できない
Range(引数1,引数2)
誤)
Range("A1","B2","C1").Select
※コンパイルエラーが発生する
正)
Range("A1,B2,C1").Select
【関連記事】 Rangeの利用例
2020年07月21日
2020年06月19日
確率の収束に必要な試行回数
収束したと判断する数値を誤差何%まで許容するかで試行回数は変わってくる。
【95%の確率で信頼できる試行回数の計算式】
試行回数(N) = 危険率(Z)^2 × ( 確率分母(K) – 1 ) ÷ 誤差(R)^2
EX.確率50%(確率分母2)で誤差±10%以内に収束する為に必要となる試行回数N
N = 1.96^2 × ( 2 – 1 ) ÷ 10%^2 = 384回
確率50%で誤差±10%以内(45%〜55%)に収束するには、95%の確率で384回以上の試行回数が必要。
以下、誤差±10%以内の試行回数
・確率60%で256回
・確率70%で165回
・確率80%で96回
・確率90%で43回
よって、試行回数が384回未満であった場合、本来の確率に収束しておらず、あてにならない数字である可能性が高い。
また、95%の確率で信頼できるとは、20回に1回は外れるかもしれないが、残りの19回は信頼できる事を示す。
※確度95%なので範囲外の結果が出る確率が5%。良い方に外れる場合と悪い方に外れる場合があるため、半分の2.5%ずつが危険率ということになる。
>危険率とは
危険率5%の場合、100回同じ検査をすれば5回は異なる結果になるかもしれない。
だが、それには目を瞑るということ。
通常の場合、この確率(危険率)は0.05 とされている。
5%は判断を間違える(事象は偶然に起こった)かも知れないという基準。
重要な判断では、判断が間違っている可能性を低く抑えるため、この基準を0.01に下げる。
では、なぜ 0.05 や 0.01 なのか。
これには特に絶対的な理由はない様子。統計学の世界で広く一般に認められている共通の判断基準。
【確率分母(K)計算式】
=1/〇〇%
EX.80%の場合
=1/80% = 1.25
=1.96^2*(1.25-1)/10%^2
【90%の確率で信頼できる試行回数の計算式】
試行回数(N) = 1.65^2 × ( 確率分母(K) – 1 ) ÷ 誤差(R)^2
【試行回数から誤差を求める計算式(確度90%)】
※N回転させた場合、90%の確度なら確率はどんな範囲に収まるかの計算式
誤差(R)^2 = 1.65^2 x ( 確率分母(K) – 1 ) ÷ 試行回数(N)
1/2の確率で起こるバグの改修試験は何回すべきか統計学で考える
384回試験し、バグが発生しないことを確認出来たら「2回に1回発生するバグを改修できた。」と判断してよいことになる。
【95%の確率で信頼できる試行回数の計算式】
試行回数(N) = 危険率(Z)^2 × ( 確率分母(K) – 1 ) ÷ 誤差(R)^2
EX.確率50%(確率分母2)で誤差±10%以内に収束する為に必要となる試行回数N
N = 1.96^2 × ( 2 – 1 ) ÷ 10%^2 = 384回
確率50%で誤差±10%以内(45%〜55%)に収束するには、95%の確率で384回以上の試行回数が必要。
以下、誤差±10%以内の試行回数
・確率60%で256回
・確率70%で165回
・確率80%で96回
・確率90%で43回
よって、試行回数が384回未満であった場合、本来の確率に収束しておらず、あてにならない数字である可能性が高い。
また、95%の確率で信頼できるとは、20回に1回は外れるかもしれないが、残りの19回は信頼できる事を示す。
※確度95%なので範囲外の結果が出る確率が5%。良い方に外れる場合と悪い方に外れる場合があるため、半分の2.5%ずつが危険率ということになる。
>危険率とは
危険率5%の場合、100回同じ検査をすれば5回は異なる結果になるかもしれない。
だが、それには目を瞑るということ。
通常の場合、この確率(危険率)は0.05 とされている。
5%は判断を間違える(事象は偶然に起こった)かも知れないという基準。
重要な判断では、判断が間違っている可能性を低く抑えるため、この基準を0.01に下げる。
では、なぜ 0.05 や 0.01 なのか。
これには特に絶対的な理由はない様子。統計学の世界で広く一般に認められている共通の判断基準。
▼確率といえば‥ウマ!?
【確率分母(K)計算式】
=1/〇〇%
EX.80%の場合
=1/80% = 1.25
=1.96^2*(1.25-1)/10%^2
【90%の確率で信頼できる試行回数の計算式】
試行回数(N) = 1.65^2 × ( 確率分母(K) – 1 ) ÷ 誤差(R)^2
【試行回数から誤差を求める計算式(確度90%)】
※N回転させた場合、90%の確度なら確率はどんな範囲に収まるかの計算式
誤差(R)^2 = 1.65^2 x ( 確率分母(K) – 1 ) ÷ 試行回数(N)
1/2の確率で起こるバグの改修試験は何回すべきか統計学で考える
384回試験し、バグが発生しないことを確認出来たら「2回に1回発生するバグを改修できた。」と判断してよいことになる。
▼それとも‥お守り!?
2020年05月18日
Windows gmailを送信するとメールの配信エラーになってしまう場合のSMTPサーバー確認方法
gmailを送信しようとしたところ、以下の配信エラーが発生しメールが送信できない状況に陥った。
メールの配信エラー
[名前] の機能を使用して、別のアドレスまたは別のエイリアスからこのメールを送信しようとしています。[名前] のアカウントの設定に誤りがあるか、設定が最新の状態ではありません。設定を確認して、もう一度送信してみてください。
応答:TLS Negotiation failed, the certificate doesn't match the host.
色々と調べてみたところ、どうやらGoogle側のセキュリティ強化があり、正しいSMTPサーバーを設定しないと送信が出来なくなっているらしい。
そこで、現在設定してある
「SMTPサーバー」から「IPアドレス」を取得。
次に、
「IPアドレス」から「逆引き」検索。
を行い、「SMTPサーバー」の設定変更を行ったところ、エラーなくgmailが送信できるようになった。
【SMTPサーバー確認手順】
1)gmailの設定>アカウントとインポート
2)対象となるメールアドレスの「情報を編集」を押下
3)次のステップを押下
4)SMTPサーバーの部分をメモ
5)コマンドプロンプトを起動する
6)以下のコマンドを入力する
ping SMTPサーバー(※4でメモしたSMTPサーバーを入力)
7)アドレスをメモ
8)以下のコマンドを入力する
nslookup アドレス(※7でメモしたアドレスを入力)
9)名前をメモ
10)9でメモした名前をSMTPサーバーへ入力する
11)パスワードを入力し「変更を保存」ボタンを押下
2020年04月21日
VBA 配列を戻り値として受け取る
Functionから戻り値を受け取る配列は動的配列にしておく
Sub HairetsuTest()
Dim receiveNo() As Long
receiveNo() = GetNeedData()
MsgBox receiveNo(0) & vbCrLf & receiveNo(1)
End Sub
Function GetNeedData()
Dim sendNo(1) As Long
sendNo(0) = 1000
sendNo(1) = 2000
GetNeedData = sendNo()
End Function
Sub HairetsuTest()
Dim receiveNo() As Long
receiveNo() = GetNeedData()
MsgBox receiveNo(0) & vbCrLf & receiveNo(1)
End Sub
Function GetNeedData()
Dim sendNo(1) As Long
sendNo(0) = 1000
sendNo(1) = 2000
GetNeedData = sendNo()
End Function
2020年03月18日
VBA Rangeの利用例
Rangeの後に何が記載されるかで、全く違う意味合いとなる。見落としに注意する。
Range("B1")
B1セルを指定する
Range("B1").column
B1セルの列番号を取得する → B1セルの列番号:2 を返す
Range("B1").Row
B1セルの行番号を取得する → B1セルの行番号:1 を返す
Range("B1").Count
指定(選択)しているセルの数を取得する
Range("B1").Clear
B1セルの値をクリアする
Range("B1").Insert
B1セルへセルを挿入する → 挿入後下方向にシフトする
Range("B1").Address
B1セルのアドレスを取得する
【関連記事】 RangeとCellsの範囲指定サンプル
Range("B1")
B1セルを指定する
Range("B1").column
B1セルの列番号を取得する → B1セルの列番号:2 を返す
Range("B1").Row
B1セルの行番号を取得する → B1セルの行番号:1 を返す
Range("B1").Count
指定(選択)しているセルの数を取得する
Range("B1").Clear
B1セルの値をクリアする
Range("B1").Insert
B1セルへセルを挿入する → 挿入後下方向にシフトする
Range("B1").Address
B1セルのアドレスを取得する
【関連記事】 RangeとCellsの範囲指定サンプル
2020年02月15日
VBA 特定のセルを選択した際にユーザーフォームを呼び出す
B2セルを選んだときにユーザーフォームを呼び出すサンプル
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("B2").Address Then
UserForm1.Show
End If
End Sub
※ユーザーフォームのオブジェクト名 : UserForm1
2020年01月16日
VBE 定義の表示(宣言元を開くジャンプ機能)
変数やプロシージャの宣言場所・実装場所へジャンプする
下記ショートカットキーで宣言している箇所にジャンプすることができる。
また、そこから元の位置に戻ることもできる。
なお、このジャンプ機能は「定義の表示」と呼ばれている。
【宣言箇所へのジャンプ】
Shift + F2
【ジャンプした箇所から元の位置へ戻る】
Ctrl + Shift + F2
下記ショートカットキーで宣言している箇所にジャンプすることができる。
また、そこから元の位置に戻ることもできる。
なお、このジャンプ機能は「定義の表示」と呼ばれている。
【宣言箇所へのジャンプ】
Shift + F2
【ジャンプした箇所から元の位置へ戻る】
Ctrl + Shift + F2
2019年12月16日
VBA Do While文・Do Until文の使い分け
・Do While文は「継続条件」を書く
・Do Until文は「終了条件」を書く
違いは条件指定のみ。
そのため、どちらを利用しても書くことができる。
使い分けとしては、
「他の人が見たときに、やりたいことを直感的に理解しやすい方」を使う
Do Until文を使ったプログラム
Sub sample()
Dim strFILENAME As String
Dim intFF As Integer
Dim strRec As String
'ファイルを開く
strFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
'キャンセル処理
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then
Exit Sub
End If
'FreeFile値の取得
intFF = FreeFile
'指定ファイルをOPEN
Open strFILENAME For Input As #intFF
'EOFまで繰り返す(EOFで終了)
Do Until EOF(intFF)
'行単位にレコードを読み込む
Line Input #intFF, strRec
'A1セルに読み込んだ値を代入
Range("A1").Value = strRec
Loop
'指定ファイルをCLOSE
Close #intFF
End Sub
Do While文を使ったプログラム
Sub sample()
Dim strFILENAME As String
Dim intFF As Integer
Dim strRec As String
'ファイルを開く
strFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
'キャンセル処理
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then
Exit Sub
End If
'FreeFile値の取得
intFF = FreeFile
'指定ファイルをOPEN
Open strFILENAME For Input As #intFF
'EOFまで繰り返す(EOF以外は継続)
Do While Not EOF(intFF)
'行単位にレコードを読み込む
Line Input #intFF, strRec
'A1セルに読み込んだ値を代入
Range("A1").Value = strRec
Loop
'指定ファイルをCLOSE
Close #intFF
End Sub
・Do Until文は「終了条件」を書く
違いは条件指定のみ。
そのため、どちらを利用しても書くことができる。
使い分けとしては、
「他の人が見たときに、やりたいことを直感的に理解しやすい方」を使う
Do Until文を使ったプログラム
Sub sample()
Dim strFILENAME As String
Dim intFF As Integer
Dim strRec As String
'ファイルを開く
strFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
'キャンセル処理
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then
Exit Sub
End If
'FreeFile値の取得
intFF = FreeFile
'指定ファイルをOPEN
Open strFILENAME For Input As #intFF
'EOFまで繰り返す(EOFで終了)
Do Until EOF(intFF)
'行単位にレコードを読み込む
Line Input #intFF, strRec
'A1セルに読み込んだ値を代入
Range("A1").Value = strRec
Loop
'指定ファイルをCLOSE
Close #intFF
End Sub
Do While文を使ったプログラム
Sub sample()
Dim strFILENAME As String
Dim intFF As Integer
Dim strRec As String
'ファイルを開く
strFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
'キャンセル処理
If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then
Exit Sub
End If
'FreeFile値の取得
intFF = FreeFile
'指定ファイルをOPEN
Open strFILENAME For Input As #intFF
'EOFまで繰り返す(EOF以外は継続)
Do While Not EOF(intFF)
'行単位にレコードを読み込む
Line Input #intFF, strRec
'A1セルに読み込んだ値を代入
Range("A1").Value = strRec
Loop
'指定ファイルをCLOSE
Close #intFF
End Sub
2019年11月12日
VBScript MsgBox関数でメッセージボックスを表示する
ユーザに何らかのメッセージを通知するために表示されるメッセージボックス。
メッセージボックスを表示するにはMsgBox関数を利用する。
<構文>
MsgBox ≪"Prompt" [, Buttons] [, Title] [, HelpFile, Context]≫
Promp (必須):ダイアログボックスに表示するメッセージを指定
Button(省略可):ダイアログボックスに表示するボタンの種類やアイコンのスタイルなどを指定
Title(省略可):ダイアログボックスのタイトルバーに表示するタイトルを指定
Helpfile(省略可能):ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定。引数helpfileを指定する場合は、引数contextも必ず指定する。
<使用例>
MsgBox "TEST表示"
【文字列を連結する】
文字列の連結には「&」を使う
<使用例>
MsgBox "TEST表示" & "OK"
【メッセージを改行する】
MsgBoxのメッセージを改行するには以下のコードを利用する
<使用例>
MsgBox "TEST表示" & vbCr & "OK"
【タイトルを設定する】
メッセージボックス(MsgBox)に、タイトルを表示することができる。
引数が複数ある場合は、「,」(カンマ)で区切る決まりとなっているため、省略した引数のカンマは残しておく必要がある。
<使用例>
MsgBox "TEST表示" & vbCr & "OK",,"タイトルTEST"
【関連記事】
MsgBox関数で定数を利用する
MsgBoxで日本語を使うと文字化けが発生する
タスクスケジューラのメッセージを最前面に表示するスクリプト
メッセージボックスを表示するにはMsgBox関数を利用する。
<構文>
MsgBox ≪"Prompt" [, Buttons] [, Title] [, HelpFile, Context]≫
Promp (必須):ダイアログボックスに表示するメッセージを指定
Button(省略可):ダイアログボックスに表示するボタンの種類やアイコンのスタイルなどを指定
Title(省略可):ダイアログボックスのタイトルバーに表示するタイトルを指定
Helpfile(省略可能):ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定。引数helpfileを指定する場合は、引数contextも必ず指定する。
<使用例>
MsgBox "TEST表示"
【文字列を連結する】
文字列の連結には「&」を使う
<使用例>
MsgBox "TEST表示" & "OK"
【メッセージを改行する】
MsgBoxのメッセージを改行するには以下のコードを利用する
<使用例>
MsgBox "TEST表示" & vbCr & "OK"
【タイトルを設定する】
メッセージボックス(MsgBox)に、タイトルを表示することができる。
引数が複数ある場合は、「,」(カンマ)で区切る決まりとなっているため、省略した引数のカンマは残しておく必要がある。
<使用例>
MsgBox "TEST表示" & vbCr & "OK",,"タイトルTEST"
【関連記事】
MsgBox関数で定数を利用する
MsgBoxで日本語を使うと文字化けが発生する
タスクスケジューラのメッセージを最前面に表示するスクリプト
2019年10月04日
VBScriptの基本的なルール
VBScriptを書き始めるにあたっての基本的なルール。
1.拡張子は「.vbs」
VBSの実行は保存したファイルをダブルクリックする(もしくは右クリック→開く)
2.コメントは「'(シングルクォーテーション)」を最初につける
複数行にまたぐ//のようなコメントはVBScriptには用意されていない
3.文字は「”(ダブルクォーテーション)」、日時は「#(シャープ)」で括る
4.文字列結合演算子は2種類ある
「+」または「&」
5.一行目に「Option Explicit」を記述する
ソースコードの1行目ににOption Explicitを記述しておけば型のエラーを検出してくれる
6.セミコロンの代わりに改行
VBScriptでは式の終わりを改行で表す
※複数行に式がまたがる場合は、行末に半角スペースと_(アンダースコア)を記述する。
7.ifの条件式には「()括弧」を使わずthenを使う
8.VBScriptで扱われる変数は全てバリアント(Variant)型
どんな値でも格納できる
9.変数の値を知るには MsgBox などをチェックする行に挿入する
1.拡張子は「.vbs」
VBSの実行は保存したファイルをダブルクリックする(もしくは右クリック→開く)
2.コメントは「'(シングルクォーテーション)」を最初につける
複数行にまたぐ//のようなコメントはVBScriptには用意されていない
3.文字は「”(ダブルクォーテーション)」、日時は「#(シャープ)」で括る
4.文字列結合演算子は2種類ある
「+」または「&」
5.一行目に「Option Explicit」を記述する
ソースコードの1行目ににOption Explicitを記述しておけば型のエラーを検出してくれる
6.セミコロンの代わりに改行
VBScriptでは式の終わりを改行で表す
※複数行に式がまたがる場合は、行末に半角スペースと_(アンダースコア)を記述する。
7.ifの条件式には「()括弧」を使わずthenを使う
8.VBScriptで扱われる変数は全てバリアント(Variant)型
どんな値でも格納できる
9.変数の値を知るには MsgBox などをチェックする行に挿入する