- ベストアンサー
エクセルのフィルタオプションで商品コードを転記する方法
- エクセルのフィルタオプションを使用して、商品マスタ.csvの「商品コード」を受注データ一覧.xlsに転記する方法を教えてください。
- 商品マスタ.csvに含まれる「商品コード」「商品番号」「カラー」「色」と受注データ一覧.xlsに含まれる「商品番号」「カラー」「色」を比較し、一致する場合のみ「商品コード」を転記する方法を教えてください。
- CSVファイルのデータが30万件以上あるため手作業が困難な状況で、エクセルのフィルタオプションを利用して「商品コード」を一括転記する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
横から失礼。下記ご質問の関係ですね。 http://okwave.jp/qa/q7643546.html 「xl2010を購入して」と記したのは、30万行のCSVを丸ごとワークシートに読みこんでから処理するという意味ですので、2003以前では無理です。 アクセスなら、クエリのデザインビューでちょこちょこっと結合線を結べば完成してしまいますが、ExcelVBAでやってみました。簡便のため、商品マスタ.csvと、受注データ一覧もcsv形式で保存して受注データ一覧.csvとし、共にデスクトップに保存してあるとします。新規ワークブックに下記マクロをコピペして実行すると、抽出できる筈です(小さなファイルでしか試しておりませんので、速度は不明)。しかしながら、SQLをお勉強していただかないと、応用は出来ませんね... Sub test() Dim cn As Object Dim rs As Object Dim connectionString As String Dim csvFilePath As String Dim mySQL As String Set cn = CreateObject("ADODB.Connection") csvFilePath = ThisWorkbook.Path 'CSVファイルにラベル(フィールド名)があるとする connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & csvFilePath & ";" _ & "Extended Properties=""Text;HDR=YES;FMT=Delimited""" cn.Open connectionString mySQL = "SELECT 商品マスタ.商品コード, 受注データ一覧.商品番号, 受注データ一覧.カラー, 受注データ一覧.色 FROM 受注データ一覧.csv AS 受注データ一覧 LEFT JOIN 商品マスタ.csv AS 商品マスタ ON (受注データ一覧.商品番号 = 商品マスタ.商品番号) AND (受注データ一覧.色 = 商品マスタ.色) AND (受注データ一覧.カラー = 商品マスタ.カラー);" Set rs = cn.Execute(mySQL) ThisWorkbook.Worksheets(1).Range("A1").CopyFromRecordset rs rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
その他の回答 (5)
- mitarashi
- ベストアンサー率59% (574/965)
#4です。 不適切な箇所がありましたので、訂正させて下さい。 両CSVと、マクロを記述したエクセルのブックを同一フォルダーに保存して実行して下さい。デスクトップには限られません。 エクセルブックは必ず保存後に実行しないと、ブックのありか(フォルダー)が確定しておれずエラーになりますので、ご注意下さい。
- MackyNo1
- ベストアンサー率53% (1521/2850)
>CSVファイルのデータが30万件以上あるため 確認ですが、ご使用のExcelは2007以降のバージョンでないのでしょうか? 一般的にOfficeソフトは、バージョンによって使用できる機能や操作方法が大きく異なりますので、質問の際には必ずバージョンを明記するようにしましょう。 今回のケースではフィルタオプションあるいは関数を利用すればおそらくご希望の作業ができると思われますが、もし2003以前の古いバージョンのエクセルを使用されているなら、csvファイルを分割してから処理を繰り返すことになります。 具体的な操作方法を知りたいなら、実際のデータベースシートやcsvファイルの表のレイアウトなどを具体的に例示されたほうが良いと思います。
- SakuraiMisato
- ベストアンサー率17% (42/235)
両方のテーブルでの整列の順序は同じなのでしょうか?
お礼
ご回答ありがとうございます。 解決いたしました。 次回質問する際はもう少し詳しく記述するようにいたします。
【やりたいこと】を達成するために、なぜ「フィルタオプションを使用」したいのか教えてください。
お礼
ご回答ありがとうございます。 解決いたしました。 次回質問する際は理由までもう少し詳しく記述するようにいたします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
初めにCSVファイルでA2セルから下方に商品コード、B2セルから下方に商品番号、C2セルから下方にカラー、D2セルから下方に色のデータがそれぞれ入力されているとしたらE列を作業列としてE2セルには次の式を入力して下方にドラッグコピーします。 =B2&C2&D2 受注データのシートにはA2セルから下方に商品番号、B2セルから下方にカラー、C2セルから下方に色のデータが入力されているとしたら、D1セルには商品コードと文字を入力しD2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",IF(COUNTIF(商品マスタ.csv!$E:$E,A2&B2&C2)=0,"",INDEX(商品マスタ.csv!$A:$A,MATCH(A2&B2&C2,商品マスタ.csv!$E:$E,0))))
お礼
ご回答ありがとうございます。 お教えいただいた方法で試し解決いたしました!
お礼
お礼が遅くなり申し訳ありません。 お教えいただいたマクロで実行できました! 本当にありがとうございました!!!