[[20071224105808]] 『データの削除』(みそら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データの削除』(みそら)

早速ですが、A列からF列の各項目ににデータが20000行ほど入っていますが、
そのうちA列(3桁のデータ)を基準としてデータを削除したいのですがVBAではどのようき記述すれば良いのでしょうか。

 A     B     C     D     F

112  。。。。    。。。。    。。。。   。。。。

101

153

208

185

 上記のようなデータのうち 100以上 200以下以外のデータを削除しする方法
はあるのでしょうか。
 実は、今は手作業で、地道にフィルタ機能を使用して不要データを削除し、残ったデータのみを新規に別ファイルとして名前を付けて保存するといった作業を繰り返し、条件にあったファイル作成していますが、とても時間が掛かり苦労していますどなたか助けてください。

 ちなみに分ける条件は

   0以上100未満

 100以上200未満

 200以上330未満

 450以上910未満

 910以上999未満
です。


 削除するなら
    Dim i As Long
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        If Cells(i, 1) >= 100 And Cells(i, 1) < 200 Then
            Rows(i).Delete
        End If
    Next i
 こうなりますけど、非常に時間がかかりますわなぁ。
 で、
     Dim i As Long, j As Long, n As Integer, tbl, x
    tbl = Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 6)
    ReDim x(1 To UBound(tbl, 1), 1 To UBound(tbl, 2))
    For i = 1 To UBound(tbl, 1)
        If tbl(i, 1) < 100 Or tbl(i, 1) >= 200 Then
            j = j + 1
            For n = 1 To UBound(tbl, 2)
                x(j, n) = tbl(i, n)
            Next n
        End If
    Next i
    Sheets.Add
    ActiveSheet.Cells(1, 1).Resize(j, UBound(tbl, 2)) = x
 こんな塩梅に必要なデータを別シートに拾い出すと1秒もかかりまへん。
 ご参考に。
         (弥太郎)

 
 
  

 

  


VBAを使う事が決まっているなら申し訳ないですが、こんな方法じゃだめですか?
データの入ったすべての範囲を選択。
メニューバーの「データ」→「並び替え」 で最優先されるキーを 列(A) で昇順にチェックをいれてOKを押す。

これで昇順に並ぶので、いらない範囲をまとめて削除なり移動ができると思うのですが。
もし、いまの順番を崩したくなければ、A列の前に列を挿入し 1 から順番をつけてから上の作業を行えば、あとでこの列を基準に戻せると思います。その後列を削除で。
 VBAも使ってませんし、見当違いでしたら無視してください。


弥太郎さんありがとうございます。
ほぼうまくいったのですが、新規にフォルダを作成して、作成したファイルを保存させようとしたのですがどうしてもChdirのところでデバックしてしまいます。どうしてでしょうか。それと弥太郎さんから教えていただいた上記のVBAの

If Cells(i, 1) >= 100 And Cells(i, 1) < 200 Thenの条件とした場合に

  A列

  001

  001

  002

となってほしいのですが、

  A列

    1

     1

     2
 
となってしまい先頭の00が抜けてしまいます。これは文字列だから仕方がないのでしょうか?  

Workbooks.Add
ActiveSheet.Cells(1, 1).Resize(j, UBound(tbl, 2)) = x

    ChDir "C:\Documents and Settings\USER\デスクトップ\保存フォルダ"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\user\デスクトップ\保存フォルダ\ppp.xls", FileFormat:=xlNormal, _
        Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
    ActiveWindow.Close

 最下行に
     ActiveSheet.Range("a:a").NumberFormatLocal = "000"
 とでもすれば3桁の数値になりますワ。
    (弥太郎)
 あ、それとそのエラーが何故かは分かりまへんし、あなたのご質問とは違うようです。
 今から出かけなあきまへんもんでごめんなはれや。

 >新規にフォルダを作成して、作成したファイルを保存させようとしたのですが
 >どうしてもChdirのところでデバックしてしまいます。
 フォルダがなくて指定できないからでは?

 新規に作るなら、
 MkDir "C:\Documents and Settings\USER\デスクトップ\保存フォルダ"
 かな?
 参考URL
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_page1.htm
 (じゅんじゅん)

弥太郎さん、じゅんじゅんさんありがとうございました。
条件を分岐して少々長くなりましたが何とかファイルを作成するに至りました。ありがとうございました。最後に(最後じゃないかもしれませんが)

新規に作るなら、
 MkDir "C:\Documents and Settings\USER\デスクトップ\保存フォルダ"

↑の助言をいただいたのですが、同じモジュールを連続して実行すると、すでにファイルができているためERRになってしまいます。そこで、ERRの回避方法....例えばモジュールを実行した際に新規フォルダの名前を指定できる方法等はありませんか。何もかも頼りっぱなしですみません。
 


 Dドライブ直下にフォルダを作成するサンプルです。

 Sub TEST()
     Dim Folder_name As String
     Dim MkFolder_name As String

     MkFolder_name = InputBox("作成するフォルダ名")
     Folder_name = Dir("D:\" & MkFolder_name, vbDirectory)

          If Folder_name <> "" Then
             MsgBox "既にそのフォルダは存在しますので、" & vbLf _
                  & "作業を終了します"
             Exit Sub
           End If

      MkDir "D:\" & MkFolder_name
 End Sub
 エラー処理はしてません。
 ご参考になれば。
 (じゅんじゅん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.