[三流君] −−> [VBAで楽しく] −−> [バックナンバー一覧]

三流君VBA:プログラムの修正・追加のいろいろな方法?開発の進め方?

発行内容

プログラムの修正・追加のいろいろな方法?開発の進め方?

どうも、三流プログラマーのKen3です。

今回は、
プログラムの修正・追加のいろいろな方法?
について、少し書いてみます。

自分でも読み返すとあまり参考にならないのですが、
せっかく書いたので発行しちゃいます。
(読者の声:そんなことしてるから、最近のメルマガの質が落ちてるんだってば)

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

前回のメルマガで、 全角英数字を半角にする下記のサブルーチンを作成した。
Function 全角ABCto半角ABC(strMOTO As String) As String
    Dim strRET As String
    Dim strCHK As String
    Dim n As Integer
    Dim lngCODE As Long
    
    strRET = "" 'リターン値の初期化
   
    '文字数分コードを調べて変換して、strRETに+する
    For n = 1 To Len(strMOTO)
        strCHK = Mid(strMOTO, n, 1)  'n番目の文字を取り出す
        Select Case Asc(strCHK)
            Case Asc("0") To Asc("9") '全角0〜9
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("a") To Asc("z") '全角a〜z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("A") To Asc("Z") '全角A〜Z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Else  'その他
                strRET = strRET & strCHK  '上記以外はそのまま+する
        End Select
    Next n

    '変換結果を返す
    全角ABCto半角ABC = strRET     'リターン値の代入(変換結果の代入)
End Function
Sub test()  'テスト確認用
    Dim strWORK As String
    strWORK = "Windows 2003 デバイスドライバ入門 "
    MsgBox 全角ABCto半角ABC(strWORK)
End Sub
ところが、このプログラムだと、下記のデータで不具合が発生した テストデータ: "Excel VBA(ブイビーエー) 2000/2002/2003対応" や ".NETエンタープライズWebアプリケーション開発技術大全(vol.2)" 結果: ()/.が半角とならない ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/* * 2.原因と対策を立てる */

プログラマーの言い分 ------ はぁ〜 "Excel VBA(ブイビーエー) 2000/2002/2003対応" や ".NETエンタープライズWebアプリケーション開発技術大全(vol.2)" で 結果: ()/.が半角とならない ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ だと・・・ 原因はクソSEがテストデータ/テスト仕様書で "Windows 2003 デバイスドライバ入門 " しか渡さないからでしょ。 関数名もぷっ[全角ABCto半角ABC]だって(笑)、 ここからカッコやドットの変換をするんだと読み取れって? もっとまともな仕様を書けよ、オレ様が作ってやるから ---- あらら・・・かなり言われちゃってますね、 人間関係悪い!! ^^^^^^^^^^^^^^^^ なんてのは置いといて、 まず、全体的な原因は仕様の不足って感じですね。 次にプログラム的な原因は、 ()/. の変換処理が抜けているので、この処理を追加すれば直ります。 まぁ、追加の方法はいろいろとあるんだけど。

/* * 3.B君 外側に追加 Replace関数でリターン値を置き換える */

プログラマーA君との相性が悪いので(オイオイ) 日頃から飲みに連れてってかわいがっているB君に修正を依頼した。 A君が作ったプログラムに ()/. も半角に変換する処理を追加してくれよ B君はA君に気を使い、 えっと、A→A,a→a,9→9はできているから、 付け足して、最後にReplaceで変換しますか。 テストプログラムと追加修正したモジュール
Function 全角ABCto半角ABC(strMOTO As String) As String
    Dim strRET As String
    Dim strCHK As String
    Dim n As Integer
    Dim lngCODE As Long
    
    strRET = "" 'リターン値の初期化
   
    '文字数分コードを調べて変換して、strRETに+する
    For n = 1 To Len(strMOTO)
        strCHK = Mid(strMOTO, n, 1)  'n番目の文字を取り出す
        Select Case Asc(strCHK)
            Case Asc("0") To Asc("9") '全角0〜9
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("a") To Asc("z") '全角a〜z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("A") To Asc("Z") '全角A〜Z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Else  'その他
                strRET = strRET & strCHK  '上記以外はそのまま+する
        End Select
    Next n

    '追加で()/.を変換する
    strRET = Replace(strRET, "(", "(") 'カッコ
    strRET = Replace(strRET, ")", ")")
    strRET = Replace(strRET, "/", "/") 'スラッシュ
    strRET = Replace(strRET, ".", ".") 'ドット

    '変換結果を返す
    全角ABCto半角ABC = strRET     'リターン値の代入(変換結果の代入)
