[No.25 コマンドラインのFTPを使ってみた] [No.26 FTP -n オプションとuserコマンド] [No.27 テキストファイル処理 ファイルへの書き込み] [No.28 Excelのグラフをgifへ変換 .Exportメソッド使用] [No.29 テキストファイル処理 ファイルからの読み込み] | ||
No.25 | 2002/12/17 コマンドラインのFTPを使ってみた |
[ページTOPへ戻る] |
<コマンドラインのFTPを使ってみた>
こんにちは、三流プログラマーKen3です。 今回は、 FTPの起動テスト を 軽く書いてみたいと思います。 /* * 1. 質問をもらいました */ BBS に以下の投稿がありました。 >投稿時間:2002/12/17(Tue) 13:24 >おなまえ:YN >タイトル:rsh,ftpの記述方法 >コメント: > >WindowsからLinux(リモート側)へrshを使いたいと考えています。 >リモートユーザのホームディレクトリ配下に.rhostsファイルを作成し、実行を >許可するホスト名とユーザ名を指定する。その後、VBAで「rsh Linux計算機名 >-l Linux計算機ユーザ名 -n プログラム名」と書くと思うのですが、それを書く >VBAの記述方法が?です。 > >その逆は、Windows側にコマンドを書いたファイルを用意して「ftp -s:ファイル >名 Linux計算機のホスト名」と書くと思うのですが、それを書くVBAの記述方法 >が?です。 > >何かヒントがあったら教えてください。 >-------------------------------------------------------- リモート側の処理はわからないけど、 FTPでデータを取ってくるのはやったことあるので、 簡単に。 /* * 2.ftp -s:ファイル名 Linux計算機のホスト名 までわかっているなら */ ftp -s:ファイル名 Linux計算機のホスト名 ここまで、知ってるなら、 話はハヤクって、 たぶん、-sのパラメータファイルを作成する方法がわかればすぐだと思うので、 軽く Sub test() Dim strPNAME As String 'パラメーターファイル名 Dim nFNO As Integer 'ファイル番号 strPNAME = ThisWorkbook.Path & "\ftptest.txt" 'ファイル名作成 nFNO = FreeFile '空いてるファイル番号を取る Open strPNAME For Output As #nFNO 'ファイルを新規作成 'データ書き込み Print #nFNO, "help " Print #nFNO, "open xxx" 'ここでパスワードを聞いてきたらウラ技を使う Print #nFNO, "cd xxx" Print #nFNO, "get aaa.dat " & ThisWorkbook.Path & "\aaa.dat" Close #nFNO '開いたら閉じようね 'shellでFTPを起動 Shell "ftp -s:" & strPNAME End Sub http://www.ken3.org/vba/lzh/vba025.lzh に保存しました。 解凍してtest025-book.xlsを開いて、 テストすると、 実行結果 ftp> help Commands may be abbreviated. Commands are: ! delete literal prompt send ? debug ls put status append dir mdelete pwd trace ascii disconnect mdir quit type bell get mget quote user binary glob mkdir recv verbose bye hash mls remotehelp cd help mput rename close lcd open rmdir ftp> open xxx Unknown host xxx. ftp> cd xxx Not connected. ftp> get aaa.dat D:\VBA-TEST\aaa.dat Not connected. ftp> Not connected. ftp> まぁ、ホストにつながってないので、 エラーメッセージでまくりだけど。 /* * 3.ftp の open コマンド */ open ホスト名 でオープンするんだけど、 通常はパスワードの入力を求められます。 これをかわす方法で、安易なのは、 pas.txtとテキストファイルを作成、中身にパスワードを書いておきます。 999999 パラメータファイルのOpenの場所で、 Print #nFNO, "open ftp.xxx.ne.jp <" & ThisWorkbook.Path & "\pas.txt" と書き、 パスワードがテキストpas.txtから入力したようにみせる 姑息な技もあります。 が、 暗号化されてないパスワードをテキストファイルで残すのは、 チト...イヤ、かなり不安な人も居ると思います。 /* * 4.私の失敗 */ 失敗を書かないと最近寝覚めが悪くなった私から、 笑ってしまう失敗談を1つ D:\test とか、テストのディレクトリでテストしてOKでした。 客先へインストール時は、ヤッパカッコつけたいから、 C:\Program Files の下にディレクトリを作り、保存しました。 C:\Program Files\Get\Get.xls と。。。 もうわかりました? Program Files ってスペースが空いてるんですよ。 まず、 Shell "ftp -s:C:\Program Files\Get\パラメータファイル" みたいになり、 あれ?動かない、、、なんてことあったなぁ。 コマンドプロンプト系のプログラムを起動する時は、 フォルダー名のスペースには要注意です。 /* * 5.終わりの挨拶 */ FTPはこんな感じで、出来ると思います。 Linuxのシェルの起動は、わからないけど、 半分でも、1つでも参考になればうれしいけど、、、 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 PS.できる読者(同様の処置やったこと有る)の回答も待ってます。
No.26 | 2002/12/17 FTP -n オプションとuserコマンド |
[ページTOPへ戻る] |
<FTP -n オプションとuserコマンド>
こんにちは、三流プログラマーKen3です。 今回は、いきなりクレームもらったので、即発行です。 前回テストでFTPの起動テスト を軽く書いたんだけど、 クレームもらいました。 /* * 1. クレームのメールは勉強になる。 */ In message "-n と user 使えよバカ", s***@********.ne.jpさん wrote... >ここ見ろ-->http://www.zdnet.co.jp/help/tips/linux/l0462.html >-n と user 使えよバカ -- http://www.zdnet.co.jp/help/tips/linux/l0462.html 見ました、勉強になります。 ftp -n とやると、ログインを聞いてこないので、 user ユーザ名 パスワード でログイン出来るんですね。 速いなぁ一流読者のレスは。 *できたら掲示板に書いてほしかったけど。 /* * 2.ftp -n -s:ファイル名 に 変更 */ Sub test() Dim strPNAME As String 'パラメーターファイル名 Dim nFNO As Integer 'ファイル番号 strPNAME = ThisWorkbook.Path & "\ftptest.txt" 'ファイル名作成 nFNO = FreeFile '空いてるファイル番号を取る Open strPNAME For Output As #nFNO 'ファイルを新規作成 'データ書き込み Print #nFNO, "open plaza14.mbn.or.jp" 'openホスト名 Print #nFNO, "user ken3 XXXXXX←パスワード" 'userコマンド ユーザー名 パスワード Print #nFNO, "cd www" Print #nFNO, "pwd" Print #nFNO, "get index.html " & ThisWorkbook.Path & "\index.html" Close #nFNO '開いたら閉じようね 'shellでFTPを起動 -nのオプションを付ける Shell "ftp -n -s:" & strPNAME End Sub テストプログラム、変更しました。 変更ヶ所は、 user コマンドの追加 と ftp -n と−nのオプションを付けました。 /* * 3.実行結果 */ パスワードは消しておいたけど。無事動作しました。 ftp> open plaza14.mbn.or.jp Connected to plaza14.mbn.or.jp. 220 DREAM*PLAZA FTP Server ftp> user ken3 ****←パスワード 331 Password required for ken3. 230 User ken3 logged in. ftp> cd www 250 CWD command successful. ftp> pwd 257 "/www" is current directory. ftp> get index.html C:\tmp\vba025\index.html 200 PORT command successful. 150 Opening ASCII mode data connection for index.html (470 bytes). 226 Transfer complete. ftp: 481 bytes received in 0.28Seconds 1.72Kbytes/sec. ftp> 200 PORT command successful. 150 Opening ASCII mode data connection for index.html (470 bytes). 226 Transfer complete. ftp: 481 bytes received in 0.32Seconds 1.50Kbytes/sec. ftp> /* * 4.終わりの挨拶 */ 読者のレスの速さにびっくり。 And http://www.zdnet.co.jp/help/tips/linux/l0462.html と、処理方法はいろいろあるんですね。 Linuxのシェルの起動もヨロシクです。 *三流作者さん人に任せないで、自分で調べろって、、、 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。 PS.できる読者(同様の処置やったこと有る)の回答も待ってます。
No.27 | 2002/12/18 テキストファイル処理 ファイルへの書き込み |
[ページTOPへ戻る] |
<テキストファイル処理 ファイルへの書き込み>
こんにちは、三流プログラマーKen3です。 今回は、 前回、FTPの処理でパラメータファイルをいきなり作成したけど、 解説まだだったので、 軽く書いてみます。 /* * 1. 開けて(Open)、書いて(Print #)、閉めて(Close) */ まずは、いつもの手抜きプログラムでテストを行うか、、 AltとF11を押して、エディター起動して、挿入の標準モジュールと、、 Sub test() Open "C:\TEST.TXT" For Output As #1 'ファイルを新規作成 'データ書き込み Print #1, "やっぱ三流だよね、固定はよくないよ" Print #1, "セミコロンを後ろに付けるとどうなるの?"; '←*セミコロン Print #1, "こうなるの" Print #1, "終わり" Close #1 '開いたら閉じようね End Sub と書いて、実行します。 C:\TEST.TXTに やっぱ三流だよね、固定はよくないよ セミコロンを後ろに付けるとどうなるの?こうなるの 終わり となります。 簡単に解説すると、 Open ステートメント Open "C:\TEST.TXT" For Output As #1 'ファイルを新規作成 Open ファイル名 For モード As ファイル番号 でファイルを作成できます。 モードは新規作成をしたいので、 Outputを使いました。 ほかに有名なのは、Append、Inputがあります。 *有名じゃなくって、処理によって使い分けます。 Print # ステートメント Print #1, "やっぱ三流だよね、固定はよくないよ" Print #1, 文字列や変数 で書き込みます。 あとのポイントは、;をつけると改行されないで次の項目を書き込めます。 Print #1, "セミコロンを後ろに付けるとどうなるの?"; '←* Print #1, "こうなるの" は、下記のような実行結果になります。 セミコロンを後ろに付けるとどうなるの?こうなるの と 書き込まれます。 Close ステートメント Close #1 '開いたら閉じようね で、ファイル番号1をクローズしています。 単純なパターンは、 開いて Print # ステートメント 書いて Open ステートメント 閉じて Close ステートメント です。 /* * 2.HTMLも拡張子が違うだけで普通のテキストファイル */ あんまり、変なテストプログラム書いてても、ツマラナイので、 HTMLファイルを作成して見ます。 HTMLファイルって行っても、 普通のファイルに<XXX>とタグ が付いてるだけなので、ご安心を。 Sub test2() Dim strFNAME As String 'ファイル名格納用 Dim strNAME As String '名前を入れる 'ユーザーに自分の名前を入れさせる strNAME = InputBox("アナタの名前は?", "名前の入力", "テスト") 'ブックと同じ位置にtest027.htmlを作成する strFNAME = ThisWorkbook.Path & "\test027.html" 'ファイル名の作成 Open strFNAME For Output As #1 'ファイル番号1で新規作成 'データ書き込み、 Print #1, "<html>" Print #1, "<b>" & strNAME & "</b>さんが<br>" Print #1, Now & "に作成したファイルです" Print #1, "</html>" Close #1 '開いたら閉じようね '終了メッセージの表示 MsgBox strFNAME & "を作成しました、確認してね" End Sub こんな感じです。 流れを軽く追って行くと、 まず、名前を入力させます(なんでもいいんだけど) 'ユーザーに自分の名前を入れさせる strNAME = InputBox("アナタの名前は?", "名前の入力", "テスト") ファイル名を作成後、開きます 'ブックと同じ位置にtest027.htmlを作成する strFNAME = ThisWorkbook.Path & "\test027.html" 'ファイル名の作成 Open strFNAME For Output As #1 'ファイル番号1で新規作成 ポイントは、 ThisWorkbook.Path & "\test027.html" で、実行中のブックのパスを付けてファイル名を作成してます。 それを利用して、ファイルを新規作成します。 次にデータを書きます。 'データ書き込み、 Print #1, "<html>" Print #1, "<b>" & strNAME & "</b>さんが<br>" Print #1, Now & "に作成したファイルです" Print #1, "</html>" 入力さた名前を出力、あとおまけで時間を書いてます。 処理が終わったらファイルを閉じます。 Close #1 '開いたら閉じようね そのまま終わってしまうと、なんだかわからないので、 ここにファイルを書いたんだよ、 と、ファイル名を表示しました。 '終了メッセージの表示 MsgBox strFNAME & "を作成しました、確認してね" 意外と簡単だったでしょ? /* * 3.終わりの挨拶 */ 今回は、 ・テキストファイルへの書き込み でした。 今回のサンプル、 http://www.ken3.org/vba/lzh/vba027.lzh に保存しました。 解凍してtest027-book.xlsを開いて、 内容を変えたりして、遊んでください。 テキストファイル処理も奥が深いけど、 まだ入り口なので余裕かなぁ。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
No.28 | 2002/12/18 Excelのグラフをgifへ変換 .Exportメソッド使用 |
[ページTOPへ戻る] |
<Excelのグラフをgifへ変換 .Exportメソッド使用>
こんにちは、三流プログラマーKen3です。 今回は、 Excelのグラフをgifへ変換 して遊んでみます。 /* * 1. ActiveChart.Export ("C:\samp.gif") */ 昔か書いてたメルマガに、 Excelのグラフをgifへ変換 があったので、今回は、これをネタに話を大きくしてみます。 *昔のメルマガも整理しないとなぁ Excel97 で、グラフが表示されています。 このグラフを画像ファイルとして保存したいのですが、 どのような操作をすれば、よいのですか? *Excelで作成したグラフをHPに載せたいので、 AAA.GIFにしたいのです。 .Exportってメソッドあるので、VBAからは、 ActiveChart.Export ("C:\samp.gif") みたいな感じで、GIFファイル作成できるみたいです。 VBAでグラフをGIFにした、 サンプルを載せます。 Sub test028_1() 'ブックを新規に作成 Workbooks.Add '適当なデータをセット Range("A2").Value = "東京" Randomize '乱数初期化 Range("A2").Value = "東京": Range("B2").Value = Int(Rnd * 100 + 1) Range("A3").Value = "神奈川": Range("B3").Value = Int(Rnd * 100 + 1) Range("A4").Value = "埼玉": Range("B4").Value = Int(Rnd * 100 + 1) Range("A5").Value = "千葉": Range("B5").Value = Int(Rnd * 100 + 1) 'グラフを追加、、マクロ記録で作成したコードをコピー Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("A2:B5") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" 'ブックと同じ位置に 'グラフをGIFファイルで保存 ActiveChart.Export (ThisWorkbook.Path & "\test028.gif") '↑VBAでGIFに保存できるので、それなりに使えるかも End Sub '---- ポイントは、 Chartオブジェクトのメソッド .Export メソッド で、 ブックと同じフォルダーに保存したかったので、 ActiveChart.Export (ThisWorkbook.Path & "\test028.gif") と指定しました。 /* * 2.表示されているグラフを保存するボタンを作成 */ 上のサンプルでは、 新規にグラフを作成して、GIFにしたけど、 実際の業務では、グラフは既にあって(元は事前に作ってあって)、 データを入力する状態になってると思います。 Print Screen KEYを押して、 グラフィック編集ソフトで切り取り や Shiftキーを押しながらメニューの編集・図のコピー をやらなくてすむように、 表示されているグラフをGIF保存するマクロを作ってみます。 まず、問題なのが、 Chartオブジェクトの数や指定する方法かなぁ。 Sheetオブジェクトの中にChartObjectsがあって 何? えっと、埋めこみグラフってのは、シートの下にぶら下がってるんですよ。 なので、指定する時は、 ActiveSheet.ChartObjectsとやります。 へぇ〜そうなんだぁ。 サンプルのtest028-book.xlsファイルを http://www.ken3.org/vba/lzh/vba028.lzh に圧縮したので、解凍してみながらのほうがわかりやすいかも。 ア.グラフの数を数える サンプルでは、横棒グラフと円グラフを用意してます。 シートにグラフがいくつ埋めこまれているか調べるには、 .Countプロパティを参照します。 ActiveSheet.ChartObjects.Count イ.個々のグラフ情報にアクセスするには? 個々のグラフの情報にアクセスするには、 ActiveSheet.ChartObjects(1) と ActiveSheet.ChartObjects("グラフの名前") の2つのやり方があります。 アのグラフの数を数えるプロパティを参照して、 ループで回すことができます。 Sub test028_2() Dim n As Integer 'n番目のカウンターで使用 Dim strFNAME As String 'ファイル名 'グラフの枚数分処理を行う For n = 1 To ActiveSheet.ChartObjects.Count 'ファイル名を作る strFNAME = ThisWorkbook.Path & "\test028-" & n & ".gif" '.Exportでgif出力 ActiveSheet.ChartObjects(n).Activate ActiveChart.Export (strFNAME) '保存確認メッセージを表示 MsgBox ActiveSheet.ChartObjects(n).Name & "を" & strFNAME & "へ保存しました" Next n End Sub '--- For n = 1 To ActiveSheet.ChartObjects.Count で、グラフの枚数分ループを行います ファイル名をtest028-1 -2 と連番で作ります strFNAME = ThisWorkbook.Path & "\test028-" & n & ".gif" グラフを選択、出力します ActiveSheet.ChartObjects(n).Activate で選択 ActiveChart.Export (strFNAME) で出力 おまけで、確認メッセージを表示します。 MsgBox ActiveSheet.ChartObjects(n).Name & "を" & strFNAME & "へ保存しました" /* * 3.終わりの挨拶 */ 今回は、 ・Excelのグラフをgifへ変換 でした。 予定では、 HTMLファイルの作成、FTPを起動して、自動でサーバーにUPする も含めたかったけど、気合が足りなく、今回は無しで。 少しがんばれば、下記のような処理も可能ですね。 ボタンが押されたら、 Excelのシートを 自分で(VBAで) HTMLファイル化して(グラフもGIF画像にして、) FTPを使用して自動的にサーバーもっていく。 今回のサンプルは、 http://www.ken3.org/vba/lzh/vba028.lzh に保存してあります。 解凍してtest028-book.xlsを開いて、 内容を変えたりして、遊んでください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
No.29 | 2002/12/19 テキストファイル処理 ファイルからの読み込み |
[ページTOPへ戻る] |
<テキストファイル処理 ファイルからの読み込み>
こんにちは、三流プログラマーKen3です。 今回は、 テキストファイルからのデータ読み込み処理をやってみたいと思います。 あまり自分でテキストファイルを読んで処理する機会は無いと思うので、 (CSVとかのテキスト読み込みが充実してると思うので) 気楽に読んでください。 /* * 1. テキストファイルの仕様 と やりたいこと */ Excelの開くで*.CSVとか*.TXT開けるのですが、 今回は自分で開いて読み込んでみます。 やりたいこと、 ログの収集用のファイルが存在して、 下記のようなフォーマットでデータをもらうことができます。 ファイル名はlog.csvで、 中身は、簡単に時間とアクセス場所が入ってます 17/Dec/2002:11:25:33,GET /vba/excel97-vba-test.html HTTP/1.0 17/Dec/2002:11:26:09,GET /backno/backno_vba_mokuji.html HTTP/1.0 17/Dec/2002:11:26:41,GET /24h/index.html HTTP/1.0 17/Dec/2002:11:26:41,GET /24h/menu24h.html HTTP/1.0 17/Dec/2002:11:27:11,GET /vba/lzh/vba006.lzh HTTP/1.0 17/Dec/2002:11:27:42,GET /24h/info24h.html HTTP/1.0 17/Dec/2002:11:28:18,GET /backno/backno_vba03.html HTTP/1.0 17/Dec/2002:11:33:16,GET /backno/backno_guchi05.html HTTP/1.1 17/Dec/2002:11:37:48,GET /backno/backno_guchi06.html HTTP/1.1 17/Dec/2002:11:41:30,GET /asp/iis-help.html HTTP/1.0 17/Dec/2002:11:41:30,GET /asp/gif/iis-help03.gif HTTP/1.0 17/Dec/2002:11:41:30,GET /asp/gif/iis-help04.gif HTTP/1.0 まず私が気になることは(気にしてることは) アクセス場所も気になるんだけど、 17/Dec/2002:11:27:11,GET /vba/lzh/vba006.lzh HTTP/1.0 保存したサンプルを使ってくれてるのかなぁ? です。 やりたいこと、機能としては、 読み込みと書き込みの練習を兼ねて、 log.csvの元ファイルを読み込み、 XXXX.lzhの行を見つけたら、 out.txtに書き込んでください。 /* * 2.まずは、読み込みのテストかなぁ */ '一行読み込みのLine Input # ステートメントをテスト Sub test029_1() Dim strInFileName As String '入力ファイル名 Dim strBUFF As String 'レコードを読みこむバッファ strInFileName = ThisWorkbook.Path & "\log.csv" 'ファイル名を作る 'ファイルの存在チェック If Dir(strInFileName) = "" Then MsgBox strInFileName & "が見つかりません" Exit Sub End If 'ファイルを入力モードで開く Open strInFileName For Input As #1 'Line Input # ステートメントを使用 Line Input #1, strBUFF MsgBox strBUFF 'ファイルは閉じようね Close #1 End Sub '---- ファイル名の作成 ^^^^^^^^^^^^^^^^ strInFileName = ThisWorkbook.Path & "\log.csv" 'ファイル名を作る おなじみの、ThisWorkbook.Pathと名前をつなげてますね。 (いつからActiveWorkbook.PathからThisWorkbook.Path好きになったの?) ファイルが存在するかチェックする ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 'ファイルの存在チェック If Dir(strInFileName) = "" Then MsgBox strInFileName & "が見つかりません" Exit Sub End If Dir関数で、開く前にファイルが存在するかチェックしてます。 これも、毎度のパターンかなぁ。 ファイルが無い場合は、メッセージを表示して、 Exit Subでバイバイします。 開いて、 ^^^^^^ 'ファイルを入力モードで開く Open strInFileName For Input As #1 ポイントはFor Inputです。 読んで ^^^^^^ 'Line Input # ステートメントを使用 Line Input #1, strBUFF MsgBox strBUFF ポイントは、 Line Input #ファイル番号, 変数 で、データを一行読み込みます。 ここでは、そのまま表示してます。 また閉じて ^^^^^^^^^^ 'ファイルは閉じようね Close #1 無事、1行目が表示されたと思います。 /* * 3.ファイルの行数を数えてみた EOF関数使用 */ ファイルの終わりを知りたかったので、 EOF関数のテストを兼ねて、データ行数をカウントしてみた。 'EOF関数でファイルの終端をチェックする Sub test029_2() Dim strInFileName As String '入力ファイル名 Dim strBUFF As String 'レコードを読みこむバッファ Dim nCNT As Integer 'レコード数を数える strInFileName = ThisWorkbook.Path & "\log.csv" 'ファイル名を作る 'ファイルの存在チェック If Dir(strInFileName) = "" Then MsgBox strInFileName & "が見つかりません" Exit Sub End If 'ファイルを入力モードで開く Open strInFileName For Input As #1 'ファイルの行数を数える nCNT = 0 Do While EOF(1) = False 'ファイル番号1が終了じゃない間まわる Line Input #1, strBUFF 'ここでは空読みで1行読む nCNT = nCNT + 1 '行数をカウントする Loop 'ファイルは閉じようね Close #1 '結果を表示 MsgBox strInFileName & "は" & nCNT & "行です" End Sub ポイントは、ファイルの行数を数える部分で、 カウンタの初期化 ^^^^^^^^^^^^^^^^ nCNT = 0 ループの条件をファイルの終端にする ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Do While EOF(1) = False 'ファイル番号1が終了じゃない間まわる EOF(ファイル番号)は、 ファイルが終端になると、Trueを返し、 途中(まだ読める)だとFalse なので、Falseの間、まわるループにした。 データの空読み ^^^^^^^^^^^^^^ Line Input #1, strBUFF 'ここでは空読みで1行読む 何も処理しないんだけど、1行読んでstrBUFFに代入した。 カウントアップ ^^^^^^^^^^^^^^ nCNT = nCNT + 1 '行数をカウントする 普通にA=A+1みたいな感じで、1を加算、カウントアップした。 ループの最後 ^^^^^^^^^^^^ Loop は、ループはここまで、うえのDo Whileに戻ります。 無事行数はカウントされましたか? /* * 4.読んで、該当データを別ファイルに書く */ やっと、今日もまもなく終了です。 次は、データを読みこんで、 条件をチェック(ここでは、.lzhか?) 該当データを別ファイルに書き込みます。 '読んで、判断して、書き込む Sub test029_3() Dim strInFileName As String '入力ファイル名 Dim stroutFileName As String '出力ファイル名 Dim strBUFF As String 'レコードを読みこむバッファ Dim nCNT As Integer 'レコード数を数える '入力ファイル関係の処理 strInFileName = ThisWorkbook.Path & "\log.csv" '入力ファイル名を作る If Dir(strInFileName) = "" Then 'ファイルの存在チェック MsgBox strInFileName & "が見つかりません" Exit Sub End If Open strInFileName For Input As #1 'ファイルを入力モードで開く '出力ファイル関係の処理 stroutFileName = ThisWorkbook.Path & "\out.txt" '出力ファイル名を作る Open stroutFileName For Output As #2 'ファイル番号2で出力ファイル作成 nCNT = 0 '出力行カウンタを初期化 '入力ファイルの最後まで1行毎に読んで判断する Do While EOF(1) = False 'ファイル番号1(入力)がある間ループ Line Input #1, strBUFF 'ここで1行読む '.lzhがあるかInStr関数で探す If InStr(strBUFF, ".lzh") <> 0 Then Print #2, strBUFF 'ファイルに書き込む nCNT = nCNT + 1 '出力行数をカウントする End If Loop 'ファイルは閉じようね Close #1 '入力ファイル Close #2 '出力ファイルも忘れずに '結果を表示 MsgBox stroutFileName & "に" & nCNT & "件書き込みました" End Sub 入力ファイルの準備 ^^^^^^^^^^^^^^^^^^ '入力ファイル関係の処理 strInFileName = ThisWorkbook.Path & "\log.csv" '入力ファイル名を作る If Dir(strInFileName) = "" Then 'ファイルの存在チェック MsgBox strInFileName & "が見つかりません" Exit Sub End If Open strInFileName For Input As #1 'ファイルを入力モードで開く いつものようにファイル名を作成、 で、存在をチェックして、 オープンします。 出力ファイルの準備 ^^^^^^^^^^^^^^^^^^ '出力ファイル関係の処理 stroutFileName = ThisWorkbook.Path & "\out.txt" '出力ファイル名を作る Open stroutFileName For Output As #2 'ファイル番号2で出力ファイル作成 nCNT = 0 '出力行カウンタを初期化 ファイル名を作成、 書き込みなのでノーチェックで出力モードでオープン カウンタも初期化しておきます。 ファイルを読んで、判断して、書き出して ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ '入力ファイルの最後まで1行毎に読んで判断する Do While EOF(1) = False 'ファイル番号1(入力)がある間ループ Line Input #1, strBUFF 'ここで1行読む '.lzhがあるかInStr関数で探す If InStr(strBUFF, ".lzh") <> 0 Then Print #2, strBUFF 'ファイルに書き込む nCNT = nCNT + 1 '出力行数をカウントする End If Loop ここのポイントは、 InStr関数を使って、 読み込んだデータstrBUFFに .lzhの文字列が存在するかチェックして、 <>0 データが見つかった時に、 Print #2, strBUFF で、読み込んだデータをそのまま出力してます。 この処理で、抜き出したような感じの出力ファイルが出来あがります。 最後の後始末はファイルを閉める ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 'ファイルは閉じようね Close #1 '入力ファイル Close #2 '出力ファイルも忘れずに 忘れないで、#2も閉じてくださいね。 結果の報告 ^^^^^^^^^^ '結果を表示 MsgBox stroutFileName & "に" & nCNT & "件書き込みました" 作業が終わったのに黙って帰るなんてのは、社会人失格、、、 なんて話じゃなくって、 書き込み件数を表示して、作業の終了を知らせてます。 /* * 5.終わりの挨拶 */ 今回は、 ・Input Line #で1行リード ・EOF(No) で、ファイルの終わりをチェック ・Instr関数で文字列を探した でした。 今回のサンプルは、 http://www.ken3.org/vba/lzh/vba029.lzh に test029-book.xlsとlog.csvが保存されてます。 log.csv(元データ)の内容を変えたりして、 遊んでください。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
目的の情報を探すには、最近はググれとよく聞きます。なので、検索ボックスを付けました。
いろいろなキーワードを入れて、検索してみてください。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。
開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]
仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]
Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です
Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます
Blog:[三流君の作業日記]/
[サンプルコードのゴミ箱]/
広告-[通販人気商品の足跡]