[[20231116113812]] 『for next 文について』(nori) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『for next 文について』(nori)

ディスクトップの「全国追加名簿」には、県名含み住所の住所列が有ります。
特定の3県の住所を、県名と県名無し住所に分離表示したく、次のマクロを作成しました。
[ステップイン(S)]で確認したところ、中ほどの「If todofuken = “” Then Next n」のところで、
「コンパイルエラー: Nextに対応するForがありません。」とのエラーが出てしまします。
初心者で解決できません。解決法をご教示ください。

Dim strleft, todofuken, moto, jyusho As Variant

Workbooks.Open Filename:=CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\全国追加名簿.xlsx"

  For n = 2 To 16
    moto = Cells(n, 12)
    strleft = Left(Cells(n, 12), 4)

    If strleft = "神奈川県" Then
         todofuken = "神奈川県"
       ElseIf strleft = "和歌山県" Then
         todofuken = "和歌山県"
       ElseIf strleft = "鹿児島県" Then
         todofuken = "鹿児島県"
       Else
         todofuken = ""
    End If

       If todofuken = "" Then
           Next n
       End If
‘----県名欄(11列)に県名を表示
   Cells(n, 11) = todofuken
'----件名の4文字県を削除する。
    jyusho = Mid(moto, 5)
'----住所欄(12列)には県名削除の住所を表示。
    Cells(n, 12) = jyusho
Next n

End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


【ExcelVBA入門】疑似的にcontinueするためのループ処理スキップ方法とは | 侍エンジニアブログ
https://www.sejuku.net/blog/70299

(白茶) 2023/11/16(木) 12:14:40


 気持ちを忖度するとこんなことですか?

 Sub test()
     Dim strleft, todofuken, moto, jyusho As Variant

     Workbooks.Open FileName:=CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\全国追加名簿.xlsx"
     For n = 2 To 16
         moto = Cells(n, 12)
         strleft = Left(Cells(n, 12), 4)
         If strleft = "神奈川県" Then
             todofuken = "神奈川県"
         ElseIf strleft = "和歌山県" Then
             todofuken = "和歌山県"
         ElseIf strleft = "鹿児島県" Then
             todofuken = "鹿児島県"
         Else
             todofuken = ""
         End If

         If todofuken <> "" Then
             '----県名欄(11列)に県名を表示
             Cells(n, 11) = todofuken
             '----件名の4文字県を削除する。
             jyusho = Mid(moto, 5)
             '----住所欄(12列)には県名削除の住所を表示。
             Cells(n, 12) = jyusho
         End If
     Next n
 End Sub

 Next n というので、次のnにジャンプしたいという気持ちでしょうけど、 
 Nextに そういう使い方はありません。(★ 既にご指摘いただいています。)

 その他のコードについても、改善したほうがよいところはありますが、保留しておきます。

 その他。
 ・モジュールの先頭に Option Explicitと入れて下さい。(自動的に挿入される設定にできます。そうしておくことを推奨)
 ・そして、変数は必ず宣言するようにしてください。
 ・また、変数はVariantではなく、文字列変数なら、As Stringというように宣言してください。  
(xyz) 2023/11/16(木) 12:24:31

 こんな感じでも同じ動作になりますね。

 Sub test()
    Dim n As Long, moto As String, strleft As String

    Workbooks.Open Filename:=CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\全国追加名簿.xlsx"
    For n = 2 To 16
        moto = Cells(n, 12)
        strleft = Left(moto, 4)
        Select Case strleft
        Case "神奈川県", "和歌山県", "鹿児島県"
            Cells(n, 11) = strleft
            Cells(n, 12) = Mid(moto, 5)
        End Select
    Next n
 End Sub

 左4文字が"神奈川県", "和歌山県", "鹿児島県"のどれかなら分割すると、
 シンプルに考えればコードもシンプルになります。

(hatena) 2023/11/16(木) 14:01:33


hatena さん
なるほど、case文で処理するととてもすっきりまとまりますね。
有難うございます。
とても勉強になりました。
(nori) 2023/11/17(金) 16:25:17

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.