データの流れを意識する、情報の探し方など

[VBA系メニューへ] [質問掲示板] [バックナンバー目次]




こんにちは、三流プログラマーKen3です。

今回はデータの流れについて、偉そうに語ってみます。

今回作成したテストプログラム
http://www.ken3.org/p/lzh/off003.lzh
に
Book-003.xlsが保存されてます。
ダウンロードして、動きをチェックして見てください。

/* * 1.データの流れ */

システム化する時は、 やりたいことをはっきりさせる ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ のが、まずはポイントなんですが、 その次が、 データの流れをイメージすることです。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 教科書的な考え方は、 入力 -- 処理 -- 出力のデータの流れです ^^^^^^^^^^^^^^^^^^^^^^^^

/* * 2.復習? */

フォルダーを選択させ、シートにファイル名を書き込む処理を作りました。 まずメインの制御処理ですが、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ フォルダー選択関数から、フォルダー名を受け取る入力があって、 キャンセル判断の処理、 データ表示処理を呼ぶ出力となってます。 *入力が無かったり、処理だけってパターンもあるけど、  これは、処理にはまっているかなぁ。 入力 -- 処理 -- 出力 -- 出力結果によって処理 ...と流れはいろいろあるけど、 基本は、何か入力されて、処理して、結果を出力、、です。
Sub Main()

    Dim strFolder As String '選択されたフォルダーを格納

    'フォルダーを選択させる
    strFolder = getFOLDER()  'フォルダーの選択関数を呼ぶ

    'キャンセルだったら処理を抜ける
    If strFolder = "キャンセル" Then
       Exit Sub
    End If

    '選択されたフォルダーを表示関数に渡し表示する
    Call setFILELIST(strFolder)  'データのセット

End Sub
strFolderの変数の流れに注目すると、なんとなくわかると思います。 処理の関数側では、 Set objShell = CreateObject("Shell.Application") オブジェクトから、 objShell.BrowseForFolder メソッドを使い、フォルダーの選択。(入力) 選択結果を処理して、 結果をリターン値で返してます(出力) 'フォルダー選択ダイアログを表示して、リターン値で選択場所を返す 'キャンセルの時は文字列キャンセル、 'デスクトップの時は文字列を返す
Function getFOLDER() As String

    Dim objShell  As Object 'Shell
    Dim objFolder As Object 'Shell32.Folder
    Const strTitle = "フォルダを選択してください。"

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")

    'フォルダー参照に設定
    Const lngRef = &H1
    'ルートフォルダーをデスクトップに設定
    '5でMy Documents、6でFavoritesなど
    Const fldRoot = &H0
    
    Set objFolder = _
            objShell.BrowseForFolder(0, _
                strTitle, lngRef, fldRoot)
    
    'フォルダー名を取出し、リターン値をセット
    If objFolder Is Nothing Then 'キャンセルチェック
        getFOLDER = "キャンセル"  'リターン値にキャンセルをセット
    Else
        If objFolder.ParentFolder Is Nothing Then
            getFOLDER = "デスクトップ"
        Else
            getFOLDER = objFolder.Items.Item.Path 'パスをセットする
        End If
    End If

    Set objFolder = Nothing
    Set objShell = Nothing

End Function
シートにデータをセットする部分では、 パラメーターでフォルダーを受け取り(入力) ファイル名を見つけ データをシートにセットしてます。 '引数(パラメータ)でフォルダー名をもらい、 'データをA列にセットする
Sub setFILELIST(strFolder As String)

    'A列をクリアする
    Range("A1:A9999").Value = ""  '1行〜9999行に空文字を代入

    Dim strFileName As String  'ファイル名
    Dim nYLine      As Integer '行カウンタ

    '最初のファイル名を取る
    strFileName = Dir(strFolder & "\*.*", vbNormal)
    
    'ファイルが見つからなくなるまでループしてデータをセットする
    nYLine = 1
    Do While strFileName <> ""   ' ループを開始します。
        Cells(nYLine, 1) = strFileName 'セルにファイル名をセットする
        nYLine = nYLine + 1      ' カウントアップする
        strFileName = Dir        ' 次のファイル名を返します。
    Loop

