プロが教える店舗&オフィスのセキュリティ対策術

永遠のVBA初心者です。

会社で使用しているソフトのデータをcsvファイル形式でエクセルに落として毎月決まった加工をしています。
現在は一旦落としてからVBAを仕込んだ専用のエクセルシートにコピペしてマクロを使って処理しています。

出来たらソフトからcsvファイルでダウンロードしたエクセルでそのままVBAを動かすことはできないでしょうか?
VBAをコピペしてエクセルをマクロ有効ファイルで一旦保存して・・・と考えたのですが、csv形式のエクセルで直接動かせれば非常に便利だと思いまして。

上記がそのまま実現できなくても、他に簡便な方法あればご教示お願いします。

A 回答 (7件)

No2です



>>パーソナルマクロブックに当該マクロを登録・・・
>の具体的な手順をご教示いただければありがたいのですが。。。
デフォルトではパーソナルブックは作成されていないので、まずは作成する必要があります。
ディレクトリはユーザのAppData下部のMicrosoft\Excel内になりますが、作成の仕方は以下のページをご覧ください。
◇個人用マクロブック(PERSONAL.XLSB)の作成方法
https://vbabeginner.net/how-to-create-a-personal …

一旦、作成しておけば、以降はVBEの画面を表示すると、プロジェクトエクスプローラの欄に「PERSONAL.XLSB」が表示されるようになり、追加の書き込みや編集も可能になります。
こちらのブックにマクロを登録しておけば、エクセルを開いた時に常に参照可能になりますので、CSVファイルであっても、「エクセル」に読み込んだ後であれば参照することができます。
(すでにエクセルデータになっているので・・)
No2にも書きましたし、No4様も言及なさっていますが、CSVデータはエクセルとは別物です。
実際の処理内容がわかりませんけれど、混同なさらないようにしておいた方が、後々のためにも宜しいかと思います。


ショートカットキーの登録は、上記のマクロ作成時にも可能ですが、すでに存在しているマクロに後から割り当てることもできます。
リボンの「開発」-「マクロ」で表示されるダイアログで目的のマクロを選択し、「オプション」からショートカットキーを割り当てることが可能です。


一方で、パーソナルブックはそのPC内のユーザディレクトリ内に保存されますので、複数の人が同じ作業をするような場合、あるいは、特定の人であってもその時によって使用するPCが異なるというような場合には、別の方法の方がよさそうに思います。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
何度もご丁寧なご回答ありがとうございます。

#No2のご回答のあと自分でもご提案の「パーソナルマクロブック」を調べてみてご提案のページを見つけて土日に自宅で少し勉強しました。
私のやりたかったことはこれでした。

但し、今回の要求に関してはQchan1962さんの言われる通り、マクロを仕込んだエクセルの空シートにCSVのデータを貼り付けてマクロで処理するのが当方のレベルでは一番、簡単&確実な方法だと思います。
表が大きいのでデータをコピペではなく、マクロをコピペ?という発想になっていました。

今回教えて頂いた「個人用マクロBook」は非常に参考になりましたので今後使わせていただきます。

お礼日時:2022/05/02 11:05

csvファイルをダブルクリックしてエクセルで開く


 ファイル 名前を付けて保存 ファイルの種類をエクセルブック(*.xlsx)  保存
  このファイルを閉じる
   このファイルのアイコンをダブルクリック
    表示 マクロ マクロ名 macro 作成
     マクロ 編集


Sub macro()
ここにマクロをコピーする

End sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

参考になりました。

お礼日時:2022/05/02 11:05

#4の回答内容の訂正です。


#3様ではなく#2fujillin様 です
大変失礼いたしました。
    • good
    • 0

こんにちは


横から失礼します
>csv形式のエクセルで直接動かせれば非常に便利だと思いまして
CSV形式のデータをExcelに関連付けて使っているのだと理解しました
>直接動すと便利・・うう~ん

>出来たらソフトからcsvファイルでダウンロードしたエクセルでそのままVBAを動かすことはできないでしょうか?
すでに回答にあるように出来ますが、1工程を除けば、これって
VBAが書かれたExcelファイルを用意し、シートにCSVを抽出
VBAでデーター加工
シートのデータをCSV出力
と同じ事?のような・・クリックでCSVを開いて実行するプロセスで無いけれど・・
手作業で処理している事をVBAで処理すれば、各ファイルにVBAは不要でなないかと思います。

