• 締切済み

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

みんなの回答

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.2

こんにちは。 > ※改良したいポイント の方で書いてみました。 動作確認していませんが、作成の参考にしてみてください。  ○○.Select  Selection.△△ のような処理は、ほとんどの場合  ○○.△△ のようにつないで記述できます。 記録したマクロを編集する際、 つないでみて動作を確認しながら進めるといいと思います。 Sub Sample()   '同じフォルダー内のTOOL.CSVを開いて   With Workbooks.Open(Filename:=ThisWorkbook.Path & "\TOOL.CSV")     With .Worksheets(1)       'B14からC列のデータの入っている最終行を         'このブックの"CSV Road"のB12にコピーする       .Range("B14", .Range("C" & .Rows.Count).End(xlUp)).Copy _         Destination:=ThisWorkbook.Worksheets("CSV Road").Range("B12")     End With     '"TOOL.CSV"を閉じる     .Close   End With End Sub

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 疑問点が3つありますので、それを織り交ぜながら回答いたします。 【疑問点1】 CSV_SheetName = Worksheets(1).Name Sheets(CSV_SheetName).Move after:=Workbooks(Myname).Sheets(Sheets.Count + 1) とお書きですが、これですと「Sheets(CSV_SheetName)」のところは、「Sheets("(TOOL)")」ではなくて、「Sheets("TOOL")」ですよね。 【回答1】 >(1)同じフォルダー内のTOOL.CSVを >フォルダーを開かず直接commandButton1でSheetに追加する。 Myname = ActiveWorkbook.Name と同様に Mypath = ActiveWorkbook.Path としておけば、 Workbooks.Open Mypath & "\TOOL.CSV" で「同じフォルダー内のTOOL.CSVを」開くことができます。 【疑問点2】 Sheets(CSV_SheetName).Move after:=Workbooks(Myname).Sheets(Sheets.Count + 1) の部分ですが、「Sheets.Count + 1」とすると、存在するシート数以上のインデックスになりますので「+ 1」は不要ですね。 Sheets("TOOL").Move after:=Workbooks(Myname).Sheets(Sheets.Count) でよいと存じます。 【回答2】 >(2)Sheet2にコピーされたデーターから(B14:C14)を選択し最終行までコピーし >Sheet1の(B12)に数値のみを貼り付ける。 >commandButton3はなくしたいと思ってます Private Sub CommandButton3_Click() の内容をそのまま Private Sub CommandButton1_Click() の最後に貼り付ければ済むことかと存じます。  ただ、コピー元の「Sheets("TOOL")」の内容は、元々CSVファイルですから「テキスト」ですので、 Sheets("TOOL").Range("B14:C65536").Copy (Sheets("CSV Road").Range("B12")) で済みます。 【疑問点3】 Sheets("TOOL").Move after:=Workbooks(Myname).Sheets(Sheets.Count) して、そのブックを保存し、さらに Private Sub CommandButton1_Click() した場合、「Sheets("TOOL")」の部分が「Sheets("TOOL (2)")」のように枝番付きみたいになっていきますが、「.Move」せずに開くだけ開いてそのままコピーという訳にはいかないのでしょうか?

関連するQ&A

専門家に質問してみよう