[No.140 ヒアリング、プログラム時にほしい情報をもらい設計する]
[No.141 箇条書きで必要部品を洗い出し単体テストする]
[No.142 単体部品を結合する、接着剤は変数で?]
[No.143 *****************]
[No.144 *****************]

www.ken3.org(サイト内)から Google を利用して、

三流君 VBAで楽しくプログラミング(Excel/Access VBAの解説/サンプルです)
[VBA系のバックナンバー] [VBA系 TOP] [三流君 TOP]



No.140 2003/10/01
ヒアリング、プログラム時にほしい情報をもらい設計する
[ページTOPへ戻る]

<ヒアリング、プログラム時にほしい情報をもらい設計する>

こんにちは、三流プログラマーのKen3です。 郵便番号の集計、終盤のツメなんだけど、 チョイ置いといて、新たな質問の書き込みがあったので、 やってみたいと思います。 メルマガで意外と多く感想メールもらうのが、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 基本設計書/仕様書のお話 http://www.ken3.org/vba/doc.html No.127 要求を聞き、疑問点をつぶし、仕様書を書く http://www.ken3.org/backno/backno_vba26.html#127 No.133 仕様変更が来たら?落胆しないで前向きに? http://www.ken3.org/backno/backno_vba27.html#133 などの、テクニックに関係ない話です。※評価のポイントは低いんだけど(笑) 調子こいて、今回も発行してみます。 失敗しなきゃいいけどね・・・

/* * 1. 今回のキッカケ */

下記が、書き込まれた質問内容です。 ---------------------------------- VBScriptで次のようなことが出来るのかご助言頂きたく書き込んでいます。 入力ファイル = input.txt (普通のテキストファイル) 出力ファイル = output.xls (マクロの仕込んだエクセルファイル) 入力ファイルを読み込み、 出力ファイルに書き出し、 マクロを実行する。 この繰り返しをSheetを増やしながら行う。 入力ファイルのフォーマットは次のような感じです。 sheet_1 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ sheet_2 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ sheet_n A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ 新しいSheetの始まりはSheet_番号で Sheet_番号がそのままSheet名になります。 Sheet_番号は始まりを認識するキーであり 書き出しは行われません。 A1〜L4は可変でカンマで区切られています。 ----- イメージ的には、1つのテキストファイルから、複数のシートを作成する。 そんな感じですよね。

/* * 2.勝手に難しく考えたり、逆に安易に考えたり・・・・ */

入力、処理、出力を考えるといいよ、なんて書いてましたね。 その思考で行くと、 入力ファイル = input.txt (普通のテキストファイル) を読み込み、 Sheet_n nは番号の行を区切りとして、シートを切り替え、 通常のカンマ区切りのデータをシートに書き出す。 出力は、 出力ファイル = output.xls (マクロの仕込んだエクセルファイル) です。 そんな感じかなぁ。 と 性格にもよるけど、安易に考えて作業に入れる人はいいんだけど、 条件がそろうまでは、動き出さない慎重な人とイロイロだとは思いますが。 ここまでの説明で、疑問点は、何だろう? ※逆の言い方だと、依頼時の漏れている項目、伝えたほうがいい項目は? まぁ、入力、出力のイメージがはっきりしているので、心配は無いんだけど、 慎重な人は、 >VBScriptで次のようなことが出来るのかご助言頂きたく書き込んでいます。 の VBScriptに反応かなぁ。 疑問1、開発言語と環境は? ^^^^^^^^^^^^^^^^^^^^^^^^^^ これが書いてあると、さらによかったのかも。 気にする人は、 Win98とWin2000のOSとか、 Excel97とExcel2002のアプリのバージョンまで気にすると思います。 そんなこんなで、下記のような質問をしてみたり。 ---- 質問内容 ---- VBScriptの実行は、ASPのサーバー上ですか? それとも、ローカルのPCで実行? ※もしかして、Excelでボタンを押したらでOK? VBAでOK? ----------------- 私の読みでは、VBAとVBScriptを勘違いしていると、読んだけど。 疑問に対して、回答の返信をもらいました。 --- いただいた回答 --- 実行するのはローカルのPC上です。 やりかけのソースなどはありません。すみません。 専門用語がいっぱいでちょっと?状態です。 作ったプログラムxxx.vbsをダブルクリックすると 起動するようにしたいのです。 ユーザーIFはMsgBoxを使って Input file ? Output file ? と入力、あるいは参照するように。 ---- 回答をもらい、そのまま、VBScriptだったことに気が付く。 こんな感じで、疑問を質問し、回答をもらう、、、繰り返しですよね。 これも性格で・・と言っちゃいけないのが、 疑問に思っても質問しないで、自分勝手に思い込んで作業を開始する行為。 例えば、 自分の都合のよいように、 ~~~~~~~~~~~~~~~~~~~~~~ VBAと勘違いしてるんだこの人(勘違いしてるのは客先じゃなくてオマエだろ(笑)) と決め付けて、VBAのテキスト処理、OPENとLine INPUT#とかで組んで、 後で、えっ聞いてないよそんなこと?なんて言い出したりして・・・ 先走りがちの人は、 ~~~~~~~~~~~~~~~~~~ まず、入力と出力、処理をはっきりさせる。 環境、OSや使用可能なアプリケーションを確認します。 ※実話?だけど、  ファイルの一覧選択、VBでExcelをコントロールするプログラム組んだら  NT系のOSで、勝手なソフトインストール禁止の端末で、  VBのプログラムがセットアップできなかった・・・そんな会社もあります。  石橋派の人は、インストール先のマシーン環境も事前チェックしてくださいね。  (石橋叩いて・・じゃなくって、確認するのが基本だろ)