End Sub
データの流れねぇ、、、なんとなくわかったけど、 だから?なに?って感じだよね。

/* * 3.水路の水の流れを変えるように.... */

データの流れを意識して、とか言ってたけど、 わかり易く言うと、水の流れを変えるようにかなぁ。 データをセットしている部分に、 Workbooks.Add '新しいブックを追加 を追加する命令を書くと、 '引数(パラメータ)でフォルダー名をもらい、 'データをA列にセットする
Sub setFILELIST(strFolder As String)

    Workbooks.Add   '新しいブックを追加

    Dim strFileName As String  'ファイル名
    Dim nYLine      As Integer '行カウンタ

    '最初のファイル名を取る
    strFileName = Dir(strFolder & "\*.*", vbNormal)
    
    'ファイルが見つからなくなるまでループしてデータをセットする
    nYLine = 1
    Do While strFileName <> ""   ' ループを開始します。
        Cells(nYLine, 1) = strFileName 'セルにファイル名をセットする
        nYLine = nYLine + 1      ' カウントアップする
        strFileName = Dir        ' 次のファイル名を返します。
    Loop

End Sub
新規のブックを開いて、データがセットされます。 データのセット先、行き先を変えてあげるだけで、 それなりの動きをします。

/* * 4.まとめ */

プログラムを作る時は、要求事項をまずまとめます。 その次は、 入力 -- 処理 -- 出力を意識して、 データの流れを考えます。 なんて思考すると、 このデータをこんな感じで出力したいけど処理がわからない、 など、質問する時や作る時、イメージが沸きやすいと思います。 そんなカッコイイこといってますが、 作りながら出力イメージ変えたり、いろいろと試行錯誤してたりするんですが。。。 教科書的言葉だと、よいシステムは良い設計から...なんて目にしたことあります。

/* * 5.その次は情報収集?単体機能の探し方(三流君の方法) */

プログラムが組める人、と、組めない人の差っていろいろあるんだけど、 その1つが情報の探し方だと思います。 インターネットになんでもあるなんてことは無いけど、 http://www.google.co.jp/ に キーワードを入れて検索すると、よくヒットします。 簡単に、ネットで探せよとボケ、FAQ見たのかコラって話を聞くけど、 探しきれないのも事実です。 ~~~~~~~~~~~~~~~~~~~~~~~~ 私が探した方法を毎回、書いて行けたらなぁと思ってます。 *実際は、目的地まで誘導してもらって、迷わないで行くよりも、  方向だけ教えてもらい、迷いながら進むほうが道を覚えるんだけど。  そのへんのバランスに注意したいですね。 http://www.ken3.org/vba/select.html に、情報の探し方、少し書いてあるので、こっちもヨロシクです。

/* * 6.プロパティ、メソッドを探る方法 */

次に、よく聞く言葉が、 ヘルプを見ろ、そこに書いてあるだろ、目は付いてるのかよ、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ なんて、冷たいお言葉を先輩からいただきます。 ※ひどいのは、日本語はわかるよねぇボク?と幼稚園児扱い。  (まぁ、そんな最悪の関係もありだったりしてね、、、) 確かにおっしゃる通りなのですが、あんまりですよね。 もっとF1を押してヘルプを表示させてみたら、、、 とやさしく言ってくれてもいいのにね。 でも、冷たい、優しいなんて、抜きにして、 覚えて自分のものになったもん勝ちですよ。 そんなの気にしないで、どんどん、まわりに聞きまくりましょう。 っと、その前に、やはりヘルプは見たほうが良いので、 http://www.ken3.org/vba/excel-help.html にヘルプの引き方を少し書いてあるので、ヨロシクです。 F1、ただ、押せばいいってもんでもなくて、 調べたい単語やキーワードにカーソルがある状態で押してね。

/* * 7.実行時エラーの時、変数の確認方法 */

