0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Excelの同一ファイルをFTPを使って複数人で共同編集する方法と排他制御

Posted at

概要

Excelファイルを複数人で編集したいことは多々あります。
その中で、FTPを使った方法はとても簡単で、応用も聞くので備忘録として残しておこうと思います。
特に、DOS窓を使った操作は、VBAと違い、バージョン等に依存せずWindowsなら安定した動作が見込めるので、管理しやすいです。

大まかな流れ

  1. DOSのFTPコマンドでリモートからファイルをダウンロード
  2. リモートのファイル名をリネーム ( sample.xlsm → editing )
  3. 編集
  4. リモートのファイル名をリネーム ( editing → sample.xlsm )
  5. DOSのFTPコマンドでリモートにファイルをアップロード

ファイル

ダウンロード用

download.bat
@echo off

rem ***************************
rem download.ftpを開く
rem ***************************
ftp -s:C:\**\ftp\download.ftp

rem ***************************
rem ダウンロードしたsample.xlsmを開く
rem ***************************
cd C:\**\excel\sample.xlsm

exit
download.ftp
open **example.com**
**username**
**password**

rem ***************************
rem sample.xlsmをダウンロードする場所
rem ***************************
lcd C:\**\excel

rem ***************************
rem sample.xlsmがある場所
rem ***************************
cd www

rem ***************************
rem バイナリを指定しないと、excelファイルが破損します。
rem ***************************
bin

get sample.xlsm

rem ***************************
rem リモートのsample.xlsmをeditingにリネーム
rem ***************************
rename sample.xlsm editing

quit

アップロード用

sample.xlsm
'Excelファイルを閉じたときに自動実行される
Sub Auto_Close()
  Call FTPアップロード
End Sub

Sub FTPアップロード()
    Application.StatusBar = "処理中: FTPアップロード"
    
    `DOS窓でコマンドを実行する
    Dim WSH, wExec, sCmd As String
    Set WSH = CreateObject("WScript.Shell")
    
    'upload.ftpのパス
    sCmd = "ftp -s:C:\**\ftp\upload.ftp"
    Set wExec = WSH.Exec("%ComSpec% /c " & sCmd)
    
    Do While wExec.Status = 0
        DoEvents
    Loop
    
    Set wExec = Nothing
    Set WSH = Nothing
    
    Application.StatusBar = False
End Sub
upload.ftp
open **example.com**
**username**
**password**

rem ***************************
rem sample.xlsmをダウンロードした場所
rem ***************************
lcd C:\**\excel

rem ***************************
rem sample.xlsmをアップロードする場所
rem ***************************
cd www

rem ***************************
rem リモートのeditingをsample.xlsmにリネーム
rem ***************************
rename editing sample.xlsm

bin

put sample.xlsm
quit

補足

DOSコマンド自体はbatファイルとVBAだけで使えますが、DOSのFTPコマンドは別途FTPファイルを必要とするので、download.ftpとupload.ftpを用意しています。

リモートのファイル名を変えることで、編集中に他の人がファイルをダウンロードするのを防いでいますが、ローカルに前回ダウンロードしたファイルが残っている場合は、前回のファイルを開いてしまう可能性があるので注意が必要です。
ローカルのファイルを削除してもいいのですが、リスクが伴うので実装はしていません。

訂正、アドバイス等、コメントいただけるとうれしいです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?