/* * 3.設計開始、プログラム作成開始 */

設計、ここまで来れば、もう出来ているようなもんですね。 処理概要 xxxx.vbsをダブルクリックしたら、 xxxx.txt 入力ファイル名を入力(できたら選択) xxxx.xls 出力ファイル名を入力(できたら選択) シートへのデータセット処理を開始する。 入力ファイル仕様 sheet_1 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ sheet_2 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ 先頭6文字がsheet_の行は、シート名の行で、ここでシートを切り替える その他の行は、データで、A1〜L4へセットする。 おっと、まとめたつもりだったけど、そのまんまでした(笑)

/* * 4.テストで確認すること、読みの基準 */

さてと、詳細設計とプログラムを作り始めるか。 チョット待ってよ、詳細設計したり、組み始める前に (もっとスゴイ人は、いきなりエディター立ち上げないで) 事前に確認していると楽なことがあったりします。 ※影の努力、事前調査ってヤツですね。 VBScriptってテキストファイル、どうやって読むのだろう? Excelを起動できるのかなぁ? 起動したExcelのオブジェクトは同様に操作できるのかなぁ? などなど、言語でひっかかりそうな部分を事前にチェックします。 まぁ、世の中、豪快な人も居て、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ テキストファイルが読み込めない、そんな言語なんて無いだろ、 あったら聞かせろよ なんて、気にしない人も居ます。 まぁ、気にしない人も、気にする人も、 要求されていることが実現可能なのか?考えることは必要だと思います。 xxxx.txt 入力ファイル名を入力 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ユーザーからの入力を受け付けない、そんな言語あるの? まぁまぁ興奮しないで、そんなこと言わないで、調べましょうよ。ね。。。 -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------

/* * 5.終わりの挨拶 */

今回は、 システムの 伝えたい情報、聞かないといけない情報を探る。 そんな話を軽く書きました。 何かの参考となれば幸いです。 次は、詳細設計から、組んでいきます。 Excel/Access大好き、三流プログラマーKen3でした。

No.141 2003/10/01
箇条書きで必要部品を洗い出し単体テストする
[ページTOPへ戻る]

<箇条書きで必要部品を洗い出し単体テストする>

こんにちは、三流プログラマーのKen3です。 今回は、フローは書かないんだけど、 箇条書きのコメントで、流れを書き、 単体テストで部品を作る、部品の精度を高める、 そんな話を書いてみたいと思います。 ※たいしたことないんだけどね(笑)

/* * 1. 今回のキッカケ */

VBScriptでTextからExcelシートへのデータをセットする、 そんな処理の依頼を受けました。 依頼内容を勘違いをしつつ、まとめまた話は下記を見て笑ってもらって、 今回は、私の作成方法を軽く書いてみたいと思います。 依頼内容: No.140 ヒアリング、プログラム時にほしい情報をもらい設計する http://www.ken3.org/backno/backno_vba29.html#140 で、 処理概要 xxxx.vbsをダブルクリックしたら、 xxxx.txt 入力ファイル名を入力(できたら選択) xxxx.xls 出力ファイル名を入力(できたら選択) シートへのデータセット処理を開始する。 入力ファイル仕様 sheet_1 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ sheet_2 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ 先頭6文字がsheet_の行は、シート名の行で、ここでシートを切り替える その他の行は、データで、A1〜L4へセットする。 とまとめました。(ほぼ、質問そのままなんだけど(オイオイ))

/* * 2.作り始める、フローは書かないで箇条書き程度で */

さてと、いきなり作り始める人は、居ないと思います。 そんな話はいつも、聞き飽きたよ、 三流プログラマーのアンタだったらどうするの? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ドキッ、、、人の批判は好きなんだけど、自分のことを話すのはイヤなんだけど、 なんて言ってないで、正直に書くと、 最近は、フローチャートなんてものは、書いてないですね。 ※納品時にほしいって言われたら、プログラムが出来てから、  ソースファイルを見ながら書く、そんな感じか、  ソースからフローチャートを作るツールを会社に買ってもらうとか。 えっ、フローチャート書かないの?(ダカラ三流プログラマーなんだよ) 作り方も知らないんですか?(これだから素人なんだよ三流君は) 学校では、要求仕様書・基本設計書でシステム内容、システム化の目的を理解して、 詳細設計書でプログラムの構成を理解する、 プログラマーは、プログラムを組む前にフローチャートを作成する そんな感じのことを聞いてたんですけど(フローも書けないの三流君は?) あっ、そうなの?それもありだけど、 面倒なので、流れを箇条書きしようよ。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ それか、Sub〜End Subに’でコメントを書くとか --- 余談 --- 日光が斜めから射すので、まっすぐに伸びない? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 植物の成長って、日光に向かって伸びるんですよね。 太陽の光がナナメからだったら、ナナメに伸びる・・・ (上司や先輩の育て方や光具合が、新人の成長に影響を与えるのも事実です・・・) 実は、自分に対する栄養の与え方って重要なんですよ。 私のメルマガ見て、そこを目指して進むと、斜めに育つかもしれないので、 いろいろな参考書や有益なHPから正しい光(栄養)を補給してね。 ※ナナメに伸びてから、まっすぐに矯正するのは大変なので、  参考程度に読んでね。。。。 ------------ 流れを箇条書き?’でコメントを書く? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (↑何言ってんのこの人?頭大丈夫?フロー書けよ) えっと、こんな感じかなぁ。
Sub aaa()

  'xxxx.txt 入力ファイル名を入力(できたら選択)

  'xxxx.xls 出力ファイル名を入力(できたら選択)

  'シートへのデータセット処理を開始する。

End Sub
なんて書いてから、さらに、
Sub aaa()

  'xxxx.txt 入力ファイル名を入力(できたら選択)

  'xxxx.xls 出力ファイル名を入力(できたら選択)

  'シートへのデータセット処理を開始する。
  
  '入力ファイルのオープン
  '出力ファイルのオープン

  '入力ファイルがなくなるまでループ
     '1行読み込む
     'データ行の判断
     'If 左から6文字が"sheet_"か判断する
         '出力シートの切り替え、シートを選択する
         'カウンタを1行目へ
     'Else
         'データのセット
         'セット位置を増やす

  '後始末
  '入力ファイルクローズ
  '出力ファイルクローズ

End Sub
と、日本語で、わかる部分を書き込みます。 これがサクっと書けない部分は、疑問点があったり、 処理的に難しい(データ流れや制御が浮かばない)ので、部分的に考えてみる。 そんな感じで、組み始めているかなぁ、私は。 ※教科書的じゃないので、参考程度にね。

/* * 3.必要な命令、オブジェクトを探る */