End Function
Sub test()
    Dim strWORK As String
    Debug.Print "テスト結果:" & Now
    strWORK = "Excel VBA(ブイビーエー) 2000/2002対応"
    Debug.Print 全角ABCto半角ABC(strWORK)
    strWORK = ".NETエンタープライズWebアプリケーション開発技術大全"
    Debug.Print 全角ABCto半角ABC(strWORK)
End Sub
テスト結果: Excel VBA(ブイビーエー) 2000/2002対応 .NETエンタープライズWebアプリケーション開発技術大全 バカくさいけど、 ある一部の処理はできているんだから、 外側に追加してみました。 A君が作った処理も尊重しつつ気を使って修正しました。 ※全部修正するとA君の面子もあるしね・・・

/* * 4.C君 途中に判断を追加する(Case文を追加する) */

さてと、面白そうだからC君にも同じ修正を頼むかな A君が作ったプログラムに ()/. も半角に変換する処理を追加してくれよ C君は素直に、 えっと、A→A,a→a,9→9の判断ができているので、 Case 文を付け足して変換てみます。 テストプログラムと追加修正したモジュール
Function 全角ABCto半角ABC(strMOTO As String) As String
    Dim strRET As String
    Dim strCHK As String
    Dim n As Integer
    Dim lngCODE As Long
    
    strRET = "" 'リターン値の初期化
   
    '文字数分コードを調べて変換して、strRETに+する
    For n = 1 To Len(strMOTO)
        strCHK = Mid(strMOTO, n, 1)  'n番目の文字を取り出す
        Select Case Asc(strCHK)
            Case Asc("0") To Asc("9") '全角0〜9
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("a") To Asc("z") '全角a〜z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
            Case Asc("A") To Asc("Z") '全角A〜Z
                strRET = strRET & StrConv(strCHK, vbNarrow) '変換して+
                
            Case Asc("(")             '( カッコ
                strRET = strRET & "("  '半角の(を+する
            Case Asc(")")             ') カッコ
                strRET = strRET & ")"  '半角の)を+する
            Case Asc("/")             '/ スラッシュ
                strRET = strRET & "/"  '半角の/を+する
            Case Asc(".")             '.ドット
                strRET = strRET & "."  '半角の.を+する
            
            Case Else  'その他
                strRET = strRET & strCHK  '上記以外はそのまま+する
        End Select
    Next n

    '変換結果を返す
    全角ABCto半角ABC = strRET     'リターン値の代入(変換結果の代入)
End Function
Sub test()
    Dim strWORK As String
    Debug.Print "テスト結果:" & Now
    strWORK = "Excel VBA(ブイビーエー) 2000/2002対応"
    Debug.Print 全角ABCto半角ABC(strWORK)
    strWORK = ".NETエンタープライズWebアプリケーション開発技術大全"
    Debug.Print 全角ABCto半角ABC(strWORK)
