[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データの抽出』(レイ)
フォルダ内にExcelファイル「ボタン」とcsvファイル「データ」
があります。
Excelファイルにボタンを配置してcsvファイルにあるデータを
条件を満たす行を抽出して別のcsvファイルとして出力するマクロを
作成したいのですが、知識が薄いので助けてください。
一応、いろいろ試してCSVファイルにマクロを作成して
見ましたがSheet2に出力するまではできたと思うのですが
あってるのかいまいちわかりません。
Sub Macro1()
Application.ScreenUpdating=false
Dim a
a=Application,Transpose(Range("U2:U"&Range("U1048576").
End(xlUp).Row).Value
a=Filter(a,"234".False)
a=Filter(a,"567".False)
a=Filter(a,"890".False)
a=Filter(a,"123".False)
a=Filter(a,"456".False)
a=Filter(a,"987".False)
With Range("A1")
.AutoFilter Field:=21,Criteria1=a,Operaator:=xlFilterValues
.AutoFilter Field:=34,Criteria1=12345,Operaator:=xlFilterValues
.CurrentRegion.Copy sheet("Sheet2").Range("A1")
.AutoFilter
End With
Application.ScreenUpdating=True
End Sub
※aの条件は全部で10個あります。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
動かしては見たのでしょうか?
多分動かなかったと思いますが・・
コンパイルエラーが出ないように修正したコードが下記です
データの内容がわからないので、実行時の検証はできません
とりあえずこれで動かしてみては?
Sub Macro1()
Application.ScreenUpdating = False Dim a
a = Application.Transpose(Range("U2:U" & Range("U1048576").End(xlUp).Row)).Value
a = Filter(a, "234", False) a = Filter(a, "567", False) a = Filter(a, "890", False) a = Filter(a, "123", False) a = Filter(a, "456", False) a = Filter(a, "987", False)
With Range("A1") .AutoFilter Field:=21, Criteria1:=a, Operator:=xlFilterValues .AutoFilter Field:=34, Criteria1:=12345, Operator:=xlFilterValues .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With
Application.ScreenUpdating = True End Sub
(渡辺ひかる) 2019/08/05(月) 09:12
同一フォルダ内にExcelファイル「ファイル名:ボタン」と
csvファイル「ファイル名:データ」があります。
Excelファイル「ファイル名:ボタン」にボタンを配置して
csvファイル「ファイル名:データ」にあるデータから
条件を満たす行だけを抽出して別のcsvファイル「ファイル名:データ2」
として出力するマクロを作成したかったのですが
方法が良くわからずcsvファイル「ファイル名:データ」をエクセルで開いて
マクロを試していた為、記載したマクロになってしまった次第です。
※なので出力先もSheet2となっています。
条件としましてはcsvファイルをExcelで開いたときにU2以降の行(U1は科目名)が
aの条件以外のものでかつAHの行に12345が入力されている以外の行が対象で別の
CSVふぁいるとして保存したいです。
分かりずらくてすみません。
(レイ) 2019/08/05(月) 11:47
ボタンをクリックする時点でcsvファイルは開かれているとして
以下のコードを「ボタン」の標準モジュールに貼り付けて、ボタンにマクロを登録して
実行してみてください
動作確認のためにApplication.ScreenUpdatingはコメントアウトしています。
データ2.csv の保存フォルダは「ボタン」と同じにしています。
Sub Macro1()
'Application.ScreenUpdating = False Dim a Dim myCsvSht As Worksheet Dim myNewCsv As Workbook
Set myCsvSht = Workbooks("データ.csv").Worksheets("Sheet1") Set myNewCsv = Workbooks.Add
a = Application.Transpose(myCsvSht.Range("U2:U" & myCsvSht.Range("U1048576").End(xlUp).Row)).Value
a = Filter(a, "234", False) a = Filter(a, "567", False) a = Filter(a, "890", False) a = Filter(a, "123", False) a = Filter(a, "456", False) a = Filter(a, "987", False)
With myCsvSht.Range("A1") .AutoFilter Field:=21, Criteria1:=a, Operator:=xlFilterValues .AutoFilter Field:=34, Criteria1:=12345, Operator:=xlFilterValues .CurrentRegion.Copy myNewCsv.Sheets("Sheet1").Range("A1") .AutoFilter End With
myNewCsv.SaveAs ThisWorkbook.Path & "\" & "データ2.csv", xlCSV myNewCsv.Close False 'Application.ScreenUpdating = True End Sub
(渡辺ひかる) 2019/08/05(月) 12:18
>a=Filter(a,"234".False) >a=Filter(a,"567".False) >a=Filter(a,"890".False) >a=Filter(a,"123".False) >a=Filter(a,"456".False) >a=Filter(a,"987".False)
U列は全て3桁ですか? もしそうでなければ、問題ありです。
元CSVから上記以外のデータで構成された新CSVを生成する。
ということなら、ADO接続で出来ると思います。 U列の列項目は何でしょう? (seiya) 2019/08/05(月) 13:46
上記の所でオブジェクトが必要ですのエラーが帰って来てしまいます。
U列は全て3桁ですか?
>>いえ全てが3ケタではありません。8ケタくらいまであるものもあります。
(レイ) 2019/08/05(月) 13:57
>>いえ全てが3ケタではありません。8ケタくらいまであるものもあります。 Filter関数は部分一致(含む)で判断します。 問題ありませんか? U列の列項目はわかるのですか? (seiya) 2019/08/05(月) 14:15
Workbooks.Open メソッドで開いて問題ないなら AutoFilterで
Sub test() Dim fn As String fn = Application.GetOpenFilename("CSVFiles,*.csv") If fn = "False" Then Exit Sub With Workbooks.Open(fn).Sheets(1) With .Cells(1).CurrentRegion .AutoFilter 21, Array("234", "567", "890", "123", "456", "987"), 7 .Offset(1).EntireRow.Delete .AutoFilter 34,"<>12345" '<---- .Offset(1).EntireRow.Delete '<--- .Parent.AutoFilterMode = False End With With .Parent .SaveAs Replace(fn, ".csv", "_New.csv"), xlCSV .Close False End With End With End Sub
(seiya) 2019/08/05(月) 14:26
2行追加 :
Filter関数は部分一致(含む)で判断します。 問題ありませんか? U列の列項目はわかるのですか? >>U列の列項目は数値です。(頭が0はありません) 部分一致ですと確かに問題です。 (レイ) 2019/08/05(月) 14:38
検証不足でした。
下記のように変更してください
a = Application.Transpose(myCsvSht.Range("U2:U" & myCsvSht.Range("U1048576").End(xlUp).Row).Value)
(渡辺ひかる) 2019/08/05(月) 15:43
(レイ) 2019/08/07(水) 01:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.