MS Excelのバージョン管理を行う最良の方法


172

MS Excel(2003/2007)でどのバージョン管理システムを使用しましたか?あなたは何をお勧めしますか、そしてなぜですか?最高評価のバージョン管理システムにはどのような制限がありますか?

これを展望するために、ここにいくつかのユースケースがあります:

  1. VBAモジュールのバージョン管理
  2. 複数のユーザーがExcelスプレッドシートで作業していて、同じワークシートに変更を加えている可能性があります。それらをマージして統合したいと考えています。このワークシートには、数式、データ、グラフなどが含まれている場合があります
  3. ユーザーはあまり技術的ではなく、使用するバージョン管理システムの数が少ないほど良い
  4. スペースの制約は考慮事項です。Excelスプレッドシート全体ではなく、増分変更のみが保存されるのが理想的です。

17
Google Apps / DocsにはMS Excelの完全な機能はありません。モデリングなどの高度な作業を行う必要があります。
TheObserver

25
@Richieコットン。それが実用的なオプションである場合(つまり、matlab / pythonを使用する場合)、すべての金融会社は今までに切り替えていただろう。金融モデルを分析するがプログラマーではない人々にプログラマーになるように依頼することは、全体として危険に満ちており、現実的に非現実的です。
匿名タイプ

1
stackoverflow.com/q/608872/107537ここで同様の質問を参照してください。ただし、ワークシート自体は扱いません。VBAコードのみ。
Vijay

7
信用収縮のためのExcelの非難モデルは、AAAとして意図的にジャンクを販売する詐欺師である可能性が高いです。投資ががらくたであることを伝えるのにスプレッドシートは必要ありません。私は財務担当者であるため、どのモデルにも完全に依存することは、お尻をなくすための確実な方法だと言えるでしょう。さらに、どのモデルも、それを作成した人々と同じくらい優れています。アインシュタインの仕事をするためにモートを雇えば、あなたは悪い時間を過ごすことになります。
エリックJ

VBAマクロのバージョン管理だけに関心がある場合は、私の答えをここで参照してください:stackoverflow.com/a/38297505/2146688
Chel

回答:


64

Bazaarを使用するスプレッドシートをセットアップし、TortiseBZRを介して手動でチェックイン/チェックアウトしました。トピックが保存部分に役立つので、ここに私の解決策を投稿したいと思いました。

私の解決策は、保存時にすべてのモジュールをエクスポートし、開いたときにモジュールを削除して再インポートするスプレッドシートを作成することでした。はい、これは既存のスプレッドシートを変換する際に潜在的に危険である可能性があります。

これにより、Emacs(はい、emacs)を介して、またはExcelでネイティブにモジュールのマクロを編集し、大きな変更後にBZRリポジトリをコミットできます。すべてのモジュールはテキストファイルであるため、BZRの標準のdiffスタイルのコマンドは、Excelファイル以外のソースで機能します。

私はBZRリポジトリーのディレクトリーX:\ Data \ MySheetをセットアップしました。リポジトリには、MySheet.xlsと、各モジュール(つまり、Module1Macros)ごとに1つの.vbaファイルがあります。スプレッドシートに、「VersionControl」と呼ばれるエクスポート/インポートサイクルから除外される1つのモジュールを追加しました。エクスポートおよび再インポートされる各モジュールは、「マクロ」で終わる必要があります。

「VersionControl」モジュールの内容:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count
        If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
            sName$ = .VBComponents(i%).CodeModule.Name
            .VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count

        ModuleName = .VBComponents(i%).CodeModule.Name

        If ModuleName <> "VersionControl" Then
            If Right(ModuleName, 6) = "Macros" Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

次に、これらのマクロを実行するには、open / saveのイベントフックを設定する必要があります。コードビューアで、[ThisWorkbook]を右クリックし、[コードの表示]を選択します。「(一般)」ビューから「ワークブック」ビューに変更するには、コードウィンドウの上部にある選択ボックスをプルダウンする必要がある場合があります。