エラーが発生すると、 ~~~~~~~~~~~~~~~~~~~~ どこで? どんな値? 変数の中身は? パラメーターは? など、いろいろと聞かれると思います。 ※ウソつくな、オレ様のルーチンは完璧だ、パラメータがおかしい、  環境がおかしい、OSだろ、ウイルスだキットと騒ぐ先輩も中には居るので、  落ち着いて証拠を押さえてから先輩のところに持って行きましょう。  万引きの誤認逮捕って最悪ですよ、私を犯人扱いにして・・とかなりマズイよ。  とどこかのコンビに店長が言ってたよ(笑) そんな時は、あわてないで、 http://www.ken3.org/vba/debug.html 実行時エラー発生時、あわてないでデバックを押す方法 と http://www.ken3.org/vba/iwind.html イミディエイト ウインドウ と Debug.Print に 簡単なデバック時の確認操作を載せているので、参考にしてみて下さい。 デバックで見る前に、頭の中で流れを整理しろ、、、 と キツイ一言を先輩からもらったりもするんだけどね。 解説って、完成品を見せるのが普通なんだけど、 エラーもたまには載せようと思います。 *単純なスペルミスとか載せないけど、  私が転んだ場所(エラーヶ所)など、恥ずかしいけど載せて行きたいです。 最近私がやったのは、ASP VBScriptだけど、 Microsoft VBScript コンパイル エラー エラー '800a0409' 終了していない文字列型の定数です。 /cgi-bin/g/g009-main.asp, 行 37 Response.Write "<INPUT TYPE='text' NAME='UNAME'><br> ----------------------------------------------------^ なんてことはない、”が後ろ抜けてただけ。。。 こんなのは、メール行数の無駄なので、載せないけど、 価値あるエラー?は、載せてみたいです。

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

拾い読みして、 1つでも何かの参考となれば幸いです。 プログラム作りは簡単で面白いなぁと感じるような 解説/メールマガジンを書きたいと思ってるけど、 なかなかうまくは行かないよね。 よろしくお願いします。 AB型の変わり者、三流プログラマーのKen3でした。

質問・感想を送る

作者に感想・質問/要望を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい

三流君のHP主な飛び先

VBA系のメルマガで書いた解説を項目ごとにまとめてます

[VBAでAccessを操作(一般)]
[VBAでAccessのレポートを操作]
[VBAでAccessのUserForm/サブフォームを操作]
[VBA Access から Excel 連携]

[VBA でExcel オブジェクト/プロパティ/メソッド/一般]
[VBA でExcel UserForm(ユーザーフォーム)を操作する]
[VBA ExcelからAccessを操作する]

[VBA Outlookの操作]
[VBA IEの操作]
[VBA テキストファイル(*.txt,*.html,*.csv)の操作]
[VBA標準関数関係とその他解説]

ASP系の解説を項目ごとにまとめてみました

[ASP Form等を使用したデータのやり取り]
[ASP その他処理サンプル]
[ASP テキストファイル処理]
[ASP VBScript関数関係の説明]
[ASP ADOでMdbファイルを使う]
[ASP ADOでExcelと接続してみた]

分類別

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
VBAで楽しくプログラミング 掲示板 バックナンバー メルマガ登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー メルマガ登録と解除
ASPで遊ぶ、失敗する 掲示板 バックナンバー メルマガ登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー メルマガ登録と解除
初心者にやさしいプログラム 掲示板 バックナンバー メルマガ登録と解除
ネットで稼ぐ本音と失敗談 掲示板 バックナンバー
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他、宣伝ページです

・[ アンケート/ポイント]などで月500円を必死に稼いでます(笑)
・[ SOHO/在宅プログラマー/派遣]の話題、Webエントリー後の反応など
・[ ネットで小金を稼げるか?]実験中だが成果は無し
※あとは、[パソコン関係の書籍]や[ゲームソフト]、 [パソコンパーツ] をバナーから売ろうとするけど、
 なかなかうまくはいかないよね(笑)

楽天の商品売れ筋ランキング紹介ページ

ドリンク

[コーヒー・ココア] [ソフトドリンク] [ハーブティー] [ビール・地ビール] [ワイン] [中国茶] [中国酒] [日本茶] [日本酒] [水・ミネラルウォーター] [洋酒] [焼酎] [紅茶] [その他(ドリンク)]

