ここから本文です

マクロを勉強し始めて2カ月程です。 ループ文におけるi=2やi=i+1等の位置について...

ぽっちゃり性善説さん

2019/8/2912:23:41

マクロを勉強し始めて2カ月程です。
ループ文におけるi=2やi=i+1等の位置についてわからないことがあります。
例えば下記のような設問において、

・A1に指定したフォルダ内にある、
全てのエクセルファイル(xls,xlsx,

xlsm)のブック名をA2以降に、
そのブックの全シート名をB2から右に入れて下さい。
(B2,C2,D2,・・・そのブックの全シート名を横に入れていく)

これに対してコードが、

Sub 問題()
Dim i As Long
Dim j As Long
Dim strFileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim wsOwn As Worksheet
Set wsOwn = ActiveSheet
i = 2
strFileName = Dir(Cells(1, 1) & "\*.xls*")
Do While strFileName <> ""
Set wb = Workbooks.Open(wsOwn.Cells(1, 1) & "\" & strFileName)
j = 2
wsOwn.Cells(i, 1) = wb.Name
For Each ws In wb.Sheets
wsOwn.Cells(i, j) = ws.Name
j = j + 1
Next
wb.Close SaveChanges:=False
i = i + 1
strFileName = Dir()
Loop
End Sub

とした場合、i=2やj=2の書く場所によって結果が変わってきてしまいます。(do loopの外なのか内なのか、for eachの外なのか内なのか)
また、i=i+1が一番最後の方に来る意味もあまりよく分かりません。

こういう操作を実現したい時にはここに必ず配置する、というような決まりがあればお教えいただけないでしょうか。
よろしくお願いいたします。

閲覧数:
23
回答数:
1

違反報告

ベストアンサーに選ばれた回答

♡❤♡さん

2019/8/2914:39:41

↓この3行が文字化けしてますよ~
strFileName = Dir(Cells(1, 1) & "\*.xls*")
Do While strFileName <> ""
Set wb = Workbooks.Open(wsOwn.Cells(1, 1) & "\" & strFileName)

もとのコードは↓これですね?
strFileName = Dir(Cells(1, 1) & "\*.xls*")
Do While strFileName <> ""
Set wb = Workbooks.Open(wsOwn.Cells(1, 1) & "\" & strFileName)

.........................
i = 2 と j = 2 は、「初期値」です。
i は行、j は列です。
ファイル名をA列の第2行から下に書き込むので、
Cells(i, 1) = wb.Name
シート名をその行の第2列から右に書き込むので、
Cells(i, j) = ws.Name

i = 2 を Do ~ Loop の内側に書くと、常に 2 になってしまいます。
j = 2 も同様で、 For ~ Next の前に書く必要があります。

i = i + 1 と j = j + 1 は、それぞれの操作が終わった後に値を 1 増やして、2, 3, 4... にするので、各ループが終わる直前に書くわけです。

........................
i と j については、これでいかがですか?


。。。。。。。
なお、ここは「英語カテ」です。
質問をするとき、投稿の直前で「カテゴリ」を選ぶ画面があるのですが、忘れやすいです。
コードが英語なので、自動では英語カテゴリが選ばれます。
コンピュータ、プログラミング関連のカテゴリを選択して再質問して下さい。もっと分かりやすい回答がもらえるかもしれませんから。
(文字化けは訂正しておきましょう^^)

..........
I hope this will help you.

  • 質問者

    ぽっちゃり性善説さん

    2019/8/2922:34:00

    ご回答誠にありがとうございます。

    文字化け、カテ違い等大変申し訳ございません。

    初期値のご説明、非常によく分かりました。また一歩前に進めそうです。

    親切に訂正もしていただき、カテゴリについてもご説明いただき重ねてお礼申し上げます。

    また、エクセルマクロについて投稿するかもしれませんが、ご機会がありましたらどうぞよろしくお願いいたします。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる