[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの削除』(みそら)
早速ですが、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秒もかかりまへん。
ご参考に。
(弥太郎)
これで昇順に並ぶので、いらない範囲をまとめて削除なり移動ができると思うのですが。
もし、いまの順番を崩したくなければ、A列の前に列を挿入し 1 から順番をつけてから上の作業を行えば、あとでこの列を基準に戻せると思います。その後列を削除で。
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.