- ベストアンサー
CSVファイルをエクセルへインポート
お世話になります ユーザーホームにテキストボックス、参照ボタン、実行ボタンを配置。 参照ボタンをクリックするとダイアログボックスが開きCSVを選ぶ。 選んだ場所がテキストボックスに記載され実行ボタンを押すと エクセルにインポートする。 張り付き内容は下記の通りです XLS側は CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ 分かる方ご教授願います 当方初心者の為VBAコードでお願いします
- みんなの回答 (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)
csvから要らなくなるsheetxをつくるのがわからない。 直接csvから必要なsheetにcopyするのではだめなのか。 csvファイルはたくさんあって、いろいろなフォルダに散らかっているのか。 限定されているなら、 Application.GetOpenFilename でなくても直接コンボボックスなどに表示して、選択するのではだめなのか。
- sakura9113
- ベストアンサー率50% (2/4)
#2の者です。 ================== CSV→XLS側 B列→XLSのC列へ D列→XLSのG列へ F列→XLSのI列へ ================== これは、 「XLSのA列B列などに何かデータが入っていて、C列G列I列に入れ込みたい」 ということなのですか?
お礼
お返事ありがとうございます
補足
お返事が遅くなり申し訳ありません 申し訳ありません 下記の内容は自分の考えが、勘違いしてました ================== 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
- sakura9113
- ベストアンサー率50% (2/4)
Private Sub CommandButton1_Click() '=================== '選択したCSVファイルのパスをテキストボックスに表示 '=================== FileName = Application.GetOpenFilename _ ("csvファイル(*.csv),*.csv", 1, "csvファイルを開く") Me.TextBox1 = FileName End Sub CSVファイルのパスをテキストボックスに表示させる意図、わざわざ実行ボタンと分けてある意図は、確認のためなのでしょうが・・・ とりあえず↑で参照ボタンはOKでしょう。 読み込み部分は、読み込みたくない項目を取り込まなければ良いだけの話なんですか?
お礼
お返事ありがとうございます ダイアログが出たときは感動しました。
補足
はい読みたくない項目は不要なので必要な列だけで結構です
- okormazd
- ベストアンサー率50% (1224/2412)
意図がよくわからない。だから、 VBAコード化できない。
お礼
お返事ありがとうございました
補足
意図は分からないと思います 部分的な処理しか問い合わせていませんでした。 概略としては もともと入力済みの商品情報(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を削除させれば完成すると思っています。 そのための取り込み部分の質問でした できればすべてご教授願えれば幸いです宜しくお願い申し上げます
補足
お返事有賀とうございます 最終的には商品IDに対して配送者に値が入れば問題ないです(自動化目標) 方法としてsheetに貼り付けさせてから計算させただけです