Excelでセルを指定するには、CellsやOffsetなどを使いますが一番分かり易いのは「A5」等のA1形式です。
そこで、A1形式でセル位置が加減算できるようにしました。
セル位置に行の移動数と列の移動数を指定すると、移動先のセル位置がA1形式で求められます。
列の場合はASC関数で数字に変換し算出し、その後、CHR関数でアルファベットに戻しています。
関連するTipsの「ADDRESS セルのアドレスを取得するExcel関数」も参照してください。
セルAA5から 5行 -1列 のセルをA1形式で得るには
s = A1Add("AA5", 5, -1) のように呼び出します。
sは[ Z10 ]になります。
Public Function A1Add(sa As String, nr As Long, nc As Long) As String
Dim i As Long
Dim j As Long
Dim srow As String
Dim scol As String
Dim lrow As Long
Dim lcol As Long
srow = ""
scol = ""
sa = UCase(sa)
'行列を分ける
For i = 1 To Len(sa)
If Mid(sa, i, 1) >= "A" And Mid(sa, i, 1) <= "Z" Then
srow = srow & Mid(sa, i, 1)
ElseIf Mid(sa, i, 1) <> "$" Then
scol = scol & Mid(sa, i, 1)
End If
Next
'A1形式の列を列番号にする
If Len(srow) = 1 Then
lrow = Asc(srow) - 64
Else
lrow = (Asc(Left(srow, 1)) - 64) * 26
lrow = lrow + (Asc(Right(srow, 1)) - 64)
End If
'加算
If nc > 0 Then
If lrow + nc <= 65536 Then
lrow = lrow + nc
End If
ElseIf nc < 0 Then
If lrow + nc >= 1 Then
lrow = lrow + nc
End If
End If
'列番号をA1形式に戻す
If lrow <= 26 Then
srow = Chr(64 + lrow)
Else
i = Int(lrow / 26)
j = lrow Mod 26
If j = 0 Then
srow = Chr(64 + i - 1) & "Z"
Else
srow = Chr(64 + i) & Chr(64 + j)
End If
End If
'行番号の加算
lcol = scol
If nr > 0 Then
If lcol + nr <= 65536 Then
lcol = lcol + nr
End If
ElseIf nr < 0 Then
If lcol + nr >= 1 Then
lcol = lcol + nr
End If
End If
scol = lcol
A1Add = srow & scol
End Function
■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します