• ベストアンサー

CSVファイルをエクセルへインポート

お世話になります ユーザーホームにテキストボックス、参照ボタン、実行ボタンを配置。 参照ボタンをクリックするとダイアログボックスが開きCSVを選ぶ。 選んだ場所がテキストボックスに記載され実行ボタンを押すと エクセルにインポートする。 張り付き内容は下記の通りです XLS側は CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ 分かる方ご教授願います 当方初心者の為VBAコードでお願いします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

遅くなってごめんなさい。 ↓↓↓でどうでしょう? Dim csvName As String, myFileName As String, myData As String, myStr As String Dim LastRow As Integer, i As Integer '======================================== '選択したCSVファイルのパスをテキストボックスに表示 '======================================== myFileName = Application.GetOpenFilename _ ("csvファイル(*.csv),*.csv", 1, "csvファイルを開く") UserForm1.TextBox1 = myFileName '======================================== 'CSVファイルを開いて、データをコピー '======================================== Workbooks.Open FileName:=myFileName csvName = ActiveSheet.Name & ".csv" Cells.Copy '======================================== '捨てシートを作成し、ペースト '======================================== Windows("Book1.xls").Activate Sheets.Add ActiveSheet.Paste ActiveSheet.Name = "読み込み用" '======================================== 'CSVファイルを閉じる '======================================== Application.DisplayAlerts = False Windows(csvName).Close Application.DisplayAlerts = True '======================================== '配送者名をセルに入れる '======================================== Sheets("データ").Activate LastRow = Range("A65536").End(xlUp).Row For i = 1 To LastRow myData = Cells(i, 1) Cells(i, 3).FormulaR1C1 = "=Index(読み込み用!R1C1:R" & LastRow & "C2,match(""" & myData & """,読み込み用!R1C1:R" & LastRow & "C1,0),2)" myStr = Cells(i, 3).Text Cells(i, 3) = myStr Next '======================================== '捨てシートを削除 '======================================== Application.DisplayAlerts = False Sheets("読み込み用").Delete Application.DisplayAlerts = True

その他の回答 (4)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

csvから要らなくなるsheetxをつくるのがわからない。 直接csvから必要なsheetにcopyするのではだめなのか。 csvファイルはたくさんあって、いろいろなフォルダに散らかっているのか。 限定されているなら、 Application.GetOpenFilename でなくても直接コンボボックスなどに表示して、選択するのではだめなのか。

BSR123
質問者

補足

お返事有賀とうございます 最終的には商品IDに対して配送者に値が入れば問題ないです(自動化目標) 方法としてsheetに貼り付けさせてから計算させただけです

回答No.3

#2の者です。 ================== CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ ================== これは、 「XLSのA列B列などに何かデータが入っていて、C列G列I列に入れ込みたい」 ということなのですか?

BSR123
質問者

お礼

お返事ありがとうございます

BSR123
質問者

補足

お返事が遅くなり申し訳ありません 申し訳ありません 下記の内容は自分の考えが、勘違いしてました ================== CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ ================== sakura9113様の頂いたコードより先は(ダイアログボックス等VBA) ■sheet2を自動生成させる ■sheet2にCSVを貼り付ける(必要な列)仮にCSVのA列B列 下記 商品ID|担当者| LLL121|太郎 | L00001|一郎 | B11235|悟郎 | 本件はここまでが内容です 以下は教えて頂いたら大変ありがたい素材です ■sheet1に下記がもともと入っています 商品ID|センタ|配送者| L00001|大阪 |   | B11235|京都 |   | LLL121|東京 |   | ■本来自動に配送者に氏名を入力させるにはVLOOKUPを使用しますが VBAで自動にsheet2から商品IDに対して飛ばしたいのです ■配送者に名前等がはいるとsheet2は不要なので自動で削除させます そうすると参照ボタンでCSVを選び実行ボタンだけで配送者名がわかる仕組みになります。 まことに申し訳ありませんがよろしくお願い申し上げますm(__)m

回答No.2

Private Sub CommandButton1_Click() '=================== '選択したCSVファイルのパスをテキストボックスに表示 '=================== FileName = Application.GetOpenFilename _ ("csvファイル(*.csv),*.csv", 1, "csvファイルを開く") Me.TextBox1 = FileName End Sub CSVファイルのパスをテキストボックスに表示させる意図、わざわざ実行ボタンと分けてある意図は、確認のためなのでしょうが・・・ とりあえず↑で参照ボタンはOKでしょう。 読み込み部分は、読み込みたくない項目を取り込まなければ良いだけの話なんですか?

BSR123
質問者

お礼

お返事ありがとうございます ダイアログが出たときは感動しました。

BSR123
質問者

補足

はい読みたくない項目は不要なので必要な列だけで結構です

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

意図がよくわからない。だから、 VBAコード化できない。

BSR123
質問者

お礼

お返事ありがとうございました

BSR123
質問者

補足

意図は分からないと思います 部分的な処理しか問い合わせていませんでした。 概略としては もともと入力済みの商品情報(XLS)があります下記 配送.xls 商品ID|センタ|配送者| L00001|大阪 |   | B11235|京都 |   | LLL121|東京 |   | H20.02.28運送リスト.csv 商品ID|担当者|TEL  | LLL121|太郎 |11-11 | L00001|一郎 |55-55 | B11235|悟郎 |33-33 | VBA実行後↓ 配送.xls 商品ID|センタ|配送者| L00001|大阪 |一郎 | B11235|京都 |悟郎 | LLL121|東京 |太郎 | 上記が完成図です 当方としてはまずsheet1を自動生成させた後に 仮にCSVの値を貼り付けさせてからVBA内でVLOOKUPのようなVBAを組み立てて、配送者が張り付いた時点でsheet1を削除させれば完成すると思っています。 そのための取り込み部分の質問でした できればすべてご教授願えれば幸いです宜しくお願い申し上げます

関連するQ&A

専門家に質問してみよう