Page 145 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼Do Loopについて こうき 02/9/30(月) 11:07 ┗Re:Do Loopについて つん 02/9/30(月) 11:49 ┗Re:Do Loopについて こうき 02/9/30(月) 12:47 ─────────────────────────────────────── ■題名 : Do Loopについて ■名前 : こうき ■日付 : 02/9/30(月) 11:07 -------------------------------------------------------------------------
こんにちは。 下のようなコードを書いたのですが、Do Loopの中で、ファイルが開いていれば作業を行い、開いていなければ変数(下の場合はj)を1つ増やしてDoに戻るようにするにはどうしたらよいのでしょうか? Dim j As Integer Dim fn As String Dim strfn As String fn = Worksheets("sheet2").Cells(j, 1) j = 1 Do On Error Resume Next 'なければ次のファイルへ strfn = "" strfn = Workbooks(fn).Name On Error GoTo 0 If strfn = "" Then Else (作業するコード) End If j = j + 1 Loop While Worksheets("sheet2").Cells(j, 1) <> "" |
こうき さん、こんにちは >Dim j As Integer >Dim fn As String >Dim strfn As String ↓この部分は、ループの中に入れないとダメなんじゃないでしょうか? でないと、いつまでも、Cell(1,1)の値しかfnに入らないことになります。 > fn = Worksheets("sheet2").Cells(j, 1) ↓これは、↑より上でないとダメで、なおかつループの外 >j = 1 > Do > On Error Resume Next 'なければ次のファイルへ > strfn = "" > strfn = Workbooks(fn).Name > On Error GoTo 0 ここで、strfnに値が入ってるときだけ記述すればいいと思います。 If strfn <> "" Then ’(作業するコード) End If > j = j + 1 > Loop While Worksheets("sheet2").Cells(j, 1) <> "" こんな感じでどうでしょうか? |
つん さん、こんにちは ↓この部分は、ループの中に入れないとダメなんじゃないでしょうか? でないと、いつまでも、Cell(1,1)の値しかfnに入らないことになります。 fn = Worksheets("sheet2").Cells(j, 1) 確かにそうですね。ぜんぜん気づきませんでした。ありがたい指摘です。 ↓これは、↑より上でないとダメで、なおかつループの外 j = 1 Do On Error Resume Next 'なければ次のファイルへ strfn = "" strfn = Workbooks(fn).Name On Error GoTo 0 ここで、strfnに値が入ってるときだけ記述すればいいと思います。 If strfn <> "" Then ’(作業するコード) End If j = j + 1 Loop While Worksheets("sheet2").Cells(j, 1) <> "" こんな感じでどうでしょうか? うまくいきました。ありがとうございます。 また質問することがあると思うので、これからもよろしくお願いします。 |