日本語で処理内容書いたって、意味無いよ。(なんだこの三流方式は・・・) まぁ、そんなこと言わないで一度やってみてよ。 ここから先なんだけど、 部品を組み合わせて1つの製品を作る ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ そんなイメージで行くと、部品をそろえたり、作成精度を上げるために、 箇条書きした機能を実行するには、サクっと書けない部分(部品)を調べます。 まず、問題になるのが、言語の編集方法やエディターの使い方。 VBScriptは、拡張子が.vbsならOKと簡単なので、 デスクトップにtest.vbsと拡張子を変えたファイルを作成して、 メモ帳で書き込み、ダブルクリックで実行のテストをしてみた。 ↑test.vbsファイルの作成とテスト ここから、必要な機能(部品)を探っていく。 ファイル名の入力方法を探る ^^^^^^^^^^^^^^^^^^^^^^^^^^ 'xxxx.txt 入力ファイル名を入力(できたら選択) 'xxxx.xls 出力ファイル名を入力(できたら選択) なんて、日本語で書くと楽だよね。 VBscriptで書くとどうなるのか、調べてテストする。 InputBoxが使えるので、 値=InputBox(メッセージ,タイトル,初期値) と値を返してくれるので、 strPATH = InputBox("ファイル名を入力してね","入力ファイル","d:\work\a.txt" ) MsgBox strPATH & "を入力しました。" でテストしました。 ↑InputBoxのテスト なんとか、使えそうですね。 次は、 テキストファイルを開いてみますか。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ VBAのOpenステートメントは使えなくて、FileSystemObjectでアクセスするみたいです。 ↑私がASPでやったことあったので、サクっと書けるけど、  初めてVBScriptやった人は、ここからの調査になる。  ※知識のアリ、無しは別にして、1つ1つつぶしていく。 ASP系の解説 ( http://www.ken3.org/asp/ で、書いてます) ^^^^^^^^^^^ No.10 テキストファイルからデータを読む http://www.ken3.org/backno/backno_asp03.html#10 .ReadLine テキストファイルから1行データを読み込む http://www.ken3.org/cgi-bin/test/test010-1.asp  .AtEndOfStream でファイルの終端をチェックする http://www.ken3.org/cgi-bin/test/test010-2.asp 上記の解説を参考にして、 行数の少ないファイルでテストする、プログラムを作成。 ~~~~~~~~~~~~(いきなり本番データ使わないで、小さなデータで) ファイル操作のオブジェクトを作成して、 データを読み込み、行数と内容をMsgboxで表示してみました ------ ' FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = CreateObject("Scripting.FileSystemObject") ' e:\work\a.txt を読取専用モードで開く Set ts = objFS.OpenTextFile("e:\work\a.txt", 1, True) n = 1 Do While ts.AtEndOfStream = False '*6ファイルの終端になってない間ループ strDATA = ts.ReadLine 'ファイルからデータを一行を読む Msgbox n & "行目:" & strDATA '読み込んだデータを表示 n = n + 1 '行カウンタをUPする Loop ts.close '使ったファイルは閉じようよ ----- ポイントは、 ~~~~~~~~~~~~ CreateObject("Scripting.FileSystemObject") でファイル関係にアクセスするオブジェクトを作成、 Set ts = objFS.OpenTextFile("e:\work\a.txt", 1, True) で、ファイルを開き、 Do While ts.AtEndOfStream = False と、.AtEndOfStreamでファイルの終端をチェックしつつ、 .ReadLineを使い、 strDATA = ts.ReadLine データを読み込みます。 ↑FileSystemObject,.AtEndOfStream,.ReadLineのテスト結果 テキストファイルが読めそうなので、 次は、 ExcelファイルをOpenして、シート切り替え、保存して閉じる。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ それがテストできればOKかなぁ。 オブジェクトを作成して、 b.xlsを開き、シートcを選択、データ代入、保存 そんなシンプルな機能のサンプルを作ってみます。 'test.vbs '^^^^^^^^^ Dim oApp Set oApp = CreateObject("Excel.Application") oApp.Visible = False '不可視にする oApp.UserControl = True 'Excelファイルを開く oApp.Workbooks.Open "E:\work\b.xls" 'シートを切り替える oApp.Sheets("CCC").Select oApp.Cells(2,3) = "テストデータ" oApp.Sheets("DDD").Select oApp.Cells(2,3) = "シートDDDへ書き込む" 'ファイルの保存 oApp.ActiveWorkbook.Save 'ブックを閉じ、アプリも終了 oApp.ActiveWindow.Close oApp.Quit MsgBox "書き込み終了、確認してね" '------------- シートの切り替えや、保存が出来ました。 ※ここで1つ疑問? 選択したシートが無かったら? 入力ファイル仕様 sheet_1 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ で、sheet_1が無かったら?シートを勝手に作る?それとも? あと、もともとあったデータは消してしまう?それとも? こんな感じで、単体で作成していると、仕様の新たな疑問点が発生したりする。 作成前に疑問点や制約事項がわかると、対応がハヤイのでOKかなぁ。 カンマの区切りデータを分ける方法を探る ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ と、カンマ区切りのデータをもらうことが出来ます。 このデータをバラす方法は? ここもASP系のメルマガの力を借りて(オイオイ) Split関数のサンプルを解説 http://www.ken3.org/cgi-bin/test/test024-1.asp で、 strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",") と分解元文字列と区切り文字を渡すと、結果がstrBOXに配列で返ります。 結果 strBOX(0) -- Ken3 strBOX(1) -- ASP不得意 strBOX(2) -- VBA少しできる と、カンマ区切りの文字列から配列を作成できるみたいです。 作成された配列の要素数を知りたいので、 Split関数とUBound関数のサンプルを解説 http://www.ken3.org/cgi-bin/test/test024-2.asp で、使っていた、 strBOX = Split(strMOTO, " ") '区切り文字にスペース指定 For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ のUBoundが使えそうです。 -【けんぞう!】--------------------------------------------------------- 月500円、タバコなら2箱、120円缶コーヒーなら4缶分の謝礼をGetするなら http://www.ken3.org/etc/500yen/ ←無料アンケート系の広告です。 『チッ、がんばって回答して月500円かよ』(お馬鹿なプログラマー:31歳) ※家族4人分の登録でも月2000円、、、なんとかプロバイダー代くらいかなぁ。 ------------------------------------------------------------------------

/* * 4.終わりの挨拶 */

今回は、 プログラムを日本語で箇条書きにして、 まず流れや必要な機能を洗い出す。 その機能を簡単な短いプログラムで確認する。 そんな話を軽く書きました。 部品の確認が終わったら、組み立てなきゃね。 あとは、つなげるだけ・・・ならいいんだけど、いろいろとありそうですね。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

No.142 2003/10/02
単体部品を結合する、接着剤は変数で?
[ページTOPへ戻る]

<単体部品を結合する、接着剤は変数で?>

(VBScriptでTextからExcelシートへデータセット) こんにちは、三流プログラマーのKen3です。 今回は、 VBScriptでTextからExcelシートへデータセットしてみます。

/* * 1. 今回のキッカケ */

VBScriptでTextからExcelシートへのデータをセットする、 そんな処理の依頼を受けました。 依頼内容を勘違いをしつつ、まとめまた話は下記を見て笑ってもらって、 今回は、私の作成方法を軽く書いてみたいと思います。 依頼内容: No.140 ヒアリング、プログラム時にほしい情報をもらい設計する http://www.ken3.org/backno/backno_vba29.html#140 で、 処理概要 xxxx.vbsをダブルクリックしたら、 xxxx.txt 入力ファイル名を入力(できたら選択) xxxx.xls 出力ファイル名を入力(できたら選択) シートへのデータセット処理を開始する。 入力ファイル仕様 sheet_1 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・ A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・ ・ ・ ・ sheet_2 A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・ A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・ 先頭6文字がsheet_の行は、シート名の行で、ここでシートを切り替える その他の行は、データで、A1〜L4へセットする。 と まとめました。(ほぼ、質問そのままなんだけど(オイオイ)) No.141 箇条書きで必要部品を洗い出し単体テストする http://www.ken3.org/backno/backno_vba29.html#141 で、 必要と思われる機能を洗い出し、単体でチェックしました。 今回は、それをつなげて、1つのプログラムにしてみます。

/* * 2.単体部品を結合する、接着剤は変数? */

単体で、関数の機能や環境/言語特性など確認できたら、 機能をつなげて、1つのシステム(システムはオオゲサカな)を作成します。 例をあげると、 ファイル名入力のプログラム ~~~~~~~~~~~~~~~~~~~~~~~~~~ strPATH = InputBox("ファイル名を入力してね","入力ファイル","d:\work\a.txt" ) MsgBox strPATH & "を入力しました。" と Excelファイルを開くプログラム ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dim oApp Set oApp = CreateObject("Excel.Application") oApp.Visible = False '不可視にする oApp.UserControl = True 'Excelファイルを開く oApp.Workbooks.Open "E:\work\b.xls" なら 冗談で、タイトルをつなげると、 ファイル名入力、Excelファイルを開くプログラム ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ strPATH = InputBox("ファイル名を入力してね","入力ファイル","d:\work\a.txt" ) Set oApp = CreateObject("Excel.Application") oApp.Visible = False '不可視にする oApp.UserControl = True 'Excelファイルを開く oApp.Workbooks.Open strPATH となります。 変数を接着剤じゃないけど、固定で作成したテストプログラムを参考にして、 可変部分を変数を使いながら値を渡し、コントロールします。

/* * 3.そんなこんなで作成してみた。 */

下記のようなスクリプトを作成してみました。 部品の単体チェックで精度が上がっているので、 つなげるだけでできました。 (ホントかよ?なんかウソくさいんだよね・・・) 'test.vbs 'エラーチェックしてないけど 'xxxx.txt 入力ファイル名を入力(できたら選択) strIN = InputBox("入力txtは?","入力ファイル","e:\work\a.txt" ) '入力ファイルのオープン ' FileSystemObjectを生成します、、って英文、そのままジャン。 Set objFS = CreateObject("Scripting.FileSystemObject") '読取専用モードで開く Set ts = objFS.OpenTextFile(strIN, 1, True) '※ファイルの存在チェックしろよ↑ 'xxxx.xls 出力ファイル名を入力(できたら選択) strOUT = InputBox("セットするxlsは?","使用ファイル","e:\work\b.xls" ) '出力ファイルのオープン Set oApp = CreateObject("Excel.Application") oApp.Visible = True '可視にする oApp.UserControl = True 'Excelファイルを開く oApp.Workbooks.Open strOUT '※エラーチェックしろよ・・・ '入力ファイルがなくなるまでループ(データのセット) nYLINE = 1 '1行目でシート選択に行くので意味無いけど初期化 Do While ts.AtEndOfStream = False '*6ファイルの終端になってない間ループ strDATA = ts.ReadLine 'ファイルからデータを一行を読む If Left(strDATA, 6) = "sheet_" Then 'シートの切り替えか?チェックする On Error Resume Next oApp.Sheets(strDATA).Select 'シートを選択する If Err.Number <> 0 Then 'シート選択エラーなら 'シートが無いなら、シーと作んなきゃね oApp.Sheets.Add 'シートを追加する oApp.ActiveSheet.Name = strDATA '名前を変更する Else 'エラーが発生してない(正常時は)シート内のデータをクリアする '前回の食べ残しデータをキレイにするか oApp.Cells.Delete '全てのセルを削除する End If 'セットする行番号を1に初期化する nYLINE = 1 Else 'データのセット 'データを分解する strBOX = Split(strDATA, ",") '分解されたデーターをセットする For i = 0 To UBound(strBOX) 'UBound使用インデックス最大値までループ oApp.Cells(nYLINE, i+1) = strBOX(i) 'i番目のデータをセットする Next nYLINE = nYLINE + 1 'セット行位置を次の位置へ End If Loop '後始末 '入力ファイルクローズ ts.close '使ったファイルは閉じようよ '出力ファイルクローズ oApp.ActiveWorkbook.Save 'ファイルの保存 'Excel終了確認 If Msgbox("Excelを閉じますか?", 4) = 6 Then oApp.Quit 'Excelアプリの終了 End If '--------------------- -【けんぞう!】--------------------------------------------------------- 月500円、タバコなら2箱、120円缶コーヒーなら4缶分の謝礼をGetするなら http://www.ken3.org/etc/500yen/ ←無料アンケート系の広告です。 『チッ、がんばって回答して月500円かよ』(お馬鹿なプログラマー:31歳) ※家族4人分の登録でも月2000円、、、なんとかプロバイダー代くらいかなぁ。 ------------------------------------------------------------------------

/* * 4.終わりの挨拶 */

今回は、 単体で確認済みのモジュール/プログラム を 変数を使って、結合して、1つのプログラムとしました。 No.141 箇条書きで必要部品を洗い出し単体テストする http://www.ken3.org/backno/backno_vba29.html#141 もあわせて確認して、 こんな作業の進め方もあるんだなぁ・・・と思っていただければうれしいです。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

No.143 2003/10/05
**********
[ページTOPへ戻る]



No.144 2003/10/05
***********
[ページTOPへ戻る]





検索して目的の情報を探す。

目的の情報を探すには、最近はググれとよく聞きます。なので、検索ボックスを付けました。
いろいろなキーワードを入れて、検索してみてください。

カスタム検索
三流君(site:www.ken3.org) 内を Googleを利用してキーワード する

ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

質問や要望など メッセージを送る(三流君に連絡する)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい



(感想や質問・要望 メッセージはHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

リンクや広告など

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
人気記事(来場者が多い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:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]