Excel VBA質問箱 IV

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

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


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

【63571】シートの選択、削除 初心者 09/11/18(水) 14:48 質問[未読]
【63574】Re:シートの選択、削除 Yuki 09/11/18(水) 15:37 発言[未読]
【63575】Re:シートの選択、削除 初心者 09/11/18(水) 16:22 質問[未読]
【63585】Re:シートの選択、削除 Yuki 09/11/19(木) 7:36 発言[未読]
【63610】Re:シートの選択、削除 マクロ 09/11/20(金) 23:01 質問[未読]
【63618】Re:シートの選択、削除 Yuki 09/11/21(土) 13:53 発言[未読]
【63624】Re:シートの選択、削除 通行人 09/11/22(日) 0:11 回答[未読]

【63571】シートの選択、削除
質問  初心者  - 09/11/18(水) 14:48 -

引用なし
パスワード
   例)シートが複数あるファイルがあります。
 シートの1〜10までは削除せず、それらを除いた残りのシートを選択して
 削除するにはどういう風にかけばいいのでしょうか。
 

マクロの記録を使用しても、削除するコードしかわからず困っています。
よろしくお願いします。

【63574】Re:シートの選択、削除
発言  Yuki  - 09/11/18(水) 15:37 -

引用なし
パスワード
   ▼初心者 さん:
> シートの1〜10までは削除せず、それらを除いた残りのシートを選択して
> 削除するにはどういう風にかけばいいのでしょうか。

こんにちは。
シート名 1〜10以外は全部削除します。
注意して下さい。

Sub SheetDelete()
  Dim sht()  As String
  Dim i    As Long
  Dim j    As Long
  
  For i = 1 To Worksheets.Count
    If Not (StrConv(Worksheets(i).Name, vbNarrow) >= 1 _
    And StrConv(Worksheets(i).Name, vbNarrow) <= 10) Then
      ReDim Preserve sht(j)
      sht(j) = Worksheets(i).Name
      j = j + 1
    End If
  Next
  Application.DisplayAlerts = False
  If Sgn(sht) > 0 Then
    Worksheets(sht).Delete
  End If
  Application.DisplayAlerts = True
End Sub

【63575】Re:シートの選択、削除
質問  初心者  - 09/11/18(水) 16:22 -

引用なし
パスワード
   ▼Yuki さん:
ご指導ありがとうございます。

しかし、プログラムが言うことを聞いてくれません。
標準モジュールに書いたのですが。。。


>▼初心者 さん:
>> シートの1〜10までは削除せず、それらを除いた残りのシートを選択して
>> 削除するにはどういう風にかけばいいのでしょうか。
>
>こんにちは。
>シート名 1〜10以外は全部削除します。
>注意して下さい。
>
>Sub SheetDelete()
>  Dim sht()  As String
>  Dim i    As Long
>  Dim j    As Long
>  
>  For i = 1 To Worksheets.Count
>    If Not (StrConv(Worksheets(i).Name, vbNarrow) >= 1 _
>    And StrConv(Worksheets(i).Name, vbNarrow) <= 10) Then
>      ReDim Preserve sht(j)
>      sht(j) = Worksheets(i).Name
>      j = j + 1
>    End If
>  Next
>  Application.DisplayAlerts = False
>  If Sgn(sht) > 0 Then
>    Worksheets(sht).Delete
>  End If
>  Application.DisplayAlerts = True
>End Sub

【63585】Re:シートの選択、削除
発言  Yuki  - 09/11/19(木) 7:36 -

引用なし
パスワード
   ▼初心者 さん:
>しかし、プログラムが言うことを聞いてくれません。
>標準モジュールに書いたのですが。。。

こんにちは。
F8を押せば次のステップへ行単位で実行されますので
確認してみましょう。

Sub SheetDelete()
  Dim sht()  As String
  Dim i    As Long
  Dim j    As Long
  
  For i = 1 To Worksheets.Count
    '↓を追加してシート名の表示を確認(イミディエイトウィンドウ)   
    Debug.Print StrConv(Worksheets(i).Name, vbNarrow)
    If Not (StrConv(Worksheets(i).Name, vbNarrow) >= 1 _
    And StrConv(Worksheets(i).Name, vbNarrow) <= 10) Then
      ' 1〜10以外の時↓が実行されるか確認
      ReDim Preserve sht(j)
      sht(j) = Worksheets(i).Name
      j = j + 1
    End If
  Next
  Application.DisplayAlerts = False
  If Sgn(sht) > 0 Then
    Worksheets(sht).Delete
  End If
  Application.DisplayAlerts = True
End Sub

【63610】Re:シートの選択、削除
質問  マクロ  - 09/11/20(金) 23:01 -

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

返信ありがとうございます。
イミディエイトで実行すると、10番目以降のシートを認識するのですが
削除してくれないのですが。。。

【63618】Re:シートの選択、削除
発言  Yuki  - 09/11/21(土) 13:53 -

引用なし
パスワード
   ▼マクロ さん:
>イミディエイトで実行すると、10番目以降のシートを認識するのですが
>削除してくれないのですが。。。

そのまま実行するとイミディエイトウィンドウにシート名が表示されます。
それを全部選択してここに貼り付けてみてください。
どのような名前があるか見ないことにはこれ以上返答できません。

【63624】Re:シートの選択、削除
回答  通行人  - 09/11/22(日) 0:11 -

引用なし
パスワード
   >マクロの記録を使用しても、削除するコードしかわからず困っています。

シートの名前を指定する方法以外に
シートの番号を指定する方法を使うのはNG?

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