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

VBE でワイルドカード的にファイルを指定したい

いつも拝見させていただいています。 VBE 初心者です。 ファイルを開くとき、ワイルドカードのような指定はできますか? 毎日アメリカのサーバからデータをDLする作業をしています。 データは自動的にテキスト(CSV)ファイルでこちらのローカルドライブに保存されます。 そこまではアメリカでのコントロールです。 そのCSV ファイルに付いている名前が、毎日ちがうので困っています。 DLするプログラム名に番号が割り振られて保存されているのです。 例 R554211J1_PJPPM000_945844_PDF.csv R554211J1_PJPPM000_944634_PDF.csv R554211J1_PJPPM000_935448_PDF.csv このファイルを開いて加工するのですが、VBE に記述するときはどうしたらいいですか? くっついてくる番号は、予想できません。 Workbooks.Open FileName:="c:\R554211J1_PJPPM000_*.csv" としてみたらやはりダメでした(x_x)短絡的? MS-DOS のREN コマンドのようなのがあれば、楽なのですが……。 エクセルのバージョンは97 SR-2 です。 よろしくお願いします。

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

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

  • ベストアンサー
  • 回答No.2
  • nishi6
  • ベストアンサー率67% (869/1280)

特定のフォルダに保存されたファイルを、無条件で全ファイル処理するのか、一部を選択するのかで違ってくると思われます。 ○フォルダ内の全csvファイルを無条件で処理するのであれば、  『FileChoose1』のようにDirを使って、ファイル名を特定できます。  今はSheet1のA列に書き出しています。 ○フォルダ内の指定したcsvファイルを処理するのであれば、  『FileChoose2』のようにしてGetOpenFilenameで複数ファイルを指定し、ファイル名を特定できます。  複数ファイルの指定は、ダイアログボックスの選択で、Shiftキー、Ctrlキーを使います。  今はSheet1のB列に書き出しています。 標準モジュールに貼りつけます。(ファイル名特定方法のサンプル) ↓ Sub FileChoose1()   Dim myFolder 'フォルダ   Dim myFilename As String 'ファイル名   Dim rw As Long '行カウンタ   myFolder = "A:\TEST\" '例です   'DirでExcelBookを探す   myFilename = Dir(myFolder & "*.csv")   While myFilename <> ""     rw = rw + 1     Worksheets("Sheet1").Cells(rw, 1) = myFolder & myFilename     'myFolder & myFilenameが抽出されたファイル名の1つ     '***** 処理を書くこともできる **** Workbooks.Open FileName:= ・・・     '次のファイル     myFilename = Dir   Wend End Sub Sub FileChoose2()   Dim fileToOpen As Variant   Dim myFilter As String 'フィルタ   Dim myTitle As String 'タイトル   Dim rw As Long '行カウンタ   myFilter = "excle(*.csv),*.csv"   myTitle = "ファイルを指定します"   fileToOpen = Application.GetOpenFilename(Filefilter:=myFilter, _                        Title:=myTitle, MultiSelect:=True)   If IsArray(fileToOpen) = False Then     MsgBox "キャンセルされました"   Else     For rw = 1 To UBound(fileToOpen)       Worksheets("Sheet1").Cells(rw, 2) = fileToOpen(rw)       'fileToOpen(rw)が選択したファイル名の1つ       '***** 処理を書くこともできる **** Workbooks.Open FileName:= ・・・     Next   End If End Sub

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

質問者からのお礼

ありがとうございました! こちらの説明が足りなかったのにもかかわらず、素晴らしいお答えをいただきました。 実はDLするCSVファイルは3つあって、パターンは同じでした。 ので、教えていただいた事をヒントに自分で下記のように応用してみたところ、条件をクリアしながら順に開く事ができました。 DIRコマンドについては、わたしが持っている(初心者向きの)市販本にはありませんでした……そろそろ買い替え時ですね。 またよろしくお願いします。 Sub FileChoose1() Dim myFolder 'フォルダ Dim myFilename As String 'ファイル名 ' Dim rw As Long '行カウンタ myFolder = "D:\" 'DirでExcelBookを探す myFilename = Dir(myFolder & "R554211J1_PJPPM000*.csv") 'zaiko While myFilename <> "" ' rw = rw + 1 Workbooks.Open FileName:=myFolder & myFilename ' Worksheets("Sheet1").Cells(rw, 1) = myFolder & myFilename myFilename = Dir Wend End Sub

