• ベストアンサー

Excelのマクロで、CSVファイルの内容を性格にコピーさせたい

マクロで、選択したCSVファイルの内容をExcelにコピーさせようとしています。(csvFileName = CSVファイルの名前、MyFileName = コピー先のExcelファイル名) Workbooks(csvFileName).Activate Sheets(1).Select Sheets(1).Copy after:=Workbooks(MyFileName).Sheets(1) 以上のような物なのですが、ここで困った事が起きました。 CSVの中に、1-1などと書かれているセルがあるのですが、これをExcelで開くと自動的に1月1日となってしまいます。 1-1という文字列のまま、コピーさせたいのですが、何か方法はありますでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >Workbooks(csvFileName).Activate ←ここの時点で既に、1月1日になっているのでは? もう、CSVを開いた時には、変わっているはずですから、その前に処理するとか、テキスト・インポートで、QueryTables を使えばよいと思います。このレベルは、記録マクロで、記録できます。   With ActiveSheet.QueryTables.Add(Connection:= _     "TEXT;" & csvFileName, Destination:=Range("A1"))     .TextFileParseType = xlDelimited     'ここに細かい仕様を指定します。   End With

ikazuti
質問者

お礼

なるほど、こういう方法もあるのですね。 Excelも表計算ソフトなら、そのまま変な解釈をせずにそのまま読み込んで欲しいのですが…… ご回答、有り難うございます。

その他の回答 (3)

回答No.3

Sheets("Sheet1").Select Cells.Select Selection.NumberFormatLocal = "@" でそのシート自体の書式設定で表示形式を「文字列」に変えてしまってはどうでしょか? 他の所で数値を使うのでしたら1-1が入るセルの行か列のみ文字列にかえるとか。

ikazuti
質問者

お礼

一カ所だけじゃないんで……なかなか難しいですね。 ご回答、有り難うございます。

  • Kurouto
  • ベストアンサー率28% (96/338)
回答No.2

コピーを実行する前に、「1-1」が入るセルもしくは行また列を Selection.NumberFormatLocal = "@" などを使って「文字列」として認識させればいいでしょうね。

ikazuti
質問者

お礼

開いた瞬間に、もうなんか変な解釈して表示されてるんですよね・・・ ご回答、有り難うございました。

回答No.1

セルを全選択し、セルの書式設定で表示形式を"文字列"としてから貼り付けると解決です。

ikazuti
質問者

お礼

ユーザーが、そういうスキルが一切無く(ファイルをダブルクリックするのが関の山)というのを想定してるので、なかなか難しい物が…… ご回答、有り難うございます。

関連するQ&A

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • マクロでエクセルシートのコピー

    マクロでシート1を最後尾に名前をつけてコピーしたいと思ってます。 つけたい名前は、シート2のあるセルにかいてあります。 私は下記のように書いたのですが、エラーになってしまいます。 Worksheets("Sheet2").Select newsheet = Cells(1, 1) Sheets("Sheet1").Select Sheets("Sheet1").Copy After:=Sheets(newsheet) どのようにすればシートをシート名をつけてコピーできますか? 教えてください。 エクセル97です。

  • 参照先のブックを開かずに内容をコピーしたい

    エクセルのマクロ初心者です。 いつもここで他の方のQ&Aを参考にしたり、自分で質問したりしてお世話になっています。 今回は、参照先のブックを開かずにその内容をコピーする方法についてお聞きしたいです。 現在、下記のようなマクロを組んでいます。 Workbooks.Open FileName:="BookA.xls" Sheets("Sheet1").Activate Range("B4:H4").Copy Windows("BookB.xls").Activate Sheets("Sheet2").Select Range("B1").Select Sheets("Sheet2").Paste Workbooks("BookA").Close Windows("BookB").Activate つまり、BookAのセルの一部分をコピーしてBookBのセルに貼り付けるという内容なんですが、コピー参照先のBookAを一度開いてコピーしてからBookBに行って貼付け、さらにBookAを閉じた後でBookBに再び戻る、という動作になっているため、画面がパラパラと切り替わる時間があって少々うっとおしいのです。 BookAをいちいち開かずに内容をコピーする方法があると思うのですが、どのような構文を使えばいいでしょうか? ご回答よろしくお願いします。

  • Excelのマクロを使ってのオートフィル

    Excelのマクロを使ってのオートフィルについて教えて下さい。 類似の質問があったのですが、決まったセルからのものが多くわかりませんでした。 マクロはまだ始めたばかりです。 やりたいことはExcelの2つのシートに別のcsvファイルの数字を入れることです。 ExcelのSheet1のD1セルに日付を表す数字が入っています。 Sheet2と3には2行目に月の日付がずらりと並んでいます。 1列目には記録番号が入っています。 それぞれのシートにSheet1のD1セルと同じ日付の列を見つけて、 その下の行から1列目の記録番号を元に検索したcsvファイルのデータを引っ張ってきたいのです。   Sheets("Sheet1").Select Cells(3, (Sheets("Sheet2").Range("D1")).Select と最初に入れるセルを探しても違う列に飛んでしまったりします。 又、下のセルまで数式もコピーできずに止まったままです。 VBAまでは手が出せずに悩んでいます。どうか教えて下さい。よろしくお願いします。

  • エクセル2000のマクロについて再び

    新しいブックを作りさらに他のブックで作成されているシートをコピーして移動するというマクロを作ります。この時、新しく作ったブックの名前がBook1にならないとその時点でマクロのエラーになりなってしまいますが、たまにBook2になってしまうときがあります。必ずBook1になると指定することはできないのでしょうか。 Sheets(Array("sheet1", "sheet2", "sheet3")).Select Sheets(Array("sheet1", "sheet2", "sheet3")).Copy →新しいシートを作成 Workbooks.Open Filename:="C:xxx\○○\△△.xls" Sheets.Copy after:=Workbooks("book1").Sheets(2) →ここで、Book1が存在しないとエラーになってしまう。 お願いします。

  • 値のみ貼りつけたい。

    値のみ貼りつけたい。 すみません。教えて頂いた内容でもう一つ追加で質問をさせてください。 マクロで別ファイルを二つ開いて、マクロファイルがWorkbooks(1)別ファイル二つがWorkbooks(2)、Workbooks(3)になります。Workbooks(2)のデーターをコピーしてWorkbooks(3)に値だけ貼りつけたいのですが、教えて頂けませんでしょうか。 Workbooks(2).Activate Sheets(1).Select Range("A1").Copy Workbooks(3).Activate Sheets(2).Select Range("B1:C1").Select ActiveSheet.Paste この部分を値のみ貼りつけたいのですが。 PasteSpecial xlPasteValuesをつけてもうまくいかないので、お願いします。

  • エクセル2007 マクロ CSVにコピー後日付がおかしくなった

    エクセル2007を使用しています CSVファイルを開き日付をコピーするマクロを作成しております ■問題 エクセル上2011/2/11という文字が、11/2/2011とCSVファイル上表示されてしまいます。 以下の対策をとってはいるのですがうまくいきません Workbooks.Open Filename:= _ "\\\\\\\\\\\\\.csv", Local:=False 他に対策はないでしょうか?

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

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

専門家に質問してみよう