CSVデータはあくまでCSVデータなので・・

クリックでCSVを開いてそのまま実行する方法は#3様が提案?している方法で出来ると思いますが
実行条件(対象のみを特定する)を自身で設定する必要があると思います。(かなり重要)
③④の詳細、コードを提示して頂ければ書くことは可能ですが、ご自身で改修できるかな?

余:CSVファイルをExcelに関連付けるのは、諸事情であまりお勧めできないですね。 
多分、多くのCSVを扱う方たちは、Excelに関連付けをやめていると思います。
ただ、Excelに関連付けをやめていても、下記のコードは開くプログラムをExcelに選択して開けばOK

PERSONAL.XLSB を使用する方法(初めて使う時のざっくり手順)
新規ブックを含む適当なExcelブックを開きます
マクロの自動記録を実行、実行時、マクロの保存先 を個人用マクロ ブックに変更します
どこかセルを選択、記録終了
VBEを開くとPERSONAL.XLSBがプロジェクトエクスプローラーに作成されているので
標準モジュールに記録されたマクロを削除、(必要ないと思いますので)

PERSONAL.XLSBのThisWorkbookモジュールに

Option Explicit
Dim WithEvents xlApp As Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
Dim fso As Object
Dim ext As String
Set fso = CreateObject("Scripting.FileSystemObject")
ext = fso.GetExtensionName(Wb.Path & "\" & Wb.Name)
If Not Wb Is ThisWorkbook And LCase(ext) = "csv" Then
MsgBox Wb.Name & "が開きました"
Wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).Range("A1")
ThisWorkbook.Worksheets(1).Copy
ThisWorkbook.Worksheets(1).Cells.ClearContents
End If
Set fso = Nothing
End Sub

開いているExcelを保存して閉じます。(PERSONALも保存)

CSVファイルを開くと上記コードが実行されます。(正確にはExcelを開くと)

掲示コードの処理内容
Excel(他のExcel関連ファイル)が開く時に
開いたブックに対して(この場合csv)
If Not Wb Is ThisWorkbook And LCase(ext) = "csv" Then 
If 内の処理を実行します

暫定で行っている処理
開いたファイル名をメッセージ
開いたブックの1シートをPERSONAL.XLSB 1シートにコピー
コピーしたシートを新規ブックで出力
PERSONAL.XLSB 1シートをClearContents
この方法だとCSVを閉じる時、保存を求めるメッセージが出力されますが
シートを使わない方法にするか、VBAで元CSVを閉じれば、回避できます。

ざっくりしたコードなのでまとめていませんが、
この処理の中に③と④を組み込み元ファイルは保存せずに
新規ファイルはCSVファイルとして所定場所に保存すればよいと思います

PERSONAL.XLSBはExcelを扱う時にすべてのファイルに対して
付きまとうので、私は使いません。

実験してみて良く無ければ、PERSONAL.XLSBを削除してください

PERSONAL.XLSBの削除方法
https://lilia-study.com/excel/excel-vba/macro/ko …
    • good
    • 0
この回答へのお礼

お礼が遅くなりすみませんでした。
土日に各種ご回答を検討してみた結果、やはりおっしゃる通り知らないVBAを組むよりはご提案の方法が確実だと思いました。
csvファイルとエクセルファイルの保存方法を工夫すれば済むことでした。

ご丁寧なご回答ありがとうございました。
拙速な質問でお手数をおかけし申し訳ありませんでした。

>VBAが書かれたExcelファイルを用意し、シートにCSVを抽出
>VBAでデーター加工
>シートのデータをCSV出力
>と同じ事?

お礼日時:2022/05/02 10:48

「エクセルに落とす」「ダウンロードしたエクセル」「csv形式のエクセル」というのがちょっとわかりづらいので、ちょっと整理しましょう。



1.あるソフトウェアからCSV形式にてデータをエクスポート(書き出し)

2. 1のCSVファイルをエクセルで開き、その内容を、別の(処理専用の)エクセルファイルの特定のシートにコピー&ペースト
(コピー元のCSVファイルは保存せずに閉じる)

