LoginSignup
6
9

More than 5 years have passed since last update.

Excelにソースコードの雛形など複数行データを効率的に格納/編集したい

Last updated at Posted at 2015-08-14

概要

Excelを使ってc#ソースコードの雛形を管理しています。
ソースコードの自動生成(オリジナルのスキャフォールド)を開発するために、いろいろと試行錯誤した結果、Excelにコードの雛形を入れて、管理する楽な方法をみつけたのでメモします。

要件

1.ソースコードの雛形などの複数行データを効率的に保存/編集したい
2.編集時は一時的にエディタを使って複数行を楽に編集したい
3.ソースコードの雛形を管理するためのパラメータを保存したい

実現イメージ

エクセルで管理している複数行のデータをエディタで開いて編集しているところです。
image

実装

2.の部分は、以下のようなVBAでメモ帳アプリとの連携を実現しました。
ソースコードの管理に限らず、複数行のデータをエクセルで管理する場合におすすめです。
ショートカットキー CTRL + E 等と関連付けておくと、更に便利です。

vba
Option Explicit
Const CodeColumnNo As Integer = 2

Public Sub EditCode()
    Application.ScreenUpdating = False
    Dim FN, Folder As String
    Dim fso, TextFile, wsh As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set wsh = CreateObject("WScript.Shell")

    '--- 適当なファイル名を作成
    FN = Cells(ActiveCell.Row, 1) & "_" & Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) & ".txt"
    Folder = ThisWorkbook.Path & "\Temp\"
    If fso.FolderExists(Folder) = False Then
        fso.CreateFolder Folder
    End If

    '--- セルに格納されたソースコードをテキストファイルに出力
    With fso.CreateTextFile(Folder & FN)
        .Write Replace(Cells(ActiveCell.Row, CodeColumnNo), vbLf, vbCrLf)
        .Close
    End With

    '--- テキストファイルを開いて閉じられるまで待機
    wsh.Run """" & Folder & FN & """", , True

    '--- テキストファイルに保存された変更内容をセルに書き戻す
    With fso.OpenTextFile(Folder & FN)
        Set TextFile = fso.OpenTextFile(Folder & FN)
        Cells(ActiveCell.Row, CodeColumnNo) = Replace(TextFile.ReadAll, vbCrLf, vbLf)
    End With
    SetCodeColumnStyle ActiveCell.Row
    Application.ScreenUpdating = False
End Sub

Public Sub SetCodeColumnStyle(i_Row As Integer)

    '--- 長いコードは鬱陶しいので縮小モードにする
    With Cells(i_Row, CodeColumnNo)
        If Cells(i_Row, CodeColumnNo) <> "" Then
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = True
            .ReadingOrder = xlContext
            .MergeCells = False
        End If
    End With
End Sub

・リポジトリ
https://github.com/Implem/Implem.CodeDefiner

・マクロ格納先
https://github.com/Implem/Implem.CodeDefiner/tree/master/Implem.CodeDefiner/App_Data/Definitions

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9