Results of 0 - 1 of about 0 (0.000 sec.)
- [[20071224105808]]
- @digest: 424861cdbb3b714b8ccc2eaa1a91754b
- @id: 35191
- @mdate: 2007-12-24T22:35:50Z
- @size: 4991
- @type: text/plain
- #keywords: mkfolder (25546), ダ" (7180), プ¥ (5778), 存フ (4988), settings (3561), 上20 (3354), mkdir (3085), documents (2649), 弥太 (2089), user (2030), chdir (1987), デス (1876), 未満 (1860), folder (1822), ォル (1809), ルダ (1548), トッ (1544), 規に (1502), フォ (1271), 新規 (1265), 当違 (1087), スク (1039), 保存 (911), tbl (887), ubound (844), デバ (843), 太郎 (819), 削除 (779), 昇順 (716), 以上 (654), ファ (645), 作成 (621)
- 『データの削除』(みそら)
早速ですが、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 エラー処理はしてません。 ご参考になれば。 (じゅんじゅん) ...
-
https://www.excel.studio-kazu.jp/wiki/kazuwiki/200712/20071224105808.txt
- [detail]
- similar
PREV
NEXT
Powered by
Hyper Estraier 1.4.13, with 98907 documents and 617515 words.
訪問者:
