【目次】
1.「Range」で指定する行の範囲(文字列)を作る関数
2.「Range」で指定する列の範囲(文字列)を作る関数
1.「Range」で指定する行の範囲(文字
列)を作る関数
通常、「Range」で行を指定する場合、”1:9″ のように指定行を数字とコロン(:)を組み合わせた文字列で与える必要があります。
(例.1~9行目に空行を挿入する)
Sheets(“Sheet1”).Range(“1:9”).Insert
しかし、マクロで行番号を使ってセル操作をする場合、このセルの指定方法は不便なので、行番号から “1:9” のような文字列を取得する関数を作ってみました。
'===========================
' 関数名:MakeRowRange
' 引数 :
' ①row1: 行番号1 (Long型)
' ②row2:行番号2(Long型)
' 戻り値:正常時:開始行と終了行の文字列(例."2:5")(String型)
' :異常時:"ERR"
'===========================
Function MakeRowRange(row1 As Long, row2 As Long) As String
'ローカル変数の宣言
Dim ret As String '戻り値
'ローカル変数の初期化
ret = "ERR"
'入力値の範囲判定
If row1 >= 1 And row1 <= 1048576 And row2 >= 1 And row2 <= 1048576 Then
'行情報から文字列を作成
ret = CStr(row1) & ":" & CStr(row2)
Else
MsgBox "1~1048576の範囲で入力して下さい" & vbCrLf & "入力値:開始行:" & row1 & " , 終了行:" & row2
End If
MakeRowRange = ret
End Function
2.「Range」で指定する列の範囲(文字
列)を作る関数
通常、「Range」で列を指定する場合、”A:Z” のように指定列をアルファベットとコロン(:)を組み合わせた文字列で与える必要があります。
(例.1~9行目に空行を挿入する)
Sheets(“Sheet1”).Range(“1:9”).Insert
しかし、マクロで列番号(数字)を使ってセル操作をする場合、このセルの指定方法は不便なので、列番号(数字)から “A:Z” のような文字列を取得する関数を作ってみました。
(要領は「エクセルマクロで~②」と同じです)
'===========================
' 関数名:MakeColumnRange
' 引数 :
' ①col1: 列番号1 (Long型)
' ②col2:列番号2(Long型)
' 戻り値:正常時:開始列と終了列の文字列(例."C:F")(String型)
' :異常時:"ERR"
'===========================
Function MakeColumnRange(col1 As Long, col2 As Long) As String
'ローカル変数の宣言
Dim col_array(2) As Long '列情報
Dim col_str_array(2) As String '列情報
Dim tmp_num1 As Long '途中計算の一時変数1
Dim tmp_num2 As Long '途中計算の一時変数2
Dim tmp_num3 As Long '途中計算の一時変数3
Dim err_array(2) As Boolean '入力値判定結果
Dim loop_cnt As Long 'ループカウンタ
Dim ret As String '戻り値
'ローカル変数の初期化
col_array(1) = col1
col_array(2) = col2
col_str_array(1) = ""
col_str_array(2) = ""
tmp_num1 = -1
tmp_num2 = -1
tmp_num3 = -1
err_array(1) = True
err_array(2) = True
ret = "ERR"
'列情報を文字列に変換
For loop_cnt = 1 To 2
If col_array(loop_cnt) >= 1 And col_array(loop_cnt) <= 16384 Then 'A~XFD列'
err_array(loop_cnt) = False
If col_array(loop_cnt) >= 1 And col_array(loop_cnt) <= 26 Then 'A~Z列'
col_str_array(loop_cnt) = Chr(Asc("A") + col_array(loop_cnt) - 1)
ElseIf col_array(loop_cnt) >= 27 And col_array(loop_cnt) <= 702 Then 'AA~ZZ列'
tmp_num1 = Int((col_array(loop_cnt) - 26 - 1) / 26)
tmp_num2 = (col_array(loop_cnt) - 1) Mod 26
col_str_array(loop_cnt) = Chr(Asc("A") + tmp_num1) & Chr(Asc("A") + tmp_num2)
Else 'AAA~XFD列'
tmp_num1 = Int((col_array(loop_cnt) - 702 - 1) / (26 ^ 2))
tmp_num2 = Int((col_array(loop_cnt) - 702 - 1 - tmp_num1 * (26 ^ 2)) / 26)
tmp_num3 = (col_array(loop_cnt) - 1) Mod 26
col_str_array(loop_cnt) = Chr(Asc("A") + tmp_num1) & Chr(Asc("A") + tmp_num2) & Chr(Asc("A") + tmp_num3)
End If
End If
Next
'入力値が正常範囲内の場合、正常な戻り値を設定する
If err_array(1) = False And err_array(2) = False Then
ret = col_str_array(1) & ":" & col_str_array(2)
Else '入力値が範囲外の場合、エラーとする
MsgBox "1~16384の範囲で入力して下さい" & vbCrLf & "入力値:開始列:" & col1 & " , 終了列:" & col2
End If
MakeColumnRange = ret
End Function
参考になれば幸いです。