| Menuへ |
| A1形式位置の加算位置、減算位置 |
セルを指定するには、CellsやOffsetなどを使いますが一番分かり易いのは A5 等のA1形式です。 そこで、A1形式でセル位置が加減算できるようにしました。 セル位置に行の移動数と列の移動数を指定すると、移動先のセル位置がA1形式で求められます。 列の場合はASC関数で数字に変換し算出し、その後、CHR関数でアルファベットに戻しています。 |
|
|
| 呼び出しのコード |
| 'セル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 |
| Topへ
|