グルメ・フード

[キムチ・漬け物] [チーズ・乳製品] [パン] [フルーツ・野菜] [] [惣菜・食材] [中華料理・惣菜] [和風料理・惣菜] [洋風料理・惣菜] [水産物・水産加工品] [] [肉・肉加工品] [菓子] [調味料] [麺類] [その他(フード)]

ファッション

[インナーウェア・ナイトウェア] -- [ショーツ] [ブラジャー] [ストッキング] [キャミソール] [スリップ] [ガードル] [補正下着] [マタニティ用下着] [ナイトウェア]
[カジュアル] -- [Tシャツ] [シャツ] [カットソー] [セーター] [カーディガン] [ジーンズ] [パンツ] [ジャンバー・ブルゾン] [スカート]
[レディース・婦人服] -- [スーツ] [ワンピース] [スカート] [パンツ] [ブラウス] [フォーマル]
[ジュエリー・アクセサリー] -- [指輪] [ネックレス] [ペンダント] [イヤリング] [ピアス] [ブレスレット] [ジュエリーボックス・ケア用品]
[香水] -- [シャネル] [クリスチャン・ディオール] [ジバンシー] [グッチ] [ブルガリ]
[メンズ・紳士服] [メンズ-スーツ] [メンズ-シャツ] [メンズ-トランクス] [メンズ-ブリーフ] [メンズ-ボクサーパンツ] [メンズ-Tシャツ] [トレーナー・パーカー] [メンズ-ポロシャツ] [メンズ-カットソー] [メンズ-セーター] [メンズ-カーディガン] [メンズ-ジーンズ] [メンズ-ジャンバー・ブルゾン]
[バッグ] [] [ベビー・キッズ・マタニティ] [和服] [眼鏡・サングラス] [コンタクト・コンタクト用品] [腕時計] [雑貨・小物] [スイムウェア]

パソコン・家電・AV

[オフィス・サプライ] [コンパクトカメラ] [デジタルカメラ] [ビデオカメラ] [一眼レフカメラ] [ソフトウェア] [パソコン・コンピュータ] [デスクトップパソコン] [ノートパソコン] [モバイル・携帯電話] [周辺機器パーツ] [スキャナ] [プリンタ] [家電・AV] [エアコン・空気清浄機] [オーディオ] [冷蔵庫・冷凍庫] [掃除機] [映像機器]

生活・インテリア

[家具・インテリア] [手芸・クラフト] [文具] [日曜大工・作業用品] [日用品・生活雑貨] [食器・調理用具]

ヘルス・ビューティ

[ダイエット] [健康用品] [サプリメント] [医薬品] [福祉・介護] [美容・化粧品] [スキンケア] [メイクアップ]

スポーツ・アウトドア

[アウトドア] [ウィンタースポーツ] [サッカー] [ストリート系スポーツ] [テニス] [トレーニング] [フィッシング] [マリンスポーツ] [自転車] [野球] [スポーツグッズ] [格闘技グッズ] [その他スポーツ・用品]

フラワー・ガーデン

[エクステリア] [ガーデニング] [フラワー・花] [植木] [観葉植物] [造花]

ホビー・ペット・コレクション

[アート・美術品] [おもちゃ] [ペット・ペットグッズ] [占い・開運] [囲碁・将棋] [楽器] [趣味・コレクターグッズ]

CD・DVD・ゲーム

[CD・カセット] [DVD・LDソフト] [アニメ(DVD・LD)] [ミュージック(DVD・LD)] [洋画] [邦画] [テレビゲーム] [ビデオ] [音楽CD] [R&B] [アニメソング] [ジャズ] [ダンス&ソウル] [ヒップホップ] [ロック・ポップス(洋)] [ロック・ポップス(邦)]

車・バイク

[カー用品] [カーナビ] [カーオーディオ] [タイヤ・ホイール] [洗車用品] [バイク]

ゴルフ

[ゴルフ・クラブ] [ゴルフ・シューズ] [ゴルフ・ウェア] [ゴルフ・バッグ] [ゴルフ・ボール] [ゴルフ・小物] [ゴルフ・トレーニング用具]