Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11448 / 13646 ツリー ←次へ | 前へ→

【15939】シート目次について YN61 04/7/12(月) 22:06 質問[未読]
【15940】Re:シート目次について IROC 04/7/12(月) 22:13 回答[未読]
【15946】Re:シート目次について YN61 04/7/12(月) 23:33 お礼[未読]
【15950】Re:シート目次について IROC 04/7/13(火) 8:38 回答[未読]
【15977】Re:シート目次について [名前なし] 04/7/13(火) 19:05 発言[未読]
【16038】Re:シート目次について YN61 04/7/14(水) 20:41 お礼[未読]
【16039】Re:シート目次について YN61 04/7/14(水) 20:57 お礼[未読]
【16046】Re:シート目次について IROC 04/7/15(木) 9:40 回答[未読]

【15939】シート目次について
質問  YN61  - 04/7/12(月) 22:06 -

引用なし
パスワード
   「シートの目次」作成について

同じような質問が出ていますが、誠に失礼します。偶然重なり申し訳けありません。
よろしくお願いします。

シート数が増加すると、「シートの目次」があると便利です。
シートの目次をマクロで作成しましたが、1回目のマクロ
実行はエラーが出ませんが、2回目以降は「エラー」が
出ます。エラーを出さずに、尚且つシートが増加しても
対応できるコードに関してご教授ください。
現在のマクロコードは次の通りです。

Sub 目次作成()

Dim i As Integer
  Worksheets.Add before:=Worksheets(1)
  Worksheets(1).Name = "シート目次"
For i = 1 To Worksheets.Count
 Cells(i, 1).Value = Worksheets(i).Name
Next

End Sub

エクセルシートの「目次作成」のシートの仕上がりはこのような感じです。
     A      B      C
1  シート目次
2  4月度売上
3  5月度売上
4  6月度売上
5  第一四半期売上


 

【15940】Re:シート目次について
回答  IROC  - 04/7/12(月) 22:13 -

引用なし
パスワード
   Sub 目次作成()
Dim i As Long

  For i = 1 To Worksheets.Count
    If Worksheets(i).Name = "シート目次" Then
      GoTo one
    End If
  Next

  Worksheets.Add before:=Worksheets(1)
  ActiveSheet.Name = "シート目次"

one:
  With Worksheets("シート目次")
    For i = 1 To Worksheets.Count
      .Cells(i, 1).Value = Worksheets(i).Name
    Next i
  End With

End Sub

【15946】Re:シート目次について
お礼  YN61  - 04/7/12(月) 23:33 -

引用なし
パスワード
   ▼IROC さん:

早速のご返事ありがとうございました。
順調に動きました。すべて問題なく動きました。
ありがとうございました。
・・・・・・・・・・・・・・・・・・・
GoTo one
というような書き方はびっくりしました。
これは、ワークシートに”シート目次”があれば
oneの処理をするような意味でしょうか。
またoneのあとに「:」がありますが、このような書き方を
すると外でも一般的に使えるのでしょうか。
もし時間がありましたらご回答の程お願いします。
非常に不躾ではありますが、これを持って御礼に変えさせて
いただきます。今後ともよろしくお願いいたします。
本当に貴重な時間を費やしていただき感謝しております。


>Sub 目次作成()
>Dim i As Long
>
>  For i = 1 To Worksheets.Count
>    If Worksheets(i).Name = "シート目次" Then
>      GoTo one
>    End If
>  Next
>
>  Worksheets.Add before:=Worksheets(1)
>  ActiveSheet.Name = "シート目次"
>
>one:
>  With Worksheets("シート目次")
>    For i = 1 To Worksheets.Count
>      .Cells(i, 1).Value = Worksheets(i).Name
>    Next i
>  End With
>
>End Sub

【15950】Re:シート目次について
回答  IROC  - 04/7/13(火) 8:38 -

引用なし
パスワード
   >GoTo one
>というような書き方はびっくりしました。
>これは、ワークシートに”シート目次”があれば
>oneの処理をするような意味でしょうか。

one: ←のように:のついたものをラベルと言います。

GoTo ステートメントについてヘルプを読んで下さい。
この指定されたラベル行に、処理がジャンプするだけです。


”シート目次”があれば、以下の処理を実行しない。ということになります。

>>  Worksheets.Add before:=Worksheets(1)
>>  ActiveSheet.Name = "シート目次"


>またoneのあとに「:」がありますが、このような書き方を
>すると外でも一般的に使えるのでしょうか。
外とは何でしょうか? 
プロシージャの外にはジャンプできません。
その際は、Call などで、サブルーチンを呼び出します。


短いコードなので、gotoを使っていますが、
一般的に、gotoを使うと可読性が悪くなり
メンテナンスし難くなってしまうので、
使わない方が良いと言われています。
なので多用は禁物です。

今回は分かり易さを考慮して、使用しましたが、
"シート目次" の有無の判断方法によっては
gotoを使わなくても記述できます。

【15977】Re:シート目次について
発言  [名前なし]  - 04/7/13(火) 19:05 -

引用なし
パスワード
   Sub 目次作成()
Dim i As Long

  If Worksheets(1).Name <> "シート目次" Then
    Worksheets.Add before:=Worksheets(1)
    ActiveSheet.Name = "シート目次"
  End If

  With Worksheets("シート目次")
    For i = 1 To Worksheets.Count
      .Cells(i, 1).Value = Worksheets(i).Name
    Next i
  End With

End Sub

でいいと思うんですけどいかがでしょう。

【16038】Re:シート目次について
お礼  YN61  - 04/7/14(水) 20:41 -

引用なし
パスワード
   ▼[名前なし] さん:

お名前が無かったので失礼します。
貴重なコードをご紹介いただきましてありがとうございます。

これからもよろしくご指導の程お願い申し上げます。
本当にありがとうございました。

【16039】Re:シート目次について
お礼  YN61  - 04/7/14(水) 20:57 -

引用なし
パスワード
   ▼IROC さん:

ご親切な回答またまたありがとうございました。
「ラベル」をはじめて知りました。
GoToステートメントについてヘルプをじっくり見させていただきます。

ありがとうございました。
日常、パソコンの使っていますが、Macroの秩序だった勉強はしていません。
雑誌で見たりする程度です。
Macroをある程度秩序だって書かれているお勧めの本がありましたら、
教えていただけませんでしょうか。

余り難しい本はちょっと読めないかも知れませんが?
ありましたら、教えてください。
不躾なお願いばかりで申し訳ありません。

【16046】Re:シート目次について
回答  IROC  - 04/7/15(木) 9:40 -

引用なし
パスワード
   >Macroをある程度秩序だって書かれているお勧めの本がありましたら、
>教えていただけませんでしょうか。

コードの書き方で重要なのは、分かり易さだと思います。
しっかりコメントを書いて、3ヶ月、半年、1年後に
自分の書いたコードが、すぐに解読できれば、GoTo を使っても良いと思います。


ネットに頼って、あまり本は利用しないのでお勧め本はとくに無いです。
いろいろな方の書いたコードを見て
理解し易い書き方を参考にするのがよいかと思います。

11448 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free