「ワークブック」ビューの内容:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveCodeModules

End Sub

今後数週間でこのワークフローに着手し、問題が発生した場合は投稿します。

VBComponentコードを共有していただきありがとうございます。


5
再インポートするときに、モジュールタイプを確認することもできます。ThisWorkbook.VBProject.VBComponents.Item(i).Typeは、標準モジュールの場合は1、クラスモジュールの場合は2、ユーザーフォームの場合は3、ドキュメントモジュール(ワークブックまたはシート)の場合は100です。
Jon Crowell、2012

4
インポートコードにバグがあります。削除してモジュールをインポートしているので、モジュールの順序が変更されるため、毎回いくつか欠落しています。配列を逆方向に進むには、Forループを変更する必要があります。例:i = .VBComponents.Count To 1 Step -1
Tmdean

2
Excel 2013では、セキュリティセンターで「VBAプロジェクトオブジェクトモデルへの信頼アクセス」を有効にする必要があります。そうしないと、このコードを実行しようとすると、非常に役に立たないエラー1004が発生します。
Robin Green

8
上記のスクリプトは、完璧とはほど遠いものです。importCodeModules()サブルーチンはバグが多く、重複したモジュールを生成します。さらに、openおよびbefore_saveイベントを追加するには、すべてのワークブックを編集する必要があります。これは受け入れがたい。長い間ウェブを検索してみて、ようやく実際に機能するものが見つかりました(ここ参照)。コードのインポート、エクスポート、コードのフォーマットなどがあります。エクスポートは保存時に自動的に行われ、既存のワークブックを編集する必要はありません。
CodeKid 2014年

5
それは素晴らしい発見です!上記のスクリプトではなく、それを使用することをお勧めします。一度書いてしばらく使ってみたところ、自分のニーズに合いました。ExcelとVBAを毎日使用する人にとっては、そのエクスポート専用のプログラムまたはプロジェクトがより適切です。共有してくれてありがとう!
Demosthenex 2014年

42

TortoiseSVNは、Subversionバージョン管理システム用の驚くほど優れたWindowsクライアントです。Excelのバージョン間の差分を取得するためにクリックすると、両方のバージョンがExcelで開かれ、変更されたセルが(赤で)ハイライト表示されるという機能があります。これは、ここで説明するvbsスクリプトの魔法によって行われます

TortoiseSVNを使用していない場合でも、これは便利です。


3
TortoiseSVNが組み込み機能として比較できることを知って驚くほどです^^
Nam G VU

2
これはWordファイルでも同じですか?
Nam G VU

3
私はテストしたところです-これはWordファイルでも利用できます。クール^^
Nam G VU

VBコードでは機能しないようです。そのための解決策はありますか?
マンプリートシン

10

バージョン管理の対象となる理由とその理由をまとめます。

  1. 何:

    • コード(VBA)
    • スプレッドシート(​​式)
    • スプレッドシート(​​値)
    • チャート
    • ...
  2. なぜ:

    • 監査ログ
    • コラボレーション
    • バージョン比較( "diffing")
    • マージ

他の人がここに投稿したように、次のような既存のバージョン管理システムの上にいくつかのソリューションがあります。

  • ギット
  • Mercurial
  • Subversion
  • バザール

