| 
    
     |  | ichinose さん 
 返信遅れまして、また拙い日本語で説明が至らず申し訳ございません。
 
 すごいプログラムですね・・・理解するのに時間がかかりそうですが
 一つ一つ自分のものにしていきたいと思います。
 ちなみに
 rightつかって下1桁を出して、
 select caseつかって
 1だったら2
 2だったら3
 3だったら4・・・・
 という感じの文を書いたら
 膨大な量になってしまいました・・・
 勉強してきます。ありがとうございました。
 
 
 >>わからないのは、
 >>>>実は変則30進法でして・・・
 >>>>0,1,2,3,4,5,6,7,8,9,a,c,d,e,f,g,h,j,k,m,n,p,r,t,u,v,w,x,y
 >このとおりだとした場合の簡単なサンプルです。
 >
 >
 >新規ブックの標準モジュールに
 >'==================================================================
 >Option Explicit
 >  Private arefarray As Variant
 >  Private a_edvalue As String
 >  Private a_idx() As Long
 >'===================================================================
 >Sub abnor30_init(ByVal stvalue As String, ByVal edvalue As String)
 >  Dim g0 As Long
 >  Erase a_idx()
 >  arefarray = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
 >       "a", "c", "d", "e", "f", "g", "h", "j", _
 >       "k", "m", "n", "p", "r", "t", "u", "v", "w", "x", "y")
 >  a_edvalue = Trim(edvalue)
 >  ReDim a_idx(1 To Len(Trim(edvalue)))
 >  For g0 = 1 To Len(Trim(edvalue))
 >    a_idx(g0) = -1
 >    Next
 >  For g0 = 1 To Len(Trim(stvalue))
 >    a_idx(UBound(a_idx) - g0 + 1) = Application.Match(LCase(Mid(stvalue, Len(stvalue) - g0 + 1, 1)), _
 >                     arefarray, 0) - 1
 >    Next
 >End Sub
 >'======================================================================
 >Function abnor30_get(myvalue As String) As Long
 >  Dim g0 As Long
 >  abnor30_get = 0
 >  For g0 = UBound(a_idx()) To LBound(a_idx()) Step -1
 >    If a_idx(g0) + 1 <= UBound(arefarray) Then
 >     a_idx(g0) = a_idx(g0) + 1
 >     If a_idx(g0) = 0 Then a_idx(g0) = 1
 >     Exit For
 >    Else
 >     a_idx(g0) = 0
 >     End If
 >    Next
 >  myvalue = ""
 >  On Error Resume Next
 >  For g0 = LBound(a_idx()) To UBound(a_idx())
 >    Err.Clear
 >    myvalue = myvalue & arefarray(a_idx(g0))
 >    If Err.Number <> 0 Then myvalue = ""
 >    Next
 >  If myvalue = LCase(a_edvalue) Then abnor30_get = 1
 >  On Error GoTo 0
 >End Function
 >'=======================================================================
 >Sub abnor30_term()
 >  Erase arefarray
 >  a_edvalue = ""
 >  Erase a_idx()
 >End Sub
 >
 >
 >別の標準モジュールに
 >'=================================================================
 >Sub test()
 >  Dim g0 As Long
 >  Dim myvalue As String
 >  Call abnor30_init("073X18050", "073X18099")
 >  Cells(g0 + 1, 1).Value = "073X18050"
 >  g0 = g0 + 1
 >  Do While abnor30_get(myvalue) = 0
 >    Cells(g0 + 1, 1).Value = UCase(myvalue)
 >    g0 = g0 + 1
 >    Loop
 >  Cells(g0 + 1, 1).Value = UCase(myvalue)
 >  Call abnor30_term
 >End Sub
 >
 >
 >として、testを実行してみてください
 >
 >アクティブシートのA列に
 >
 >073X18050
 >073X18051
 >073X18052
 >073X18053
 >073X18054
 >073X18055
 >073X18056
 >073X18057
 >・
 >・
 >・
 >073X18099
 >
 >と羅列表示します。
 >因みに上記の例だとセルA1からA126までデータが表示されました。
 >
 >このようなことですか?
 >
 >
 >>
 >>これがどうして30進数なのですか?
 >>29しか文字はないですが・・・。
 >>そこが変則の所以ですか?
 >>>後は、この変則30進数の説明をしてください。
 
 |  |