• ベストアンサー

エクセルのマクロでCSVからxlsx形式にしてから

A.csvというファイルをB.xlsx形式に変換後、列が10、行はランダム行あるファイルにフィルタをかけて 並び替えるような一連の動作ができるマクロはどのように作成すればよろしいでしょうか。 ご教示いただけますようお願いいたします。

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

「VBA」ではありませんので、無視して頂いて結構です(「VBScript」による回答ですので、「Windows限定」です)。 このプログラムの特徴は、「csv」ファイルを1つだけ、プログラムファイルにドラッグ&ドロップすると、「csv」ファイルと同じフォルダ内に同じ名前(「abc.csv」→「abc.xlsx」)で、結果ファイルを保存します。 1行目が項目行で、列「A」について「小さい順にソート」し、列「D」の「みかん」で、「オートフィルタ」をかけています。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。 できたプログラムファイル(「~.vbs」ファイル)に、これから処理したい、「csv」ファイルを1つだけ、ドラッグ&ドロップするだけです。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim bk, c, ex, f, n, r, sh, so, wa Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If f = Left(wa(0), InStrRev(wa(0), "\")) n = so.GetBaseName(wa(0)) Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = False Set bk = ex.Workbooks.Open(wa(0)) Set sh = bk.Worksheets(1) c = sh.Cells(1, sh.Columns.Count).End(-4159).Column r = sh.Cells(sh.Rows.Count, 1).End(-4162).Row sh.Range(sh.Cells(2, 1), sh.Cells(r, c)).Sort sh.Range("A2") sh.Range(sh.Cells(1, 1), sh.Cells(r, c)).AutoFilter 4, "みかん" bk.SaveAs f & n & ".xlsx", 51 bk.Close ex.Quit Set bk = Nothing Set ex = Nothing Set wa = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、個数や拡張子を調べ、想定外なら、メッセージを表示して、プログラムそのものを終了してしまいます。 f = Left(wa(0), InStrRev(wa(0), "\")) ドラッグ&ドロップされたファイルの存在するフォルダを取得。 n = so.GetBaseName(wa(0)) ドラッグ&ドロップされたファイルのベースネーム(「abc.csv」→「abc」)を取得。 Set ex = CreateObject("Excel.Application") エクセルを扱えるようにしています。 ex.Application.DisplayAlerts = False ex.Visible = False 「上書きしますか」などと聞いてこないように、また、エクセルを表示しません。 Set bk = ex.Workbooks.Open(wa(0)) ドラッグ&ドロップされたファイルをエクセルのファイルとして開いています。 Set sh = bk.Worksheets(1) 一番左端のシートを「sh」にセット。 c = sh.Cells(1, sh.Columns.Count).End(-4159).Column 1行目に関して、最終列を取得。 r = sh.Cells(sh.Rows.Count, 1).End(-4162).Row 列「A」に関して、最終行を取得。 sh.Range(sh.Cells(2, 1), sh.Cells(r, c)).Sort sh.Range("A2") 1行目は項目行なので、2行目以降を、列「A」についてソート。 sh.Range(sh.Cells(1, 1), sh.Cells(r, c)).AutoFilter 4, "みかん" 4列目(=列「D」)の「みかん」で、オートフィルタをかけています。 bk.SaveAs f & n & ".xlsx", 51 「xlsx」形式で保存しています。 bk.Close 閉じています。 ex.Quit エクセルそのものを終了しています。 Set bk = Nothing Set ex = Nothing Set wa = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。

splunktaro
質問者

お礼

回答ありがとうございます。 今からじっくり見てみます。

その他の回答 (1)

回答No.2

> どのように作成すれば とのことですから、作り方をざっと。 マクロの記録機能を動かして、 ・A.csv 開く ・B.xlsx で名前を付けて保存する ・A:J列を選択して、オートフィルタ起動 ・A:J列を選択して、ソート処理 以上を記録してやり、少し手を加えてやると良いですよ。 ま、処理の順番がどうなのかと個人的には思うのですが、 開いてソートしてフィルタかけて保存、くらい手間でもないでしょう。 マクロにこだわる理由が欲しいところです。

splunktaro
質問者

お礼

上記のやり方は既にやっていますが、これではできないことも確認しています。

関連するQ&A

  • csvをエクセルに取り組みたい。初心者

    csvをエクセルに自動マクロ機能で取り込むように設定しました。 12ケタの数字を取り込みたいが9.73E+11となってしまいます。 aのフォルダにa.csv と b.xlsxがあります。 a.csvにダウンロードしたものをb.xlsxに読み込みたいです。 12行のデーターの中から2個のデーターだけを読み込みたいのですが 12ケタの数字もそのままの数字で読み込むことは不可能なのでしょうか? 今まではcsvの表示形式を数字に変換してからブック形式に保存。 そして、テキストにデーターを張り付けてデーターを使用していました。 ブックからデーターをコピーして貼り付けると数字が半角になっていないためできませんでした。 この一連の作業を自動でできたらうれしいかなと思いましたが無理でしょうか? もし、わかる方がおられましたら教えてください。 よろしくお願いします。

  • エクセルファイルの1レコード(1行)を1csvファイルへ変換マクロ

    エクセルファイルの1レコード(1行)を1csvファイルへ変換し、エクセルファイルにあるレコード数分だけあるフォルダに自動作成するマクロを教えて下さい。 因みに、csvファイル名は、エクセルデータの『a列.csv』となるようにしたいです。 【例】 本日2007/11/13 ○○.xls A列 B列 C列 111 1 356 13 1 2 ・ ・ ・ ・ ・ ・ 111.CSV "2007/11/13(火)","1","356,"","","" 13.CSV "2007/11/13(火)","1","2,"","","" 変換後のcsvの中身は 1列目に、本日の日付 2列目に、1 3列目に、変換元のエクセルファイルの3列目 4、5、6列目に空白 という形式です。 どなたかお分かりになるかた、ご教授願います。

  • このようなエクセルマクロを組みたいのですが...

    下記のようなマクロを組みたいと思っていますが、 知見がほとんどないので教えていただきたいと思います。 "csv"というフォルダにランダムなファイル名でcsv形式のファイルが100以上保存されています。 目的は、 そのcsvファイル内の一部のデータをひとつのファイル(ファイル名を"まとめ"とします)に移して並べたいと思います。 <前提> "csv"フォルダと"まとめ"ファイルは既に開かれている状態とします。 "まとめ"ファイルを開いた状態で、マクロを走らせると、 (1)csvファイルが開く (2)セルA1とB1をコピー (3)"まとめ"ファイルのA1、A2へ貼り付け(行と列を変更) (4)csvファイルを閉じる (5)次のcsvファイルが開く (6)セルA1とB1をコピー (7)"まとめ"ファイルのB1、B2へ貼り付け(行と列を変更) (8)csvファイルを閉じる 以降、"csv"フォルダの中身をすべて処理できるまで繰り返し。 という風に考えていますが、 当方あまり知識が無くアレンジが難しいためできる限りシンプルにと考えています。 そのため、もしこうした方が...等あればアドバイスいただけるとありがたいです。 すみませんがよろしくお願いいたします。

  • エクセル CSV形式ののマクロについて

    販売管理ソフトの売上データーをエクセルにエクスポートすると、 常に同じ場所にCSV形式で保存されるのですが、売上データーを使うのに 必要の無い列があったり 表が大きすぎるので 見やすい形にするのに 列の非表示や列幅を変更したりするマクロを記録したのですが、マクロが見つかりません。 CSV形式では 記録したマクロは使えないのでしょうか? また、このマクロの使用によって 社内の他のパソコン(30台位)に影響が出ないように出来ますでしょうか? と言うのも、 私自身マクロについてあまり詳しく無いのですが、弊社には私以上の知識を持った人が居ないため、以前同じ様なマクロをエクセルファイルで作成したら 他のパソコンにも伝染し「ウィルスに感染しています」のメッセージがエクセルを開くたびに出てきて 大ブーイングを浴びてしまいました。 そのときは おそらく会社としてウィルス対策をしていなかったのかも知れませんが 現在はウィルル対策もしているはずで、マクロの付いたエクセルファイルを使っている人もいる様なので(専務のファイルにマクロボタンの様な物を見た事があるので)大丈夫だとは思うのですが、心配です。 素人の説明で解り難いかもしれませんが 宜しくお願いします。

  • csv形式のテキストファイルをexcelでCSV化するマクロについて

    今、ひとつのフォルダに大量にCSV形式で保存されているテキストファイルを excelのマクロを使って、ひとつのexcelにCSV形式(.xls)で保存するものを作成している のですが、今までマクロを使ったことがないため、まったく歯が立ちません。 もう少し詳しく書くと、テキストファイルの中身は、 01,54521,18:01:02,110230 というようになってます。 これを、excelのマクロを使い、カンマ区切りで取り込むような感じです。 すみませんが、回答お願いいたします。

  • Excel マクロで.xlsx形式で保存したい

    マクロでCSVファイルを開き加工を行った後、名前を付けて保存しようとしていますが(.xls) では保存できるのですが、(.xlsx)ではエラー1004が出て保存できません。内容としては「この拡張子は、選択したファイル形式には使用できません。[ファイル名]ボックスでファイル拡張子を変更するか、[ファイルの種類]ボックスで別のファイル形式を選択してください」と記述されています。 ご助言の程、宜しくお願い致します。 Dim initPath As String Dim saveFilePath As Variant initPath = "\\fileserver\ANT\IT\91_Users\700_SUBJECT\その他業務\Excel\" 'saveFilePath = Application.GetSaveAsFilename(initPath, "Excel File (*.xlsx),*.xlsx") MsgBox saveFilePath If Not (saveFilePath = "False") Then ThisWorkbook.SaveAs saveFilePath   '←ここでエラーが発生しています。 Else MsgBox "キャンセルされました。" Exit Sub End If

  • エクセルのxls形式からxlsx形式の一括変換

    エクセルのxls形式からxlsx形式の一括変換、その逆もできますか?  いつもお世話になっております。  職場でのパソコンがOffice2003、2007、2010と混在しており、保存されているファイルも拡張子が「*.xls」と「*.xlsx」が混在しています。  ファイルを開いて、「*.xls」形式を「*.xlsx」形式に形式を選択し、保存しなおししたり、その逆もすることが多いのですが、多くの手間がかかります。(例えば、20個程度のファイルなら20回)  複数のファイルを一括して変換することはできませんか。

  • エクセルのマクロについての質問です。

    ファイルA.xls __A__B__C 1_______1 2_______5 3_______7 4_______4 5_______5 6_______6 ファイルB.csv __A__B__C 1_1__5 2_5__6 3_7__7 ファイルC.csv __A__B__C 1_6__5 2_7__8 3_6__8 のような3つのファイルがあったとして ファイルA.xlsからマクロを実行して __A__B__C 1_1__5__1 2_5__6__5 3_7__7__7 4_6__5__4 5_7__8__5 6_6__8__6 ファイルB.csvをファイルA.xlsのA列とB列に ファイルC.csvをその下の最終行に貼り付けたいと思うのですが どのようにすればいいのでしょうか? 注意点としては、 (1)今は例として3行、3行の6行ですが、実際は1000行以上あり 毎回行数は変わります。 (2)ファイルA.xlsのC列には実際は関数が入っていて、 ファイルB.csvとファイルC.csvを張り付けた情報を計算して表示する ようになっています。

  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。

  • Excel マクロについて

    Excelで作成したシートを次の手順で保存できるようなマクロを作成したいのですがどうしたらいいでしょうか?  1)あらかじめ所定のフォーマットを用意しユーザーが入力できるようにする。  2)ユーザがボタンを押すとそのシートの上2行(1行、2行)と左1列(A列)が削除され、    (タイトル行なのでCSVにする際に不要な為。)  3)「名前を付けて保存」のダイアログボックスが表示し  4)保存先のフォルダが「X:\DATA\」となるようにし  5)ファイル名がその日付(yyyymmdd.csv)、CSV形式 (例:20031125.csv)となるようにし、    (ユーザーにても変更の可能性もあるので固定にはしない)  6)ユーザーが保存先、ファイル名等を確認語保存する。  7)保存後は元のEXCELシート(CSV形式でない)で開いた状態で終了とする。 自分でも作成したのですが、本当にこれでいいのかも疑問でご意見を教えて下さい。 特に、7)のところがうまくいかず、6)での保存後どうしても開いているファイルの状態が CSV状態になります。 以上、ご存知の方教えて下さい。  

専門家に質問してみよう