ワークブック内のVBAコードのみが懸念事項である場合、上記のDemosthenexが提案するアプローチまたはVbaGit(https://github.com/brucemcpherson/VbaGit)は非常にうまく機能し、実装は比較的簡単です。利点は、実績のあるバージョン管理システムに依存し、ニーズに応じて選択できることです(https://help.github.com/articles/what-are-the-differences-between-svn-andをご覧ください) -git /( GitとSubversionの簡単な比較)。

コードだけでなく、シート内のデータ(「ハードコードされた」値と数式の結果)も心配する場合は、同様の方法を使用できます。シートのコンテンツを(Range.Valueを介して)テキスト形式にシリアル化します。既存のバージョン管理システムを使用します。これに関する非常に優れたブログ投稿は次のとおりです。https//wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part + 1 + of + 3

ただし、スプレッドシートの比較は重要なアルゴリズムの問​​題です。MicrosoftのSpreadsheet Compare(https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986)、Exceldiff(http://exceldiff.arstdesign.com/)およびDiffEngineX(https://www.florencesoft.com/compare-excel-workbooks-differences.html)。しかし、これらの比較をGitのようなバージョン管理システムと統合することは、もう1つの課題です。

最後に、ニーズに合ったワークフローを決定する必要があります。Excelワークフロー用に調整されたシンプルなGitについては、https://www.xltrail.com/blog/git-workflow-for-excelをご覧ください


2020年の更新:xltrail.com/git-xlの提案に賛成してコミット間でvbaソース差分を生成するオープンソースgit拡張機能により、エラーが発生しやすいインポートとエクスポートから私を救う
chingNotCHing

9

データについて話しているのか、スプレッドシートに含まれているコードについて話しているのかによって異なります。私はMicrosoftのVisual Sourcesafeを強く嫌っていますが、通常はお勧めしませんが、AccessとExcelの両方と簡単に統合でき、モジュールのソース管理を提供します。

[実際、Accessとの統合には、バージョン管理できる個別のオブジェクトとしてクエリ、レポート、モジュールが含まれています]

MSDNリンクはこちらです。


4
より良い秘密の1つ-VSSがそれを実行できることを知りませんでした。+1
ConcernedOfTunbridgeWells

どちらも知りませんでした。しかし、とにかく、VSSはs..tの1つの山であり、私はそれから離れます。
GUI Junkie

私はすべて興奮し、1時間かけてネットの精査を行いましたが、MSがExcel 2003でのネットのサポートを停止したようです。使用しているAccess VBAなら運が良いかもしれませんが、私は見ていません。
収穫316

1
Office開発者版アドインを使用できるか?:brandon.fuller.name/archives/2003/11/07/10.26.30
Mitch Wheat

7

私はこれをうまく行うツールを知りませんが、私はさまざまな自家製のソリューションを見てきました。これらの共通のスレッドは、バージョン管理下のバイナリデータを最小化し、テキストデータを最大化して、従来のsccシステムの能力を活用することです。これをする:

  • ブックを他のアプリケーションと同様に扱います。ロジック、構成、データを分離します。
  • コードをワークブックから分離します。
  • プログラムでUIを構築します。
  • ワークブックを再構築するためのビルドスクリプトを記述します。

必要なのがバイナリオブジェクトを処理するソースコントロールだけであるのに、なぜこの無意味なことすべてを経験するのでしょうか。SVNはこれを行うことができます。
不明なコーダー

15
バイナリオブジェクトをマージできないため
igelineau 2014年

6

@Demosthenexの作業、@ Tmdeanと@Jon Crowellの貴重なコメントに取り組んでいます!(+1)

モジュールファイルをブックの場所の横にあるgit \ dirに保存します。それをあなたの好みに変えてください。

これはWorkbookコードへの変更を追跡しません。したがって、それらを同期するのはあなた次第です。

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i As Integer, name As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1
        If .VBComponents(i).Type <> vbext_ct_Document Then
            If .VBComponents(i).CodeModule.CountOfLines > 0 Then
                name = .VBComponents(i).CodeModule.name
                .VBComponents(i).Export Application.ThisWorkbook.Path & _
                                            "\git\" & name & ".vba"
            End If
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()
Dim i As Integer
Dim ModuleName As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1

        ModuleName = .VBComponents(i).CodeModule.name

        If ModuleName <> "VersionControl" Then
            If .VBComponents(i).Type <> vbext_ct_Document Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import Application.ThisWorkbook.Path & _
                                         "\git\" & ModuleName & ".vba"
            End If
        End If
    Next i
End With

End Sub

そして、ワークブックモジュールで:

Private Sub Workbook_Open()

    ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    SaveCodeModules

End Sub

6

@Demosthenexの回答をさらに一歩進め、Microsoft Excelのオブジェクトとユーザーフォームのコードも追跡したい場合は、少し注意が必要です。

最初に、SaveCodeModules()エクスポートする予定のさまざまなタイプのコードに対応するように関数を変更しました。

Sub SaveCodeModules(dir As String)

'This code Exports all VBA modules
Dim moduleName As String
Dim vbaType As Integer

With ThisWorkbook.VBProject
    For i = 1 To .VBComponents.count
        If .VBComponents(i).CodeModule.CountOfLines > 0 Then
            moduleName = .VBComponents(i).CodeModule.Name
            vbaType = .VBComponents(i).Type

            If vbaType = 1 Then
                .VBComponents(i).Export dir & moduleName & ".vba"
            ElseIf vbaType = 3 Then
                .VBComponents(i).Export dir & moduleName & ".frm"
            ElseIf vbaType = 100 Then
                .VBComponents(i).Export dir & moduleName & ".cls"
            End If

        End If
    Next i
End With

End Sub

ユーザーフォームは、VBAコードと同じようにエクスポートおよびインポートできます。唯一の違いは、フォームがエクスポートされるときに2つのファイルが作成されることです(ユーザーフォームごとに1つのと1つのファイルを取得.frm.frxます)。これらの1つはあなたが書いたソフトウェアを保持し、もう1つはフォームのレイアウトを定義する(私はかなり確信しています)バイナリファイルです。

Microsoft Excelが(MEOS)(つまりオブジェクトSheet1Sheet2ThisWorkbookなどが)としてエクスポートすることができます.clsファイル。ただし、このコードをワークブックに戻したい場合、VBAモジュールと同じ方法でインポートしようとすると、そのシートがワークブックにすでに存在していると、エラーが発生します。

この問題を回避するために、.clsファイルをExcelにインポートするのではなく、ファイルをExcelに.cls文字列として読み込んでから、この文字列を空のMEOに貼り付けることにしました。これが私のImportCodeModulesです:

Sub ImportCodeModules(dir As String)

Dim modList(0 To 0) As String
Dim vbaType As Integer

' delete all forms, modules, and code in MEOs
With ThisWorkbook.VBProject
    For Each comp In .VBComponents

        moduleName = comp.CodeModule.Name

        vbaType = .VBComponents(moduleName).Type

        If moduleName <> "DevTools" Then
            If vbaType = 1 Or _
                vbaType = 3 Then

                .VBComponents.Remove .VBComponents(moduleName)

            ElseIf vbaType = 100 Then

                ' we can't simply delete these objects, so instead we empty them
                .VBComponents(moduleName).CodeModule.DeleteLines 1, .VBComponents(moduleName).CodeModule.CountOfLines

            End If
        End If
    Next comp
End With

' make a list of files in the target directory
Set FSO = CreateObject("Scripting.FileSystemObject")
Set dirContents = FSO.getfolder(dir) ' figure out what is in the directory we're importing

' import modules, forms, and MEO code back into workbook
With ThisWorkbook.VBProject
    For Each moduleName In dirContents.Files

        ' I don't want to import the module this script is in
        If moduleName.Name <> "DevTools.vba" Then

            ' if the current code is a module or form
            If Right(moduleName.Name, 4) = ".vba" Or _
                Right(moduleName.Name, 4) = ".frm" Then

                ' just import it normally
                .VBComponents.Import dir & moduleName.Name

            ' if the current code is a microsoft excel object
            ElseIf Right(moduleName.Name, 4) = ".cls" Then
                Dim count As Integer
                Dim fullmoduleString As String
                Open moduleName.Path For Input As #1

                count = 0              ' count which line we're on
                fullmoduleString = ""  ' build the string we want to put into the MEO
                Do Until EOF(1)        ' loop through all the lines in the file

                    Line Input #1, moduleString  ' the current line is moduleString
                    If count > 8 Then            ' skip the junk at the top of the file

                        ' append the current line `to the string we'll insert into the MEO
                        fullmoduleString = fullmoduleString & moduleString & vbNewLine

                    End If
                    count = count + 1
                Loop

                ' insert the lines into the MEO
                .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.InsertLines .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.CountOfLines + 1, fullmoduleString

                Close #1

            End If
        End If

    Next moduleName
End With

End Sub

dirこれらの両方の関数への入力に混乱している場合は、それがコードリポジトリにすぎません。したがって、次のような関数を呼び出します。

SaveCodeModules "C:\...\YourDirectory\Project\source\"
ImportCodeModules "C:\...\YourDirectory\Project\source\"

簡単なメモ:バイナリファイルが原因で、ユーザーフォームを使用してバージョン管理を行うことができませんでした。gitリポジトリに複数のブランチを作成する場合、ユーザーフォームを使用していると、それらをマージできない場合があります
dslosky

5

私はgitを使用しています。私のプロジェクトはPythonコードに基づいており、Excelファイルとやり取りするため、これ(git-xlsx-textconv)をPython に移植しました。これは少なくとも.xlsxファイルで機能しますが、.xlsでも機能すると思います。ここにgithubリンクがあります。私は2つのバージョンを書きました。1つは各行が1行にあり、もう1つは各セルがそれ自体の行にあります(後者は、少なくともWindowsではgit diffがデフォルトで長い行を折り返さないためです)。

これは私の.gitconfigファイルです(これにより、異なるスクリプトを私のプロジェクトのリポジトリに置くことができます):

[diff "xlsx"]
    binary = true
    textconv = python `git rev-parse --show-toplevel`/src/util/git-xlsx-textconv.py

スクリプトをさまざまなリポジトリで利用できるようにするには、次のようにします。

[diff "xlsx"]
    binary = true
    textconv = python C:/Python27/Scripts/git-xlsx-textconv.py

私の.gitattributesファイル:

*.xlsx diff=xlsx

3

できることの1つは、ワークブックに次のスニペットを含めることです。

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

    With ThisWorkbook.VBProject
        For i% = 1 To .VBComponents.Count
            If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
                sName$ = .VBComponents(i%).CodeModule.Name
                .VBComponents(i%).Export "C:\Code\" & sName$ & ".vba"
            End If
        Next i
    End With
End Sub

このスニペットをインターネットで見つけました。

その後、Subversionを使用してバージョン管理を維持できます。たとえば、VBA内で「shell」コマンドを使用してSubversionのコマンドラインインターフェースを使用します。それで十分でしょう。私もこれを自分でやろうと考えています:)


これは素晴らしいアプローチだと思います。Excelコードのソース管理は分解でのみ可能です。これはビルドアプローチも推測します。コードクリーナーはこれを行うことができます(たとえば、私が信じているフリーウェア) appspro.com/Utilities/CodeCleaner.htmですが、同じようにあなたのコードは同等です。
ポリグロット、

これを変更してMicrosoft®Excel®for Mac 2011バージョン14.4.1を使用できるようにしました。Exportメソッドを呼び出す行は静かに何もしません(私が使用した整形式のOS Xディレクトリに関係なく)。
DA Vincent

3

VBAコードのバージョン管理が組み込まれた、Rubberduckと呼ばれる優れたオープンソースツールをお勧めします。お試しください!


2

Sharepointよりも通常のオフィスの非テクニカルユーザーがいるオフィス環境を検討している場合は、実行可能な代替手段です。バージョン管理を有効にし、チェックインとチェックアウトを使用してドキュメントフォルダーを設定できます。通常のオフィスユーザーにとってはより親しみやすいものにします。


2

mattlantの応答に応じて-ドキュメントライブラリでバージョン管理機能がオンになっている場合にのみ、sharepointはバージョン管理として正常に機能します。さらに、相対パスで他のファイルを呼び出すコードは機能しないことに注意してください。最後に、外部ファイルへのリンクは、ファイルがSharePointに保存されるときに壊れます。


1

SVNやCVSなどの標準バージョン管理ツールを使用します。制限は、目的に依存します。リポジトリのサイズのわずかな増加を除いて、私は問題に直面しませんでした


1

DiffEngineXを試してみてください。これは、プログラムで呼び出すことも、コマンドライン引数を使用してコマンドラインから呼び出すこともできます。Excelスプレッドシートのセルだけでなく、ブックに埋め込まれたVisual Basicマクロも比較します。また、Excelで定義された名前とコメントを比較します。これは、多くのフリーウェアツールが見落としているものです。からダウンロードできます

http://www.florencesoft.com/excel-differences-download.html

バージョンコントロールシステムにはオプションまたはボックスがあるので、元のExcelブックと変更されたExcelブックでDiffEngineXを自動的に呼び出すことができます。


12
回答の中で、この商用製品と提携していることを述べてください。
Hans Olsson、2012年

1

私もこれについて調べてきました。最新のTeam Foundation Server 2010にはExcelアドインが含まれている可能性があるようです。

ここに手がかりがあります:

http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html


TFSは、作業項目レポートでExcelを多用しますが、これは残念ながらExcelファイルをソース管理に入れることとは関係ありません。
Brad R

1

年齢を検索して多くの異なるツールを試した後、私はここでvbaバージョン管理の問題に対する私の答えを見つけました:https ://stackoverflow.com/a/25984759/2780179

これは、コードがここにある単純なExcelアドインです。

インポート後の重複モジュールはありません。既存のワークブックを変更せずに、ワークブックを保存するとすぐにコードが自動的にエクスポートされます。VBAコードフォーマッターと一緒に来ます。


1

実際、マクロコードの変更を追跡および比較するためのソリューションはほんの一握りしかありません-それらのほとんどはここですでに名前が付けられています。私はウェブを閲覧していて、言及する価値のあるこの新しいツールに出くわしました。

VBAマクロのXLToolsバージョン管理

  • ExcelシートとVBAモジュールのバージョン管理
  • バージョンをコミットする前に変更をプレビューおよび比較する
  • 同じファイルで何人かのユーザーが共同作業するのに最適(誰が何を/いつ/コメントを変更したかを追跡)
  • バージョンを比較し、コードの変更を行ごとに強調表示する
  • 技術に精通していない、またはExcelに精通していないユーザーに適しています
  • バージョン履歴は自分のPCのGitリポジトリに保存されます-どのバージョンも簡単に復元できます

VBAコードのバージョンを並べて、変更を視覚化


0

バージョン管理のためにMicrosoftのExcel XMLをzipコンテナー(.xlsxおよび.xslm)で使用してみたところ、vbaがvbaProject.bin(バージョン管理には役に立たない)に格納されていることがわかりました。

解決策は簡単です。

  1. LibreOffice CalcでExcelファイルを開く
  2. LibreOffice Calc
    1. ファイル
    2. 名前を付けて保存
    3. タイプとして保存:ODFスプレッドシート(​​.ods)
  3. LibreOffice Calcを閉じる
  4. 新しいファイルのファイル拡張子を.odsから.zipに変更します
  5. GITが管理する領域にスプレッドシートのフォルダを作成します
  6. zipをGITフォルダーに解凍します
  7. GITにコミットする

スプレッドシートの次のバージョンでこれを繰り返す場合、フォルダーのファイルがzipコンテナー内のファイルと完全に一致することを確認する必要があります(削除されたファイルを残さないでください)。


2
ただし、このアプローチにはリスクが伴います。その後、ExcelでLibreに実装されていない機能、またはLibreに「マッピング」されていない機能を正しく使用すると、このアプローチは機能しなくなります。簡単なスプレッドシートではこれでうまくいくと思いますが、細心の注意を払う必要があります。PW
Phil Whittington 2013年

0

Beyond Compareと呼ばれるプログラムもあり、Excelファイルの比較が非常に優れています。私はこれを簡単に示す中国語のスクリーンショットを見つけました:

Beyond Compare-2つのExcelファイルの比較(中国語)
元の画像ソース

彼らのページには30日間の試用があります


0

私はこの質問に対する非常に簡単な解決策を見つけました。これは私のニーズを満たしています。すべてのマクロの最後に1行追加*.txtして、実行するたびにマクロコード全体を含むファイルをエクスポートします。コード:

ActiveWorkbook.VBProject.VBComponents("moduleName").Export"C:\Path\To\Spreadsheet\moduleName.txt"

Tom's Tutorialsにあります。これには、これを機能させるために必要なセットアップも含まれています。)

コードで作業しているときは常にマクロを実行するので、gitが変更を取得することが保証されます。唯一の厄介な点は、以前のバージョンをチェックアウトする必要がある場合、手動で*.txtスプレッドシートにコピー/貼り付けする必要があることです。


-1

それはあなたが望む統合のレベルに依存します、私はSubversion / TortoiseSVNを使用しました、それは単純な使用のために良いようです。キーワードも追加しましたが、ファイルが破損する恐れがあります。Subversionには、キーワード置換を固定長にするオプションがあり、私が理解している限り、固定長が偶数でも奇数でも機能します。いずれにしても、有用な種類のdiff機能が得られない場合は、「diff」を実行する市販の製品があると思います。ものをプレーンテキストに変換し、それを比較することに基づいてdiffを実行するものを見つけましたが、それはあまり良くありませんでした。


-1

ほとんどのVCSで動作しますが(SVN、CVS、Darcs、TFSなどを選択する他の基準によって異なります)、実際には完全なファイルになります(バイナリ形式であるため)。答えるのは簡単ではありません。

ユーザーがログメッセージを完了した場合でも、ログメッセージに依存できますが、Office 2007の新しいXMLベースのフォーマットを試してみると、さらに多くの可視性を得ることができます(ただし、大量のXMLとXMLファイルを確認することは依然として困難ですが)はディスク上で圧縮されているため、テキストdiffが正しく機能するには、解凍するために事前コミットフックが必要になります)。