その他の回答 (1)

  • 回答No.1

姑息な手法として―― セルA1に文字列でCSVファイルの番号だけ入力し、 Range("A1").Select AA = ActiveCell Workbooks.Open FileName:="C:\R554211J1_PJPPM000_" & AA & "_PDF.csv" としてマクロを実行されたらいかがでしょうか。

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

質問者からの補足

さっそくありがとうございます! 少し補足します。 私だけでなく、同僚も抵抗なく実行できるようにしておきたいので…。 とくに同僚は年配ですしパソコンアレルギーの気もあり(笑)、 提示したようなファイル名を見ただけで拒絶反応を起こし、さらに そこから数字を手で抽出して…なんて言おうものなら、 「オレには出来ない!」 と拒絶されてしまうことが目に見えているのです(^^; 苦手なことを無理やりやらせるのも可哀想なので、可能な限りマクロ 実行ボタン1個でプログラムが走るようにしておきたいのです。 いろいろすみません。

関連するQ&A

  • ファイルメーカーからCSVへのエクスポートについて

    こんにちは。 今、ファイルメーカーで問合せデータを作成していて 顧客番号を入力する所があります。 このデータを、CSVでDLすると、「000012345」という会員番号は、CSVでは、「12345」としか表示がされません。 この番号を「0000」も表示させるにはどのような設定が必要なのでしょうか? よろしくお願いします。

  • C言語のファイル読み込み

    あるcsvファイルがあり、それは以下のように(規則性のない)波形のデータです。 0.001 0.14 0.002 0.32 0.003 0.46 ・ ・ 2.000 0.22 左側がx軸、右側がy軸で、データはそれぞれ2000個あります。 このデータ(波形)をC言語のプログラムに読み込ませるにはどうしたらいいのでしょうか? #include <stdio.h> int main(void) { double i,j; FILE *file; file = fopen("sample.csv","r"); fscanf(file,"%ls,%ls",&i,&j); fclose(file); printf("i = %d : j = %d\n",i,j); return 0; } とすれば最初の1行目だけは読めますが、それ以降がわかりません。 配列を使えばいいのでしょうか?

  • エクセルで任意のcsvファイルを指定して関連ずけたい

    エクセルでフォームが出来ていて,特定したcsvファイル(ファイル名指定)の指定データ値をフォームに割り当て表示させています.フォームとcsvファイルは別になっています. csvデータファイルのデータの内容はフォームに合わせてあるので考えなくていいのですが,任意のcsvファイルをPCに保存してあり,そのファイルが複数あり選択指定できるようにしたいのですが,お教えいただけないでしょうか.よろしくお願いいたします.

  • IrvineでDLしたファイルをファイル名を指定して保存する方法

    宜しくお願いします。 irvineを使って画像を一括してDLしたいのですが、その画像のファイル名が全て『a.jpg』となっています。 ・データはcsvを使用しています ・画像の場所はcsvのセル(エクセル使用)にurlで記述されています ・その画像(商品なんですが)のIDが有るので、これを画像のファイル名にしたいのです 例えば、ID→「1234」の場合、ダウンロードするファイルは「a.jpg」ですが、保存するファイル名を「1234.jpg」という風にしたいのです。 どなたか、ご存知の方いらしたらどうか教えて下さい。 宜しくお願いいたします。

  • batファイル 拡張子変更

    こんにちは。 すいません。初心者です質問させていただきます。 ファイルの拡張子を変更するbatファイルを見ようみまねで作ってみたのですが、動きません。 -------batファイルの内容です------- set C:\rename=%basyo set syaryou_R???.0??=%Rmoto set syaryou_S???.0??=%Smoto set syaryou_R???.0??.csv=%Rato set syaryou_S???.0??.csv=%Sato cd %basyo ren %Rmoto %Rato ren %Smoto %Sato ---------------------------- こんな感じなのですが、何が悪いか分かりません。 よろしくお願いします。

  • VC++のfopenのファイル名の指定方法について

    下記のようなcsvファイルを間引くプログラムを改変したいと思っています。 環境はVS2008 C++ コンソールアプリケーションです。 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { FILE *fp,*fp1; int i, j, retu, ch, cnt=0; char data[100]; char a=0; fp=fopen("data.csv","r"); fp1=fopen("kekka.csv","w"); cnt=0; retu=0; while (1){ ch=fgetc(fp); if (ch=='\n') break; } while((ch=fgetc(fp))!=EOF){ data[retu]=ch; retu++; if (ch=='\n'){ cnt++; if (cnt>=10){ cnt=0; for(i=0;i<retu;i++){ printf("%c",data[i]); fputc(data[i], fp1); } } retu=0; } } return 0; } ただ毎回csvファイルの名前をdata.csvに書き換え、さらにkekka.csvを別名にして保存しなければいけないためとても手間です。 そこでその部分を実行時にscanfなどを用いて変更したいと思ったのですがうまくいきません。 fopenでファイル名を実行時(ビルド時)に変更するにはどうすればよいのでしょうか。 ご教授お願いします。

  • CSVファイルについて

     文字ピタを使用してある印刷を行っており、CSVファイルを参照しています。しかし、CSVデータの中のある欄(口座番号・・・頭にゼロが付く)を文字列にして保存しても、再度開くと数値(頭のゼロが取れてしまう)になってしまいます。何か良い方法は無いでしょうか?

  • AccessでのCSVファイル取り込みの自動化をしたいのですが。

    AccessでのCSVファイル取り込みの自動化をしたいのですが。 D:\DATA\というフォルダの下に「01」~「99」という99個のフォルダがあり、すべてのフォルダの中に「item.csv」「kaku.csv」,「kumi.csv」,「time.csv」,「total.csv」という存在します。 毎日01-99に順番にデータが格納されていきます。そのデータを毎日、Accessのテーブルに保存する作業を自動化(「01」~「99」のフォルダ指定)にしたいのですが出来ません。 どなたかご教授ください。ちなみにAccessのテーブルはCSVのファイル名と同じです。

  • バッチでcsvファイルの指定のカラムを編集したい

    バッチでファイルの編集をしたい バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております 元ファイル:TEST_DATA.csv 内容: 111,222,333,444,555 123,456,789,321,987 上記のcsvファイルを読み込み、 ・5カラム目が987ならば3カラム目を654に変更する という処理を実行させたいのですが、 どのように行えばよいのでしょうか? 現在考えていることは、 1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) 2.5カラム目の値をif条件に指定し、合致した場合、抜いた3カラム目の変数に654を入れる 3.654に変更した変数を3カラム目の値として入れる という順番で行えばいいと思っているのですが、 下記まで行ったところで行き詰ってしまいました for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) お分かりになられる方、ご教授願えませんでしょうか

  • プログラムの中でzipファイルのダウンロード

    zend framework を使って開発してます。 あるサイトからzipファイルをDLし、中のCSV情報を取得する必要があるのですが、 うまい方法が思いつきません。 zend frameworkを使っているので、 Zend_Http_Clientを使用するのが筋かなと思っており、 ただ、その場合、取得したzipファイルのバイナリデータを、 ファイルに保存→解凍してcsvファイルの情報を取得というステップが必要になります。 ファイルに保存する前のバイナリデータをそのまま解凍してcsv形式に展開といったことはできないのでしょうか? 現在下のような形で実現させていますが、前述した通り非常に遠回りしてる気がします。 それに、バイナリデータを一旦zipファイルとして保存しなければならないのであれば、 Zend_Http_Clientを使わずにwgetで取得した方がまだいいんじゃないかとも思ってます。 ---------------------------------- $client = new Zend_Http_Client( $url ); $value = $client->request('GET'); # zipファイルとして保存 $fp = fopen("./test.zip", "w" ); fputs($fp, $value); fclose( $fp ); # 解凍 $inflating_file = exec( 'unzip -o '."./test.zip" ); # CSVファイル名取得 $inflating_file = trim( str_replace( 'inflating:', '', $inflating_file ) ); # CSVファイルの展開 $handle = fopen("test.csv", "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { for ($c=0; $c < $num; $c++) { } } fclose($handle);

    • 締切済み
    • PHP