何度も同じフォーマットをコピペして編集したくない人の為に

沖縄拠点の久保田です。

何度も同じフォーマットをコピペして編集したくない人向けのテクニックを紹介したいと思います。

用意するソフトウェアは以下となります。

■必要な環境
Microsoft Excel 2016

まずは完成形から見ていきましょう。

※完成図

  1. [@雛形]セルの1つ下のセルに雛形を書きます。置き換えた対象となる部分に[@01]や[@02]のように設定します。
  2. [@値]セルの1つ下のセルに雛形で使用するパラメータ[@01]や[@02]を設定します。行を増やしながら埋め込みたい値を設定します。
  3. [実行]ボタンを押下後、クリップボードに出力結果が設定されます。

■クリップボードへの出力結果

$param = array(
    "corp"    => "06",
    "account" => "19000001",
    "id"      => "487012345",
    "phoneNo" => "0746669999",
    "pay" => "1",
    "verify"  => "6654"
);
$param = array(
    "corp"    => "06",
    "account" => "19000002",
    "id"      => "487012346",
    "phoneNo" => "0746670000",
    "pay" => "2",
    "verify"  => "7777"
);
$param = array(
    "corp"    => "39",
    "account" => "19000006",
    "id"      => "487012350",
    "phoneNo" => "0746670004",
    "pay" => "1",
    "verify"  => "1111"
);

こんな感じのツールです。

何故このツールを作ろうと思ったのか

何故このツールを作ろうと思った経緯ですが、getter や setter を大量に半手動で作らないといけない事があり(今では便利なプラグインがあるのですが、)さらに、コメントも決まったフォーマットで書かないといけないという事がありました。

この時はインターネットにも接続できない環境で、必要なプラグインの入手までに時間がかかりました。(プラグインやツールの申請に1週間程かかりました)

例えば↓のような場合です。

  /** 画面ID */
  private String screenId;

  /**
   * 画面IDを取得します。
   * @return 画面ID
   */
  public String getScreenId() {
    return screenId;
  }

  /**
   * 画面IDを設定します。
   * @param screenId 画面ID
   */
  public void setScreenId(String screenId) {
    this.screenId = screenId;
  }

あー、もうこんなの手動で書くなんて信じられませんね。

getter, setter までは自動で出力してくれますが、コメントの形式までプロジェクトで決められていて、IDEの内包ツールではそこまで対応していませんでした。
手動でなんてやってたら時間かかるしミスは出るしで良い事なんて1つもありません。

そこで限られた環境で効率化を図る事にしたのです。

実際に作ってみよう

と、いうわけでここからは本ツールの作成方法を書きたいと思います。

※[開発]タブを使用しますので、表示されていない方は 、[ファイル] → [オプション] → [リボンのユーザー設定] の[リボンのユーザ設定]の[開発]チェックボックスをオンにして、事前に [開発]タブ を表示して下さい。

まず、下のような感じでシートを作成します。

[開発]タブ → 挿入 → フォームコントロール[ボタン]を選択して、任意の場所にボタンを配置します。

ボタンを配置するとマクロの登録画面になりますので、何も変更せず[新規作成]ボタンを押して下さい。

[ Visual Basic Editor ]が起動しますので、以下のソースを貼り付けて保存して下さい。
私の環境では Subプロシージャ [ボタン10_Click()]ですので、自身の環境に合わせて修正して下さい。

Sub ボタン10_Click()

    Dim Rng As Range
    Set Rng = Cells.Find(What:="@値", LookIn:=xlValues, LookAt:=xlWhole)
    If Rng Is Nothing Then
        MsgBox "@値セルが存在しません。"
    End If
    
    Dim tempRng As Range
    Set tempRng = Cells.Find(What:="@雛形", LookIn:=xlValues, LookAt:=xlWhole)
    If tempRng Is Nothing Then
        MsgBox "@雛形セルが存在しません。"
    End If
    
    Dim valueRow As Integer
    Dim valueCol As Integer
    
    valueRow = Rng.Row
    valueCol = Rng.Column
    
    If Not Cells(valueRow + 1, valueCol).Value = "@01" Then
        MsgBox "@値セルの直下に@01セルを定義してください。"
        Exit Sub
    End If
    
    valueRow = valueRow + 1
    
    Dim cValueArray As New Collection
    
    Do
        If Cells(valueRow, valueCol) = "" Then
            Exit Do
        End If
    
        cValueArray.Add Cells(valueRow, valueCol)
    
        valueCol = valueCol + 1
    Loop
    
    valueRow = valueRow + 1
    
    Dim result As String
    Dim tempStr As String
    Dim tempFlg As Boolean
    
    Do
        valueCol = Rng.Column - 1

        tempFlg = False
        
        ' 値存在チェック
        For i = 1 To cValueArray.Count
            If Not Cells(valueRow, valueCol + i) = "" Then
               tempFlg = True
               Exit For
            End If
        Next
        
        ' 値が無い場合終了
        If Not tempFlg Then
            Exit Do
        End If
        
        tempStr = Cells(tempRng.Row + 1, tempRng.Column).Value
        
        ' templateを置換文字で実行
        For i = 1 To cValueArray.Count
            tempStr = Replace(tempStr, cValueArray(i), Cells(valueRow, valueCol + i))
        Next
        
        ' 置換後の文字列を
        result = result + tempStr + vbLf
        
        ' 次の行へ移動
        valueRow = valueRow + 1
    Loop
    
    result = Replace(result, vbLf, vbCrLf)
    
    Dim CB As New DataObject
    With CB
        .SetText result
        .PutInClipboard
    End With
    
    MsgBox "実行結果をクリップボードへコピーしました。"
End Sub

[ Visual Basic Editor ] 画面 を閉じます。
では、先ほど配置したボタンを押してみましょう。メッセージボックスに「実行結果をクリップボードへコピーしました。」と表示されれば完成です。テキストエディター等に貼り付けして出力結果を確認して下さい。

■メモ帳に貼り付け結果

シートをコピーして増やすことで、雛形を多数準備する事も可能です。

作成にはVBAの知識が少し必要ですが、[マクロの記録]で必要なコードを収集しながら作成する事も可能ですので、是非VBAを使っていろいろ作成してみて下さい。

便利な使い方

便利な使い方をするには、まずインプットデータを本ツールにあまり加工せずに貼り付けできる状態が好ましいです。

例えばテーブル定義書です。

テーブル定義書のカラムの 物理名と論理名を使用して、コードとコメントを書く時に役に立ったりします。

エクセルなので当然セル内に関数を埋めこんだり、別シートのセルを参照したりできるわけで、それだけでも利用方法が広がると思います。

いろいろ工夫して使ってみて下さい。

<免責事項と注意事項>

本ページの内容について

  • 発生した一切の損害(機会の損失、結果的損害等を含む)について、いかなる責任も負いません。
  • ご利用は各個人での私的な使用に限るものとし、商用又は、営利を目的として、また公共の場での使用を一切禁止します。