- ベストアンサー
アルファベット版00~99になって00に戻るVBA
excel2010のVBAに付いてお力を貸してください。 例えばA1セルに「AA」と入っていた場合、マクロを一度実行したらA1を「AB」にしたいです。 最後(ZZ)まで行ったら最初(AA)に戻ります。 AA→AB AB→AC AZ→BA BA→BB ZZ→AA AAA→AAB AAZ→ABA ZZZ→AAA のような形です。 条件としましてはA1には1~8桁まで入る可能性があります。 大文字と小文字が入る可能性があります。(Aaなど混ざることはありません。) If Str = "Z" Then Str = "A" ElseIf Str = "z" Then Str = "a" Else Str = Chr(Asc(Str) + 1) End If 一桁ならこんな感じになると思うのですが、繰り上げや、ZZZからAAAに戻すうまい方法が浮かびません。 よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょう。 A=0、Z=25の26進数として扱って+1した後、元々の桁数分だけ表示しています。 面倒だったので全部大文字に変換してます。 Sub Sample() sTarget = UCase(Range("A1")) nCount = Len(sTarget) sTarget = Right("AAAAAAAA" & sTarget, 8) For i = 0 To 7 sONe = Mid(sTarget, 8 - i, 1) nTarget = nTarget + (Asc(sONe) - 65) * 26 ^ i Next i nTarget = nTarget + 1 For j = 1 To nCount nOne = fMod(nTarget, 26 ^ j) / (26 ^ (j - 1)) nTarget = nTarget - nOne * 26 ^ (j - 1) sAns = Chr(nOne + 65) & sAns Next j Range("A1") = Right("AAAAAAAA" & sAns, nCount) End Sub Function fMod(vNum1, vNum2) As Variant 'ただのMod関数だとオーバーフローする恐れがあるので…… fMod = CDec(vNum1) - Fix(CDec(vNum1) / CDec(vNum2)) * CDec(vNum2) End Function
お礼
おぉ! 思った通りの動作だと思います ありがとうございました!!