vbaでファイルを取り込む方法

このQ&Aのポイント
  • vbaでファイルを取り込む方法について説明します。
  • 具体的な手順やコードを使用して、フォルダからファイルを選択し、情報を抽出する方法を紹介します。
  • 特定のファイル形式(csvやエクセル)に対応しており、ユーザーフォームを使用して操作できます。
回答を見る
  • ベストアンサー

vbaでファイルを取り込む方法

Sub ボタン1_Click() Dim f As String '選んだcsvファイルをSheet1に読み込む f = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "読み込むcsvファイルを選んで", False) If f = "False" Then Exit Sub Workbooks.Open f Cells.Copy ThisWorkbook.Sheets("通販素材").Range("A1") ActiveWorkbook.Close False は以前とあるサイトを参考に少し手を加えたもので、フォルダからファイルを選択し新しいシートにそのファイルの情報を抽出するというものになります。 今回質問したのは、ファイルの取り込みボタンを押してユーザーフォームが出現してから商品情報が載っているcsvもしくはエクセルファイル、在庫表のcsvもしくはエクセルファイルを選択し、処理開始したらitem、在庫表というシートを作成し読み込んだイファイルの情報を抽出するというのをやってみたいのですがどのようにアレンジすればよろしいでしょうか?

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

シート上のボタンをクリックしたらユーザフォームを表示し ユーザフォーム上のファイル選択ボタンをクリックしたら ファイルを選択するダイアログを開き ファイルが選択されたら 選択したファイル名(フルパス)をラベルに表示し ユーザフォーム上の開始ボタンをクリックしたら 先に選択したファイルの処理をしたい。 ということであれば、以下でいかがでしょうか... UserForm1を用意して  labelを1つ配置   名前:Label_File1  ボタンを2つ配置   名前:Btn_FileSel1   名前:Btn_Go '以下のコードを標準モジュールに配置 Sub ボタン1_Click()  UserForm1.Show End Sub '以下のコードをフォームモジュールに配置 Private Sub Btn_FileSel1_Click()  Label_File1.Caption = _   Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, _   "読み込むcsvファイルを選んで", False) End Sub Private Sub Btn_Go_Click()  Workbooks.Open Label_File1.Caption  Cells.Copy ThisWorkbook.Sheets("通販素材").Range("A1")  ActiveWorkbook.Close False End Sub 追記 今後はエクセル専用のフォーラムを使ったほうがいいと思います。

saya100111
質問者

お礼

かしこまりました。 ありがとうございます。

その他の回答 (1)

  • okwavey2
  • ベストアンサー率15% (251/1593)
回答No.1

まず、技術者向け。 VBとVBAは違う。 あるサイト、と書くくらいなら具体的なものを。

saya100111
質問者

補足