3.専用シート上にてマクロを実行

という流れでよいのでしょうか?
最終的に必要なのは特定の処理がなされたCSVファイルですか?
いずれにせよ、やりたいことの詳細がわからないと具体例が出しにくいかと思います。


一連の業務を簡便化するにあたって、最もアプローチしやすいのはVBSだと思います。要はそのまんまの自動化です。

>ソフトからcsvファイルでダウンロードしたエクセルでそのままVBAを動かすことはできないでしょうか?

エクセル(アプリケーション)にVBA(モジュール)やマクロを置いてあるならできますよ。VBSと組み合わせれば、バックグラウンドで処理(エクセルアプリを起動するなども自動)も可能です。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。

やりたいことの詳細は、
(1) 業務ソフトで「CSVファイルに保存」を指定し、所定のフォルダに所定の名前でCSVファイルを作成する。
(2) 集計処理用のVBAが仕込まれたExcelを開く
(3)CSVファイルのシート全体をコピーして(2)のエクセルシートに張り付ける。
(3) エクセルでマクロの記録で作ったVBAを実行する
(4)所定のフォルダに所定の名前で(Excelファイルを)保存する。

改良したいのは、
(1)のCSVファイルで(2)以下の作業が実行できすようにしたいのです。

お礼日時:2022/04/28 13:32

こんにちは



そのCSVファイルは、ソフトから出力されているものではないのですか?
もしそうなら、作成時に何らかの加工をすることは難しいのではないでしょうか?
(そもそもCSVは単なるテキストファイルなので、マクロなど仕込めないはず)

>VBAを仕込んだ専用のエクセルシートにコピペしてマクロを使って処理しています。
その作業をVBAで行うようにすれば良いのでは?
というか、マクロそのものをコピペしなくても、マクロからそのCSVファイルを処理するようにしておけば良いだけの話と思います。

あるいは、パーソナルマクロブックに当該マクロを登録しておけば、CSVファイルをエクセルで開いた時点でそのまま実行することが可能です。
ショートカットキーを登録するなどしておけば、そのキーを押すだけで良いはず。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
恐らく当方の屋いR太鼓とは下記のご提案の通りだと思います。

>パーソナルマクロブックに当該マクロを登録しておけば、CSVファイルをエクセルで開いた時点でそのまま実行することが可能です。

>パーソナルマクロブックに当該マクロを登録・・・
の具体的な手順をご教示いただければありがたいのですが。。。

>ショートカットキーを登録するなどしておけば、そのキーを押すだけで良いはず。→ここまで希望通りです。

一応処理前を確認して処理を開始したいので。

お礼日時:2022/04/28 13:30

まずは上流の業務ソフトを含む操作手順を明確にすることでしょう。


例えば・・・

(1) 業務ソフトで「CSVファイルに保存」を指定し、所定のフォルダに所定の名前でCSVファイルを作成する。
(2) 集計処理(?)用のExcelテンプレートファイルを開く
 ※ 開かれると自動的にマクロが起動され、所定のフォルダにある所定の名前のCSVファイルを読み込んで処理が実行される
(3) テンプレートファイルが開かれたら集計処理(?)が終了しているので「名前を付けて保存」を選択し、所定のフォルダに所定の名前で(Excelファイルを)保存する。

なお、テンプレートファイルというのは当方の勝手な想像です。普通のExcelファイルでもよいでしょう。その場合、※部分は自動的に動作するのではなく、あるシート上に設けたボタンをクリックするのでもよいでしょう。

とにかく具体的な操作手順・・・作業の流れを明文化することだと思います。

参考まで。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございます。
今の作業は、ほぼご推察の通りです。

(1) 業務ソフトで「CSVファイルに保存」を指定し、所定のフォルダに所定の名前でCSVファイルを作成する。
(2) 集計処理用のVBAが仕込まれたExcelを開く
(3)CSVファイルのシート全体をコピーして(2)のエクセルシートに張り付ける。
(3) エクセルでマクロの記録で作ったVBAを実行する
(4)所定のフォルダに所定の名前で(Excelファイルを)保存する。

で改良したいのは、
(1)のCSVファイルで(2)以下の作業が実行できすようにしたいのです。

お礼日時:2022/04/28 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!