End Sub
修正方法としては、 Case Asc("(") '( カッコ strRET = strRET & "(" '半角の(を+する と、各文字を判断して、リターン値のstrRET変数に追加しました。

/* * 5.やっぱりダメか?何も考えないでプログラムを作りやがる */

同僚のSEに愚痴をこぼす。 ( 愚痴系↓みたいなネタですが、お許しを http://www.ken3.org/guchi/ --- プログラマー関係の話を混ぜて語る本人の愚痴 ) やっぱりダメかアイツらは、言われた通りしかプログラムを修正しない。 えっ、別にそれでいいんじゃない?その為の仕様書でしょ? まぁ、聞いてよ。別に怒った訳、イヤミを言うつもりはないんだけど、 >原因はクソSEがテストデータ/テスト仕様書で >"Windows 2003 デバイスドライバ入門 " >しか渡さないからでしょ。 > >関数名もぷっ[全角ABCto半角ABC]だって(笑)、 >ここからカッコやドットの変換をするんだと読み取れって? >もっとまともな仕様を書けよ、オレ様が作ってやるから なんて言われたから売り言葉に買い言葉、逆切れには逆切れで、 君達は、VBAやVB.NETしか知らないと思うけど世の中には、 Visual C#.NETプログラミング入門 とか Microsoft Visual C++ .NETランゲージリファレンス なんて感じで、C#やC++って言語が存在するんだよ それに対して書籍が数点出ているの、VBよりは数量売れていないかもしれないけど、 職業プログラマーの君達は聞いたこと無かったの? ABC君一斉に:そんなの仕様書に載ってないでしょチャント仕様書書いてくださいよ うるせえなぁ、どこまで細かく仕様書書けばいいんだよそれくらい読み取れよ。 作りながら疑問に思わないの?その他変換する文字種類は無いのか?と・・・ ストップ、もうやめなどっちもどっちだよ、聞きたくない。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

/* * 6.部分から全体を読むのは不可能、作らなくても全体や背景も見せる */

なんで醜い争いが発生するのか? 仕様書の不備だけじゃなくで進め方にも問題があったり。 プログラムやシステムは、必要だから作ります。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ その最小単位のモジュールも当然必要だから作ります。 なぜ?必要か? どこで?使用するのか? どんな場面で使用するのか? 全体像や背景も説明すると 仕様書の行き違いがあっても作業者から質問が来てカバーできると思う。 全角英数字を半角にする と仕様書に一言書いておくだけじゃなく、 その背景、 http://h17-may.sazae.jp/Buy-Rakuten/Day18.html ↑書籍の売れ筋ランキングを紹介するhtmlで、 Windows Server 2003 Network とか、 タイトルが全角の英数字になってます。 ^^^^^^^^^^^^^^^^^^^^ これを半角の Windows Server 2003 Network にしたいです と一言、背景や全体像の説明があると、 たとえ仕様書に不備があっても、 作業者から、AtoZ,0to9以外の文字は変換しなくてもいいのですか? など、仕様書に対する疑問も沸いて来ると思う。 ↑なんて考えはもしかしてシステム屋的じゃないのかもしれないね、、、  プログラマーの技量、読解力に頼って仕様書の不備を原因としないのは・・間違い?

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

今回は、 プログラムの追加・修正方法? そんな話でした。 プログラム作りは ^^^^^^^^^^^^^^^^ テクニックなのか? それとも 人の心なのか??? なんか、後半違う話にスリカワッテイルケドご勘弁を。 まぁ、人それぞれ、十人十色、百社百色だけどね。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 次回に含みを持たせつつ、今回も逃げるように失礼します。 AB型の変わり者、三流プログラマーのKen3でした。


フィードバック

VBA系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.173を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

ページフッター(リンクや広告など)


[三流君(TOP ken3.org へ戻る)]
-- [VBA系TOPへ]
---- [VBA系バックナンバー目次へ移動]
------ [VBAでIEを操作 CreateObject("InternetExplorer.application")]・・・実は当店一番人気、VBAでIEを操作するサンプルです
------ [VBAでOutlookの操作 CreateObject("Outlook.Application")]・・・Outlookを使い、メール関係の処理です
------ [Access から Excel 連携 CreateObject("Excel.Application")]・・・人気のAccessからExcelへデータ書き出しなどです
------ [AccessのUserForm/サブフォームを操作]・・・アクセスでフォームを使ったサンプルです
------ [Accessのレポートを操作]・・・レポートを操作してみました
------ [Access クエリー関係やその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です
------ [Excel UserForm(ユーザーフォーム)を操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
------ [ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
------ [Excel関係 関数、その他]・・・その他Excel関係です
------ [VBAでテキストファイル(*.txt,*.html,*.csv)の操作]・・・テキストファイルを使ったサンプルです
------ [VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます


広告
-- [通販系の売れ筋広告へ] ←主に楽天やAmazonのランキングです
blog
-- [三流君の作業日記] ← 日々の作業を少々
-- [通販あしあと] ← 通販ページの足跡を一覧で羅列

情報を探す

情報を探すならGoogleかな?

↓Web全体、サポート情報(support.microsoft.com)や三流君VBA(ken3.org)から検索する
Google
Web www.ken3.org
www.microsoft.com support.microsoft.com

あとは、項目別にMSでお勉強かな?
◆ マイクロソフト サイトの歩き方
◇ How-To インデックス
◇ FAQ インデックス
◇ スキルレベル別おすすめコンテンツ
◇ テクノロジ マップ
◇ テーマ別技術資料一覧

書籍の購入

Webだけじゃさすがに勉強しきれないので、プログラミング関係の書籍も読んでみては??

コンピュータ書籍の発送がハヤイ専門店

コンピュータの本・専門店
種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。
お奨め本の目次を見るだけでも勉強になったり

amazon.co.jpでキーワード別チェック

下記、私が設定したキーワードですが、こんな感じで資料や書籍を探ってみては?
[VBA全体を把握する] -- やはり全体をさらっと見たいですよね。
[SQL関連でDB力UP] -- システムはデータベース設計が重要
[ADO接続を探る] -- VBAなのでADO接続を押さえておく
[Windows APIを探る] -- さらにAPIになて知ってれば強力だ!
[.NETを探る] -- と言っても時代は.NETに流れてるし
プログラミング以外でも知りたいことは多くって、
[人間関係] -- で、客先・上司、まわりに気を使い。
[プログラマーの自己啓発] -- プログラムだけじゃなくいろいろと向上したいよ
[コーチング・育成] -- 先輩になったら後輩(部下)の面倒をみてね。
そんなこんなでプログラマーっていろいろと大変なんだってば・・・