Excel VBA質問箱 IV

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

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


8753 / 76732 ←次へ | 前へ→

【73547】Re:表整理
発言  UO3  - 13/1/20(日) 16:35 -

引用なし
パスワード
   ▼コーヒー牛乳 さん:

こんにちは

ご自身で「オートフィルターを使うなり、配列を使うなり」と書いておられるように、
この処理ですと、「フィルターオプション」が最適ではないでしょうか。

たとえば G1から右に抽出したいタイトル(みかん や りんご)をいくつでも抽出したい順番に
記入しておきます。かりにG1とF1の2つに書いたとします。
(動的に、いくつあるかを判断できますがわかりやすくするために2つだけだとしましょう)

で、2003までなら データ->フィルターオプション、
2007以降ならデータメニューのフィルターグループの詳細設定。

でてきたダイアログで

リスト範囲(L) A:F
指定した範囲(O) を選んで 抽出範囲(T) に G1:H1
OK ボタン

これで、G列、F列に目的のものが抽出されます。

必要なら A:F列を削除してもよろしいですね。

★この一連の操作をマクロ記録しますと、コードが生成されます。
 

で、それとは別に、一般的なコード処理としては、アップされたコード、いささか改善の余地はありますね。
・ループ制御の中でGoToを使うのは感心しません。
・処理すべきセル等をSelectして、Selection.○○○ とするのも感心しません。

アップされたように1行目の値を判定して列削除するにしても、以下のようなコードにされるほうが
よろしいかと思います。

Sub Sample()
  Dim maxCol As Long
  Dim j As Long
  
  '最終列番号の取得
  maxCol = Range("A1").CurrentRegion.Columns.Count
'  または
'  maxCol = Cells(1, Columns.Count).End(xlToLeft).Column
'  または
'  maxCol = Range("A1").End(xlToRight).Column
  
  For j = maxCol To 1 Step -1
    Select Case Cells(1, j).Value
      Case "りんご", "みかん"
      Case Else
        Columns(j).Delete
    End Select
  Next
      
End Sub

263 hits

【73544】表整理 コーヒー牛乳 13/1/20(日) 14:24 質問
【73545】Re:表整理 kanabun 13/1/20(日) 15:01 発言
【73546】Re:表整理 コーヒー牛乳 13/1/20(日) 16:17 お礼
【73547】Re:表整理 UO3 13/1/20(日) 16:35 発言
【73548】Re:表整理 コーヒー牛乳 13/1/20(日) 17:04 お礼
【73549】Re:表整理 UO3 13/1/20(日) 17:49 発言
【73550】Re:表整理 コーヒー牛乳 13/1/20(日) 17:59 お礼
【73551】Re:表整理 kanabun 13/1/20(日) 19:56 発言
【73552】Re:表整理 コーヒー牛乳 13/1/20(日) 20:34 お礼

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