Excel VBA質問箱 IV

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

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


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

【56845】非表示行の削除 初心者さっち 08/7/8(火) 14:02 質問[未読]
【56850】Re:非表示行の削除 kanabun 08/7/8(火) 14:39 発言[未読]
【56853】Re:非表示行の削除 初心者さっち 08/7/8(火) 15:51 お礼[未読]
【56854】Re:非表示行の削除 初心者さっち 08/7/8(火) 16:19 質問[未読]
【56857】Re:非表示行の削除 kanabun 08/7/8(火) 16:44 発言[未読]
【56859】Re:非表示行の削除 初心者さっち 08/7/8(火) 18:02 お礼[未読]
【56862】Re:非表示行の削除 kanabun 08/7/8(火) 18:54 発言[未読]
【56863】Re:非表示行の削除 初心者さっち 08/7/9(水) 8:35 お礼[未読]

【56845】非表示行の削除
質問  初心者さっち  - 08/7/8(火) 14:02 -

引用なし
パスワード
   いつもお世話になっております。

非表示にした、複数行を削除したいのですが、
全ての行を検索し、非表示行なら削除、表示しているならそのまま。
と、いうようなVBAはあるのでしょうか。

お願いします。

【56850】Re:非表示行の削除
発言  kanabun  - 08/7/8(火) 14:39 -

引用なし
パスワード
   ▼初心者さっち さん:

>非表示にした、複数行を削除したいのですが、
>全ての行を検索し、非表示行なら削除、表示しているならそのまま。
>と、いうようなVBAはあるのでしょうか。

文字通り、「全ての行を検索し、非表示行なら削除」すれば
Sub Try1()
 Dim c As Range, rr As Range
 For Each c In ActiveSheet.UsedRange.Rows
   If c.Hidden Then
    If rr Is Nothing Then
      Set rr = c
    Else
      Set rr = Union(rr, c)
    End If
   End If
 Next
 If Not rr Is Nothing Then
   rr.Delete
 End If
End Sub

【56853】Re:非表示行の削除
お礼  初心者さっち  - 08/7/8(火) 15:51 -

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

ありがとうございます!!
すごすぎます!!

コピペするだけではなく、理解できるよう努力致します。

【56854】Re:非表示行の削除
質問  初心者さっち  - 08/7/8(火) 16:19 -

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

もう少しお付き合いください。

>全ての行を検索し、非表示行なら削除」
>Sub Try1()
> Dim c As Range, rr As Range
  'cとrrはRangeオブジェクトを返す?

> For Each c In ActiveSheet.UsedRange.Rows
  '要素変数c,アクティブなシートの選択行?

>   If c.Hidden Then
    'cが非表示なら・・

>    If rr Is Nothing Then
     'rrを参照してないなら・・

>      Set rr = c
      'cはrr。

>    Else
     'cが非表示ではなく、rrを参照していたら・・
>      Set rr = Union(rr, c)
       '
>    End If
>   End If
> Next
> If Not rr Is Nothing Then
  ’
>   rr.Delete
    '非表示行を全部削除する。
> End If
>End Sub

すいません。
コメントあってますでしょうか。
できれば、詳細をお願い致します。

【56857】Re:非表示行の削除
発言  kanabun  - 08/7/8(火) 16:44 -

引用なし
パスワード
   ▼初心者さっち さん:
>▼kanabun さん:
>
>もう少しお付き合いください。
>
>>全ての行を検索し、非表示行なら削除」
>>Sub Try1()
>> Dim c As Range, rr As Range
  'Rangeオブジェクト型の変数を宣言 (cは 行ループ用、rr は削除行の集合)
  '◆変数rr は 非表示行を格納するコンテナのようなものです。
>
>> For Each c In ActiveSheet.UsedRange.Rows
>  '要素変数c,アクティブなシートの選択行?
  → 上から順に1行ずつチェックしていく  (c : ループカウンタ変数)
>
>>   If c.Hidden Then
>    'cが非表示なら・・
>    'この行c が 非表示行だったら、コンテナrr にこの行を容れます
     '◆そのとき、コンテナrrが 空っぽのときと すでに行オブジェクトが
       収納されているときとで、処理を分岐します
       ↓
>>    If rr Is Nothing Then
>     '変数rr に何も代入されていないとき、 _
       つまり、はじめて非表示行が見つかったときは _
        ↓ 削除行用の変数 rr に 最初の非表示行を 放り込みます
>>      Set rr = c
>>    Else
       '削除行の集合rr にすでに1つ以上 非表示行が格納されていたら、
       それまでの非表示行の集合に この行 c を追加します。
>>      Set rr = Union(rr, c)
>       '
>>    End If
>>   End If
>> Next
>> If Not rr Is Nothing Then
>  ’
>>   rr.Delete
>    '非表示行を全部削除する。
>> End If
>>End Sub

【56859】Re:非表示行の削除
お礼  初心者さっち  - 08/7/8(火) 18:02 -

引用なし
パスワード
   ▼kanabun様

理解できました!!
大変丁寧にありがとうございます。

If Not rr Is Nothing Then
  ’削除行rrに非表示行cが格納されていれば、rr.Deleteで、
   なにもなければ、なんもしない。ってことですよね?
>>   rr.Delete
>    '非表示行を全部削除する

上記、あってますか?w

もっとがんばります!!

【56862】Re:非表示行の削除
発言  kanabun  - 08/7/8(火) 18:54 -

引用なし
パスワード
   ▼初心者さっち さん:

>If Not rr Is Nothing Then
>  ’削除行rrに非表示行cが格納されていれば、rr.Deleteで、
>   なにもなければ、なんもしない。ってことですよね?
>>>   rr.Delete
>>    '非表示行を全部削除する
>
>上記、あってますか?w

はい♪
  ’非表示行を格納した変数rrに 1つ以上の「行」が格納されていれば、 
   rr.Delete で、
   格納されている非表示行を 丸ごと 削除する

とか、コメントしてもいいでしょうが。 (^^

【56863】Re:非表示行の削除
お礼  初心者さっち  - 08/7/9(水) 8:35 -

引用なし
パスワード
   ▼kanabun様

大変、勉強になりました。

ありがとうございました!!

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