| 
    
     |  | ▼kon さん: おはようございます。
 
 まず、問題コードですが、アルゴリズムには何の変更もありませんが、一部、変数名として不適切な名前だけ変更しました。
 '===========================================================
 Sub main()
 Dim g0 As Long
 Dim stt As Long
 Dim rng As Range
 Set rng = Range("g20")
 stt = 1
 For g0 = 1 To 20
 rng.Value = g0
 Set rng = get_rng(rng, stt)
 Next
 End Sub
 ‘========================================
 Function get_rng(ByVal rng, s_vec As Long) As Range
 ‘機能 現在のセルから時計回りで渦巻状に移動しデータを入力するための次にセルを取得する。
 ‘   尚、渦巻状に連続したセルには、何らかのデータ(空白以外)が設定されているものとする
 ‘   逆にそれ以外のセルは、未入力であるものとする
 ‘入力データ  rng 現在のセル
 ‘      s_vec 渦巻状に進行することを目的に
 ‘      セルrngと前のセルからの進行方向
 ‘      1 上方向 2 右方向 3 下方向 4 左方向
 
 ‘出力データ get_rng 現在のセルの位置から時計回りで渦巻状に移動し
 ‘           データを入力するための次にセル
 ‘      s_vec  取得したget_rngのrngに対する進行方向
 ‘      1 上方向 2 右方向 3 下方向 4 左方向
 Dim mx
 ReDim cnt(1 To 4) As Long
 ReDim chk(1 To 4) As Range
 ReDim vecter(1 To 4) As Long
 Dim c As Long
 Dim g0 As Long
 Dim g1 As Long
 Dim g2 As Long
 For g0 = s_vec To (s_vec + 3)
 Select Case g0 Mod 4
 Case 1
 Set chk(c + 1) = rng.Offset(-1, 0)
 vecter(c + 1) = 1
 Case 2
 Set chk(c + 1) = rng.Offset(0, 1)
 vecter(c + 1) = 2
 Case 3
 Set chk(c + 1) = rng.Offset(1, 0)
 vecter(c + 1) = 3
 Case 0
 Set chk(c + 1) = rng.Offset(0, -1)
 vecter(c + 1) = 4
 End Select
 If chk(c + 1).Value = "" Then
 For g1 = -1 To 1
 For g2 = -1 To 1
 If g1 <> 0 Or g2 <> 0 Then
 If chk(c + 1).Offset(g1, g2).Value <> "" Then
 cnt(c + 1) = cnt(c + 1) + 1
 End If
 End If
 Next
 Next
 End If
 c = c + 1
 Next
 With Application
 g0 = .Match(.Max(cnt()), cnt(), 0)
 End With
 Set get_rng = chk(g0)
 s_vec = vecter(g0)
 End Function
 
 
 上記のコードは、時計回りで渦巻状に移動しセルにデータを入力していった結果から
 帰納的に見いだした規則性を基に作成したコードです。
 私は、学者で無いのでその規則の普遍性については証明していません。
 
 上記コードの前提条件として、
 get_rngで取得するセル以前の時計回りに渦巻状を構成するセルには
 必ず空白以外のデータが入っている
 又、上記以外のセルは、未入力であること。
 これが条件です。
 
 上記の条件を踏まえて、渦巻状にデータを入力するためには・・・。
 
 セルを渦巻状に移動しデータを入力するために現在の位置から移動先は
 1   現在のセルのひとつ行が上のセル 現在のセルがG20なら、G19
 2   現在のセルのひとつ右のセル   現在のセルがG20なら、H20
 3   現在のセルのひとつ行が下のセル 現在のセルがG20なら、G21
 4   現在のセルのひとつ左のセル   現在のセルがG20なら、F20
 
 の4方向になります。
 では、渦巻状に移動する次のセルとして上記の4つの方向を何を基準に決定するのか??
 
 上記のFunction get_rngでは、4方向の内、隣接するセルで未入力以外のセルの個数が一番多い
 方向を移動セルとして決定しています。
 隣接するセルで未入力以外のセルの個数が同じ場合は、現在の方向から時計回りの順で優先します。
 
 例えば、セルG20を出発セルとしている上記のコードでは、
 
 G20(既に値が入力されている)から、4方向共に隣接する未入力以外のセルの個数は1です(共にG20だけが隣接する未入力以外のセルになります)。
 よって、現在の進行方向である上のセルであるG19を取得し、G19には、「2」が入力されます。
 
 G19を現在のセル、進行方向は上(1)を入力データして、get_rngは、
 進行方向  上  隣接する未入力以外のセルの個数    1(g19)
 右                     2(g19 とg20)
 下  既に入力済み(G20)なので対象外  0
 左                     2(g19 とg20)
 と言う結果になり、時計回りの優先順位から、右方向のセルであるH19(s_vec 2)が取得されます。
 
 
 このような規則で時計回りの渦巻状にセルに値を入力しています。
 
 
 |  |