• ベストアンサー
  • 困ってます

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、在庫表というシートを作成し読み込んだイファイルの情報を抽出するというのをやってみたいのですがどのようにアレンジすればよろしいでしょうか?

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数217
  • ありがとう数2

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

  • ベストアンサー
  • 回答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 追記 今後はエクセル専用のフォーラムを使ったほうがいいと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連する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

  • 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 ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

関連するQ&A

  • ExcelVBAを使用したCSVファイルのデータの取込みについて

    いろんなサイトの情報を見ながら作っていたのですがどうもうまくいかないのでアドバイスなど頂きたいです。 書き方もおかしいと思うのでこう記述するべきとかあったら教えてほしいです。 <やりたいこと> ダイアログボックスより取り込みたいcsvを選択 選択したファイルのパスを一度テキストボックスに書きだす。 新規シートを作成してシート名を変更して 先ほどテキストボックスに書きだした情報を元に CSVファイルのデータを新規作成したシートにコピーを張り付ける 呼び出したCSVファイルを閉じる といったようにしたいのです。 できたら欲しい情報の入った列だけとりだしたかったのですが・・・。 現状記述してあるのは下記になります。 これだととりあえずコピーできてるみたいですが、呼び出したCSVファイルが閉じないのです。 Private Sub CommandButton1_Click() Dim OpenFileName As Variant OpenFileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv") TextBox1.Value = OpenFileName End Sub Private Sub CommandButton2_Click() Worksheets.Add After:=Worksheets("Sheet1"), Count:=1 ActiveSheet.Name = "テスト" Workbooks.Open Filename:=TextBox1 ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("テスト").Range("A1") Workbooks(TextBox1).Close End Sub

  • VBAで複数のCSVの読み込み

    http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_050.html こちらのサイトの「古くからあるステートメントの方法」を参考にしてCSVファイルを選択してエクセルのシート上にCSVの情報を貼れたのですが、 例えばグローバル変数を2つ作り、別プロシージャから2つの違うCSVファイルパスをそれぞれ受け取り、↑の方法で1つのシートに2つのCSV情報を貼るにはどのようにすればよいですか? AファイルとBファイルがあったとしてシートの中身を A A A B B B のように横につなげるようにしたいです。

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

    エクセルマクロでファイルを開いて保存したいです。 エクセルファイルでファイル名「編集」という物を開きます。 この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"))   マクロの記録で作成したマクロ   シート"集計"をマクロを引きつかずファイル名売上&システム日付で保存   シート"集計"を削除する

  • CSVファイルのエクセル取込(VBA)で小数三位が消える!?

    エクセルにCSVファイルから読み取りをするVBAで下記のように記述しています。 Sub CSV読取り Dim FName As Variant FName = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv") Open FName For Input As #1 For i = 1 To 400 Input #1, Columni ThisWorkbook.Sheets("CSV取得").Cells(i, "E").Value = Columni Next i Close #1 End Sub これでほとんどのデータ(数値や文字列の400件)をうまく読み取るのですが、どういう訳かデータが小数点以下第三位まである数値の場合、エクセルに取り込まれた段階で小数点以下第二位までに四捨五入されてしまうようです。 そのうえ、エクセルのセルの表示形式がそこだけ通貨(¥マーク付き)になっています。 なぜでしょうか? またどうしたら正しく小数3位まで読み取れるのでしょうか? CSVファイルをエクセル単純にエクセルで開けばちゃんと小数三位まであるのですが、データが横一列にカンマ区切り400件あるので256列しかないエクセルではすべてとりこめません。(だから上記のマクロで縦に変換してとりこんでいるのですが) 非常に困っています。

  • エクセルVBA ブック間のコピー

    選択したテキストファイルをエクセルで開いたコピーし、 もう一つ開いたエクセルファイルにペーストするというマクロをVBAで 作成していますが、つまずいてしまいました。 ----------------------------------- Dim wb1 As String Dim wb2 As String Sub Opentxt() wb1 = Application.GetOpenFilename("テキストファイル,*.txt") If wb1 <> "False" Then Workbooks.OpenText Filename:=wb1, DataType:=xlDelimited, comma:=True End If End Sub Sub Copy() Dim LastRow As Long wb2 = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If wb2 <> "False" Then Workbooks.Open wb2 LastRow = wb2.Sheets("一覧表").Range("A" & Rows.Count). End(xlUp).Row wb2.Sheets("一覧表").Range("A5:A" & lastRow).Copy _ wb1.Sheets("Sheet1).Range("B33") End If End Sub ----------------------------------- Opentxtの方は問題ないですが、Copyの方を実行すると wb1とwb2で引っかかって「コンパイルエラー/ 修飾子が不正です」と 表示されて、エラーになってしまいます。 この場合変数の型などがおかしいのでしょうか? excel2007を使用しています。 よろしくお願いします。

  • 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 -------------------------------------------------------------

  • エクセルVBAでマスターキーを作りたい

    こんなことが可能かどうかもよくわからないのですが。。 色んなエクセルファイルやワードファイルにパスワードをかけてて 色んな組み合わせで使っているのでややこしいので マスターキー的なものを作りたいと思っています。 ファイル選択ダイアログからファイルを選択して A列の読み取りパスワード、および同じ行のC列の書き込みパスワードを 適用してファイルを開くプログラムを作りたいのです。 行2の組み合わせで開かなければ行3の組み合わせを適用。それが無理なら行4。 ファイルが開けるまで順に下の行のものを適用するものです。 初心者なので色んなサイトで見たものをツギハギしてみてるのですが、 まずパスワードが違った時にエラーで止まってしまうし、 そもそもパス付Word文書をExcelから開けるのかもわからないのですが もし可能なら、拡張子を判断してどうやってワードかエクセルの どちらかを開かせるのか、そしてどうループさせればいいのか。。 行き詰っています。ご教授いただけると嬉しいです。 何卒よろしくお願いいたします。 Dim OPFileName As Variant OPFileName = _ Application.GetOpenFilename( _ FileFilter:="すべてのファイル(*.*),*.*" & _ ",エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" & _ ",ワードファイル(*.doc),*.doc" _ , FilterIndex:=1 _ , Title:="ファイルを選択" _ , MultiSelect:=False _ ) extension = Mid(OPFileName, pointp + 1) x = 2 If OPFileName <> False Then If extension = xls Or csv Then Workbooks.Open filename:=OPFileName, password:=Cells(x, 1).Value, WriteResPassword:=Cells(x, 3).Value, IgnoreReadOnlyRecommended:=True End If End If

  • Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙

    Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙動についてです。 マクロで次のような記述をしています。 Sub tekitou() Dim vntFileName As Variant vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="ファイルを開く" _ , MultiSelect:=False _ ) If vntFileName <> "False" Then Workbooks.Open Filename:=vntFileName End If うんたらかんたら End Sub このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。 キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?

  • Excel VBAについて

    Excelのシートにコマンドボタンを配置して、そのコマンドボタンをクリックすると「ファイルを開く」のダイアログボックスを表示したいと思っています。 そのとき、デフォルトでファイルの場所は「D:\Test」にしたいのですが、どうしたらよいのでしょうか。 ユーザは、ファイルの場所を探さずに、コマンドボタンをクリックしたら開きたいファイル名を指定するだけでいいようにしたいのですが。 下記では、ファイルを開くダイアログは表示されるのですが、ファイルの場所を毎回探さなくてはいけません。 どなたかご教授下さい。 Private Sub Cmd_ファイル選択_Click() Dim FileName As Variant FileName=Application.GetOpenFileName("Microsoft Excelブック,*.xls") Workbooks.Open OpenFileName End Sub

  • Excel2007で2003のVBAが実行時エラー1004

    普段は事務員の非プログラマーです。 Excel2000,2003で動いていたマクロを2007でも動くようにしてほしいと言われて頑張っているのですが、どうすればいいのか見当がつきません(*_*) どうぞ知識者の皆様のお知恵をお貸しください。 Excel2003で読み取りのみのVBAのファイルで、ボタンを押すとマクロが実行され、別CSVファイルを指定しVBAのファイルの別シートとして読み込みます。次に別txtファイルを指定してVBAのファイルの別シートに読み込みます。最後にその2つのシートの必要な個所のみ結合して、新しいcsvファイルとして保存する処理をしています。 Excel2007でこれを実行すると、csvファイルを読み込むときに次のようなエラーがでます。 「実行時エラー'1004':移動先またはコピー先のブックの行列数が元のブックの行列数よりも少ないため、シートを移動先またはコピー先のブックに挿入できません。データを別のブックに移動またはコピーするには、データを選択して、[コピー]コマンドと[貼り付け]コマンドを使用して移動先またはコピー先のブックのシートに挿入してください。 マクロの中身はこのような感じです。 エラーは最終行の「ActiveSheet~」ででています。 Sub openExcel() 'Step1 open excel Dim ExcelFileOpen As String ExcelFileOpen = Application.GetOpenFilename(FileFilter:="Excel Files,*.csv") If ExcelFileOpen <> "False" Then Workbooks.OpenText Filename:=ExcelFileOpen ActiveSheet.Move After:=Workbooks(ThisWorkbook.Name).Sheets(1) どうぞよろしくお願いいたします(_ _)

専門家に質問してみよう