Excel VBA質問箱 IV

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

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


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

【14856】検索cellの列ごと削除したいのですが 123 04/6/8(火) 21:59 質問[未読]
【14861】Re:検索cellの列ごと削除したいのですが かみちゃん 04/6/8(火) 22:30 回答[未読]
【14864】Re:検索cellの列ごと削除したいのですが 123 04/6/8(火) 22:51 質問[未読]
【14878】Re:検索cellの列ごと削除したいのですが かみちゃん 04/6/9(水) 0:07 回答[未読]
【14904】Re:検索cellの列ごと削除したいのですが 123 04/6/9(水) 20:37 お礼[未読]

【14856】検索cellの列ごと削除したいのですが
質問  123  - 04/6/8(火) 21:59 -

引用なし
パスワード
   こんばんは。
先日に引き続き、おたずねします。

まず、"AA"をある列から検索したのち、
その"AA"行について、"1"が入っている列を列ごと削除したい
のです。"1"が入っている列はいくつかあるのです。
こうしてみたのですが、実行後、エラーがかえってきます。
かつ、一列しか削除されません。


Dim e As Range

Rows(検索行).Select
      
   For i = 0 To 20
       
    Selection.Find(What:="1", After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext _
    , MatchCase:=False, MatchByte:=False).Activate
             
    ActiveCell.EntireColumn.Delete   
           
   Next i


      

【14861】Re:検索cellの列ごと削除したいのですが
回答  かみちゃん  - 04/6/8(火) 22:30 -

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

>まず、"AA"をある列から検索したのち、
>その"AA"行について、"1"が入っている列を列ごと削除したい
>のです。"1"が入っている列はいくつかあるのです。
>こうしてみたのですが、実行後、エラーがかえってきます。
>かつ、一列しか削除されません。

Findメソッドをヘルプで調べてみてください。
「指定されたセル範囲の中で特定の情報を検索し、情報が見つかった最初のセル (Range オブジェクト) を返します。」
と書かれていると思います。
指定された範囲とは、ここでは、Rows(検索行)です。

で、最初のセルですから、ActiveCell.EntireColumn.Deleteで、その列1列のみが削除されます。
ただし、Forループで21回その操作を繰り返します。
しかし、21回以内に該当するセルがなくなってしまうと、たぶんエラーになります。
エラーの内容は、想像つきますが、念のため、教えていただかないと、とんちんかんなコメントになってしまうので、教えてください。

【14864】Re:検索cellの列ごと削除したいのですが
質問  123  - 04/6/8(火) 22:51 -

引用なし
パスワード
   かみちゃん さん

こんばんは。

エラー内容ですが、
"オブジェクト変数または、withブロック変数が
設定されていません。"です。

【14878】Re:検索cellの列ごと削除したいのですが
回答  かみちゃん  - 04/6/9(水) 0:07 -

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

>エラー内容ですが、
>"オブジェクト変数または、withブロック変数が
>設定されていません。"です。

こちらの事象と類似していると思います。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=14755;id=excel

Sub macro0608_3()
 Dim e As Range
' 検索行 = 1
 Rows(検索行).Select
   
 For i = 0 To 20
  Set e = Selection.Find(What:="1", After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext _
    , MatchCase:=False, MatchByte:=False)
  'Findで見つからない(Nothing)場合以外のとき
  If Not e Is Nothing Then
   e.EntireColumn.Delete '←ActiveCellではなく、Findで見つけたセルを含む列e.EntireColumnsrとする。
  End If
 Next i
End Sub

ただし、これでは、21回までしか削除処理をしません。
それでもいいのでしょうか?
全容が見えないので、なんとも言えませんが・・・
なぜ、For〜Nextを使っているのかなど。

【14904】Re:検索cellの列ごと削除したいのですが
お礼  123  - 04/6/9(水) 20:37 -

引用なし
パスワード
   かみちゃん さん

こんばんは。返信ありがとうございます。

頂いた事象と類似しており、とても
参考になりました。
ご指摘のように、Forを使わずに
処理することができました。

かみちゃんさんのチョコッとアドバイス
がいいヒントを与えてくれます。

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