• ベストアンサー

アルファベット版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に戻すうまい方法が浮かびません。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.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

ino34
質問者

お礼

おぉ! 思った通りの動作だと思います ありがとうございました!!

関連するQ&A