EXCEL VBA

Excel-VBA プログラムの一部を自動で作成して効率アップ!

EXCEL VBA

こんにちは! 健史です。

プログラムを作成するときは、設計書であるプログラム仕様書があります。

仕様書の項目編集仕様の'項目名'がコーディングで使用できるファイルやテーブルの項目名から「項目を移送する部分を作成するプログラム」を紹介します。


項目数が100も200もあったら、また一つひとつにコメントも追加するといった場合には、単純作業ですが時間だけでなくストレスも掛かります。

完璧なコーディングとまでいかなくても項目移送の部分だけでも作成できれば効率的ですし、あとは編集仕様に合わせて修正すればよいのですから。

スポンサーリンク

処理概要

サンプルの言語はCOBOLです。

項目編集仕様書のB列[出力ファイル項目名]、F列[項目名・編集内容]から、

H列に項目移送コマンドやコメントを作成します。

H列をサクラエディタに転記したものです。

入出力ファイルのレイアウトが同じであったり、レイアウトが同じでなくても同じ項目があったりしますが、その場合でも入力と出力には異なる名前を付け一意にする必要があります。

COBOLではファイル定義情報の先頭文字を[INP1-][OUT1-]を任意にできるようになっています。

Oracleでも同じようにできますが、他の言語プログラムでもできることでしょう。

プログラム

Sub make1()
'変数定義
    Dim ix1, ix2 As Long
    Dim pos_len, pos_len1, tmpCnt As Long
    Dim strTxt As String
'初期設定
    Sheets(1).Columns(8).Cells.Clear
    ix1 = 2
    ix2 = 0
'項目編集処理
    Do Until Sheets(1).Cells(ix1, 1) = ""
'   項目№コメント
        strTxt = "* "
'     数字の位置を揃えるため空白数を調整する処理
        Select Case Sheets(1).Cells(ix1, 1)
        Case Is < 10          '  __1 となるように編集(_は空白の意)
            strTxt = strTxt & "  " & Sheets(1).Cells(ix1, 1)
        Case Is < 100         '  _10 となるように編集(_は空白の意)
            strTxt = strTxt & " " & Sheets(1).Cells(ix1, 1)
        Case Else             ' 3桁の場合は空白無しでそのままセット
            strTxt = strTxt & Sheets(1).Cells(ix1, 1)
        End Select
        strTxt = strTxt & "." & Sheets(1).Cells(ix1, 2)
'     H列へセット
        ix2 = ix2 + 1
        Sheets(1).Cells(ix2, 8) = strTxt
'   項目移送
        strTxt = "     MOVE  INP1-" & Sheets(1).Cells(ix1, 2)
'     空白数を求め、空白を置く処理
        pos_len = LenB(StrConv(Sheets(1).Cells(ix1, 2), vbFromUnicode)) '①バイト数を求める
        pos_len1 = 24 - pos_len      '②配置する空白数を求める
        For tmpCnt = 1 To pos_len1   '③空白を配置するループ
            strTxt = strTxt & " "
        Next
        strTxt = strTxt & "TO  OUT1-" & Sheets(1).Cells(ix1, 6) & "."
'     H列へセット
        ix2 = ix2 + 1
        Sheets(1).Cells(ix2, 8) = strTxt
'  次行の読み込み
        ix1 = ix1 + 1
    Loop
End Sub

補足説明

空白数を求め、空白を置く処理についてです。 

見やすさの観点から各行の文字位置を揃えます。

①バイト数を求める
全角と半角が混在している項目名もあります。

そのためF列[項目名・編集内容]の文字数について[pos_len = LenB・・・]でバイト数を求めますが、Lenb関数だけでは求めることはできません。

詳しくは以下を参照願います。

Excel-VBA LenBだけではバイト数は求めることはできない!
こんにちは! 健史です。 ExcelVBAで文字列のバイト数を求める関数について、 だけでは想定するバイト数は求めることはできません! 以下'ABC'は半角であり3バイト、'項目'は4バイト、合計の'7'が表示されるはずですが、1行目は'1...

②配置する空白数を求める
F列[項目名・編集内容]を配置する文字数全体から、F列[項目名・編集内容]の文字数を差し引いて、空白数を求めます。

③空白を配置するループ
②で求めた空白数を付加していきます。

最後に

プログラムで作成すればミスや漏れはありませんが、手作業での編集ではミスや漏れによるストレスもあります。

数少ない項目編集であれば手作業でも構いませんが、多い場合にはプログラムを作成して対応することでQCD(品質・コスト・納期)の改善に加え、応用の幅が広がり、手作業とは異なる達成感や満足感も得られると思います。


正式な項目編集仕様書でなくても、例えばOracleの定義文などを加工編集したり、すでに作成済みのプログラムから参照できる部分を入力にしてもよいでしょう。

参考にして頂ければと思います。

EXCEL VBA
スポンサーリンク
- 面白かったらシェアお願いします! -
健史をフォローする
自分で改善

コメント