-1

VBAを使用して、リビジョン管理されたスプレッドシートを作成しました。複数の人が部品表またはスケジュールで作業していて、ある時点で、以前のリビジョンからの追加、削除、更新を示すスナップショットリビジョンを作成したいというエンジニアリングレポートを対象としています。

注:これは、サイトからダウンロードするためにサインインする必要があるマクロ対応のワークブックです(OpenIDを使用できます)。

すべてのコードのロックが解除されます。

リビジョン管理されたスプレッドシート


-1

私の会社ではMicrosoft Officeソリューションの自動化にかなりの作業を行っているため、テンプレートを保存するたびにソリューションのソースをエクスポートする.DLLを作成しました。テンプレートが保存されているフォルダーの子としてSourceという名前のフォルダーが作成され、Sourceの下にVBAプロジェクトと同じ名前のフォルダーが作成されます。プロジェクトフォルダーでは、モジュール、クラス、およびユーザーフォームのすべてのソースコードをエクスポートします。この配置は、テンプレートの大規模なコレクションのソースを管理しやすくするために選択されました。ローカル構成ファイルまたはグローバル構成ファイルが利用可能な場合、DLLはロックされたプロジェクトのロックを解除してVBAプロジェクトにアクセスできます。このツールを使用することで、開発者はテンプレートに心をこめて作業し、お気に入りのリビジョン管理ツールを使用して作業を管理できます。


チャド-私が最近気づいたこの投稿を読むことをお勧めします:stackoverflow.com/help/promotion。あなたの答えは「教えない-見せて!」に違反しているようです 原則:あなたはあなたの会社とあなたが思いついた解決策について話し、DLLに多くの参照をしますが、あなたがそれをどのようにしたかを示したり、DLLへのアクセスを提供したりしません。そのため、この回答はこのWebサイトの精神ではありません。
Colm Bhandal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.