関連するQ&A

  • 指定ファイルに情報抽出させるvba

    商品情報から別のcsvファイルの仕様に合わせて情報抽出させるvbaの作り方について質問です。 長くなるので下記すぷれっとシート https://docs.google.com/spreadsheets/d/1NVh5Tv7o15WftriFJNfODH_AxOv... をもし可能であればご覧ください。 では、本題に入ります。 通常商品を登録するときに、商品情報が載っているcsvからネットショップで一括登録をするためのcsv用のファイルの仕様に合わせて手作業でコピペしてやっております。 その作業をvbaでできるようにしたいのですが、どのようにしたらよろしいでしょうか 私になりに調べて分かったことは、 https://kosapi.com/post-3215/ に記載されている ・必要な項目列を指定した順番で別シートに抽出するコード例 Sub 項目列抽出() Sheets("抽出").Select Sheets("日別各店売上").Range("A1").CurrentRegion.AdvancedFilter _ Action:=xlFilterCopy, CopyToRange:=Range("A1:C1") End Sub ・商品情報から指定先のフォーマットに合わせるための置換作業(下記は例です。) Sub ボタン1_Click() Dim f As String '選んだcsvファイルをSheet1に読み込む f = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "読み込むcsvファイルを選んで", False) If f = "False" Then Exit Sub Workbooks.Open f Cells.Copy ThisWorkbook.Sheets("通販素材").Range("A1") ActiveWorkbook.Close False End Sub Sub 連続置換メイン() Dim xSh Application.ScreenUpdating = False For Each xSh In Split("通販素材", ",") '★ Call 連続置換(xSh) Next xSh Application.ScreenUpdating = True End Sub Sub 連続置換(xSh) With ThisWorkbook.Worksheets(xSh).Columns("M") .Replace What:="在庫あり", Replacement:="10" .Replace What:="在庫なし", Replacement:="0" .Replace What:="廃盤", Replacement:="0" End With End Sub vlookupのvba,sumifのvbaを組み合わせるのではないかと考えているのですが、実際にはどういったことをしたらよいかわからないためご教授のほうお願いいたします。

  • 複数のCSVファイルを自動でエクセルに変換したい

    フォルダの中に、300近いCSVフォルダがあります。 ネットで探したマクロVBAでやってみたところ、一つのCSVファイルを選び、それをエクセルファイルに変換できました。 このマクロを使って、フォルダ内にあるすべてのCSVファイルを一気にエクセルに変換するには、どうしたらいいのでしょうか。 ご教授のほど、よろしくお願いいたします。 Sub CSVからXLSX() Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close SaveChanges:=False End Sub

  • excel 2003でCSVファイルを読み込むVBA

    現在CSVファイルを読み込むマクロを作成してますが、レベルが低く下記載のコードで作業を行ってます。 皆様の技術をお借りしたいので、ご教授宜しくお願い致します。 ※現在のコードです。 CommandButton1でフォルダーを開いてcsvファイルを選択し、toolをsheetに追加してます。それから、CommandButton3で追加されたtoolからB14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付けています。 結構手間が係り作業に時間がかかってしまいます。 そこで、改良をしたいと思いますのでご教授お願い致します。 ※改良したいポイント (1)同じフォルダー内のTOOL.CSVをフォルダーを開かず直接commandButton1でSheetに追加する。 (2)Sheet2にコピーされたデーターから(B14:C14)を選択し最終行までコピーしSheet1の(B12)に数値のみを貼り付ける。 (commandButton3はなくしたいと思ってます) 以上です。 宜しくお願い致します。 --------------------------------------------------------- Private Sub CommandButton1_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Myname = ActiveWorkbook.Name CSV_Filename = Application.GetOpenFilename("CSVファイル(*.CSV;*.prn),*.CSV;*.prn", , "CSVファイルを開く") If CSV_Filename = False Then Exit Sub Workbooks.Open CSV_Filename CSV_SheetName = Worksheets(1).Name Sheets(CSV_SheetName).Move after:=Workbooks(Myname).Sheets(Sheets.Count + 1) Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub ---------------------------------------------------------------- Private Sub CommandButton3_Click() Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Sheets("(TOOL)").Select Sheets("(TOOL)").Range("B14:C14").Select Sheets("(TOOL)").Range(Selection, Selection.End(xlDown)).Select Selection.copy Sheets("CSV Road").Select Sheets("CSV Road").Range("B12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub -------------------------------------------------------------

  • EXCEL VBAでカンマ区切りテキストファイルに変換する方法

    EXCELで作成したシートをVBAでカンマ区切りテキストファイル(CSVファイルではなく)に変換する方法を教えてください 下記のプログラムではテキストファイルに変換されますが、カンマ区切りになりませんでした。 Sub Samp() ActiveWorkbook.SaveAs Filename:="C:\WINDOWS\aa.txt", FileFormat _ :=xlText, CreateBackup:=False End Sub

  • エクセルからCSVファイルに出力したい?

    エクセルのシートからマクロを使ってCSVファイルに出力したいです。 そこで調べたのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2376607 こちらの質問で以下のようなコードが参考になりました。 Sub Macro1() Dim myBook As String myBook = ActiveWorkbook.FullName myBook = Left(myBook, Len(myBook) - 3) & "CSV" ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=myBook, FileFormat:=xlCSV ActiveWindow.Close False End Sub このコードではCSVのファイル名がエクセルシートのファイル名になってしまいます。 今回の質問ですが、CSVファイルを違う名前で保存するにはどのようにすればいいのでしょうか? (CSVファイルの名前は常にabc.csvで保存するものとします)

  • GetOpenFileNameでファイル名でのフィルタ

    こんにちは, EXCEL2007 VBAを用いて ワークブックオープン時にファイル選択ダイアログを表示しています。  GetOpenFileName("日報ファイル(*.CSV),*.CSV",false) 上記は拡張子*.CSVでフィルタを掛けていますが、 ファイル名を絡めてフィルタを掛けることはできないのでしょうか? 日報ファイルなら*day.CSV,月報なら*month.CSVといった様に・・・  GetOpenFileName("日報ファイル(*day.CSV),*day.CSV",false) 上の様にすると*.*となりフィルタがかかりません。 ファイル選択ダイアログのファイル名のところに*day.CSVと手入力すれば フィルタがかかります。これをVBAから行えないでしょうか? よろしくお願いいたします。

  • VBAでファイルOPEN ダイアログを使用したいです

    現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

  • エクセルVBAでファイルをCSV保存の仕方

    エクセルのシートをCSVファイルに保存するため以下のようなマクロを書きました。 Sub Macro1() Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs FileName:="C:\WINDOWS\デスクトップ\Book1.csv", FileFormat _ :=xlCSV, CreateBackup:=False ActiveWindow.Close ThisWorkbook.Activate End Sub 一応これで保存できるのですが、自動記録でやったためファイルの名前が出てしまいました。 この部分をわたし以外の誰でも任意の名前をつけ、任意のフォルダーに保存できるように書き換えたいのです。 どのように記述すれば良いかお教えください。お願いします。

  • Excel VBA CSVを文字型で読みたいのです

    お世話になります。 Excel2013のVBAでCSVの全項目を文字型として取り込む処理を作ろうとしているのですが、 うまくいきません。 数値項目のゼロが消えてしまいます。 サンプルcsvと、取り込む所だけ抽出したソースを見て頂いて、なんとかなりますでしょうか? よろしくお願いします。 sub test() 'csvのオープンダイアログ varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSV形式(csv形式)の選択") 'ファイル名を取得していなければ終了 If varFileName = False Then Exit Sub '拡張子除いたファイル名でシート作成 pos = InStrRev(varFileName, "\") sname = Mid(varFileName, pos + 1) 'フルパスからファイル名抽出 pos = InStrRev(sname, ".") '最後の.位置を抽出 sname = Mid(sname, 1, pos - 1) 'ファイル名から拡張子除去 '本流ブックに新シートを作成し命名 Set WS1 = Worksheets.Add(After:=Worksheets(Worksheets.Count)) WS1.name = sname 'csvをtmpブックで開く(アクティブ周りの処理の関係で位置を注意) 'お形式で全項目文字で取得Ver Workbooks.OpenText Filename:=varFileName, _ DataType:=xlDelimited, comma:=True, _ fieldinfo:=Array( _ Array(1, 2), Array(2, 2)) end sub test.csv ---------------------- 管理番号 ,注文分類  "0000041836","受注" "0000041841","受注" "0000041842","受注"

  • エクセルマクロでファイルを開いて保存したいです。

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 このSheet1には中央にコマンドボタンが作成して有ります。 このボタンをクリックして以下の作業をマクロで行いたいです。 1.エクセル標準の「ファイルを開く」のメッセージボックスが開く 2.ここは使用者が作業をしてもらう   マイドキュメントだったり、マイネットワークだったり、   (ファイルの種類はCSVにする)   処理をしたいCSVファイルを探してもらい選択後、開くをクリック   例えば20100922.CSVを選択し開くをクリック 3.クリックと同時にそのファイルが展開されて、「編集」のエクセルファイルの   Sheetにシート名「集計」が作成されそのシートにCSVファイルの全内容がセルA1から貼り付く。   さらに登録してあるマクロモジュールで編集処理がされ   マクロを引き継がず、シート「集計」だけを   ファイル名は固定でそのファイル名の後ろに作成日(システム日付)を入れて   参照したCSVファイルの保管場所に保存する。   ファイル名例:売上20100923.xls(売上は固定) 4.エクセル「編集」のファイルからシート「集計」を削除する。 5.メッセージBOXで「編集終了」と表示 次回エクセルファイル「編集」を開くと、コマンドボタンだけである。 また作成された「売上20100923」はマクロがないから開くときに マクロのメッセージは出ない。というようにしたいです。 NO.2のファイルを選択する作業は作業者にしてもらいますが シート1のコマンドボタン1回を押すだけでNO.1~NO.5まで完結させたいです。  NO.3のマクロ処理はマクロの記録でモジュールができています。 このマクロの作成方法と、そのマクロが出来たら その文のどこに作成済みの処理文を入れればいいのかわかりません。 よろしくお願いします。 ここでつまづいています。この後この選択したファイルの全内容が シートの集計に展開されません。 Private Sub CommandButton1_Click() Call 集計 End Sub Sub 集計() FullPath = Application.GetOpenFilename("CSV,*.CSV") If FullPath <> "False" Then Sheets("Sheet1").Select Sheets.Add ActiveSheet.Name = "集計" With ActiveSheet.QueryTables.Add(Connection:="CSV;" & FullPath, Destination:=Range("A1"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

専門家に質問してみよう