Excel VBA質問箱 IV

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

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


8689 / 13644 ツリー ←次へ | 前へ→

【31610】行を削除 ケメ 05/11/27(日) 3:38 質問[未読]
【31612】Re:行を削除 かみちゃん 05/11/27(日) 7:58 回答[未読]
【31774】Re:行を削除 ケメ 05/11/29(火) 22:59 お礼[未読]

【31610】行を削除
質問  ケメ  - 05/11/27(日) 3:38 -

引用なし
パスワード
   forステートメントと
if文で
☆ではない行を削除したいのですが、
削除される行と削除されない行が
できてしまいます。
かならずチェックは入っているはずなのですが、
なぜなんでしょう。
何回か、subを実行すると全部なくなります。
それまではちょっとづつ削除される感じです。
どうしたらいいのか教えていただけませんでしょうか?
Application.EnableEvents = False
銘柄数 = Workbooks("×××.xls").Worksheets(2).UsedRange.Rows.Count
For r = 1 To 銘柄数
If Workbooks("×××.xls").Worksheets(2).Cells(r, 6) = "☆" Then
Else
Workbooks("×××.xls").Worksheets(2).Rows(r & ":" & r).Delete

End If
Next r

【31612】Re:行を削除
回答  かみちゃん  - 05/11/27(日) 7:58 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Forステートメントと
>If文で
>☆ではない行を削除したいのですが、

For〜Nextを必ず使わないといけないのですか?
オートフィルタを使ったり、数式を埋め込んで対象行を一括削除するなど方法は
いろいろあるのですが・・・

>削除される行と削除されない行が
>できてしまいます。

For〜Nextを使って行を削除する場合は、下の行から順番に削除すれば、うまくいきます。
行を削除したら、上に詰められるからです。
もちろん、上から順番に削除する場合もできますが、ややこしくなりますので。

下から順番に削除する場合は、以下のような感じでできます。

Sub test()
 Dim r As Long, 銘柄数 As Long
 
 With Workbooks("×××.xls").Worksheets(2)
  銘柄数 = .UsedRange.Rows.Count
  '削除対象行を最下行からチェックする。
  For r = 銘柄数 To 1 Step -1
   With .Cells(r, 6)
    'セルの値が☆ではない場合
    If .Value <> "☆" Then
     'そのセルが含まれる行全体を削除する。
     .EntireRow.Delete
    End If
   End With
  Next r
 End With
End Sub

【31774】Re:行を削除
お礼  ケメ  - 05/11/29(火) 22:59 -

引用なし
パスワード
   返信遅れました。
ありがとうございました。解決しました。
短めですが失礼します。。

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