Windowsでのファイルを分割するコマンドが無いため
Excelのマクロを使ってファイルを分割する。
※splitコマンドがあればいいのに・・・・。
色々なサイトを参考にさせて頂きました。
ありがとうございました。
・ファイル
http://www.geocities.jp/sdfuku/B/FileSplitVer1.0.zip
↑リンクがうまくいかないので直接貼り付けで。
●EXCELのセル設定
分割対象ファイル名=F2
選択ファイルサイズ(byte)=F3
保存フォルダ=F6
分割サイズ(byte)=F9
ファイルパス=F15
ファイル名=F16
ファイル拡張子=F17
ファイル名(拡張子なし)=F18
●作成したマクロ名
圧縮ファイル選択:CompressGetOpenFilename()
保存するフォルダ選択:SaveFolderSelect()
ファイル分割:FileSplitFunc()
●分割するファイルの選択
Sub CompressGetOpenFilename()
'/
'/ 分割するファイル選択する。
'/
Dim OpenComFileName As Variant '/ファイル名を格納
'/ファイルを開くダイアログを開く。
OpenComFileName = Application.GetOpenFilename( _
FileFilter:="zipファイル(*.zip),*.zip" _
, FilterIndex:=1 _
, Title:="分割対象の分割ファイルを選択する" _
, MultiSelect:=False _
)
'/
'/ 対象のファイルを表示する。
'/
Range("F2") = OpenComFileName
'/
'/ ファイルオブジェクトの定義
'/
Dim FilseSizeObject01 As Object '/分割ファイルのオブジェクト情報を格納
Dim FileObject As Object '/分割ファイルサイズオブジェクトを格納
'/変数変更箇所/'
Set FilseSizeObject01 = CreateObject("Scripting.FileSystemObject")
Set FileObject = FilseSizeObject01.GetFile(Cells(2, 6))
'/
'/ ファイル情報の取得
'/
Dim filesizea As Variant '/ファイルサイズを格納
Dim kakuchoushi As Variant '/ファイル拡張子を格納
Dim filemei As Variant '/拡張子を含むファイル名を格納
Dim filepatha As Variant '/ファイルがあるフォルダの絶対パスを格納
Dim filecur1 As Variant '/拡張子をはずしたファイル名を格納
filesizea = FileObject.Size '/ファイルサイズを返します
'/変数変更箇所/'
kakuchoushi = FilseSizeObject01.GetExtensionName(Cells(2, 6)) '/拡張子を返す
filepatha = FilseSizeObject01.GetParentFolderName(Cells(2, 6)) '/ファイルの絶対パスを返します
filemei = FilseSizeObject01.GetFileName(Cells(2, 6)) '/拡張子を含んだファイル名を返します
filecur1 = FilseSizeObject01.GetBaseName(Cells(2, 6)) '/拡張子をはずしたファイル名を返します
'/
'/ 対象のファイルを表示する。
'/
'/変数変更箇所/'
Range("F3") = filesizea '/ファイルサイズを表示
Range("F15") = filepatha '/ファイルがあるフォルダの絶対パスを表示
Range("F16") = filemei '/拡張子を含んだファイル名を表示
Range("F17") = kakuchoushi '/拡張子を表示
Range("F18") = filecur1 '/拡張子をはずしたファイル名を格納
'宣言した変数のクリア
Set OpenComFileName = Nothing
Set FilseSizeObject01 = Nothing
Set FileObject = Nothing
Set filesizea = Nothing
End Sub
●保存するフォルダの選択
'--------------------------------------
'
' 保存するフォルダの選択
'
'--------------------------------------
Sub SaveFolderSelect()
Dim savefolder01 As Variant '/保存するフォルダを格納
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
savefolder01 = .SelectedItems(1)
End If
End With
'保存フォルダ表示
'/変数変更箇所/'
Range("F6") = savefolder01 & "\"
'/宣言した変数のクリア
Set savefolder01 = Nothing
End Sub
●ファイル分割
'--------------------------------------
'
' ファイル分割と結合bat作成
'
'--------------------------------------
Sub FileSplitFunc()
'/
'/ 入力セルチェック
'/
Dim checkP01, checkP02, checkP03 As String
Dim checkP11 As String
Dim chkckP21 As String
checkP01 = Cells(2, 6) '/分割対象ファイル名(F2)
checkP02 = Cells(16, 6) '/ファイル名(F16)
checkP03 = Cells(17, 6) '/ファイル拡張子(F17)
checkP11 = Cells(6, 6) '/保存フォルダ(F6)
checkP21 = Cells(10, 6) '/分割サイズ(byte)(F10)
If checkP01 = "" Or checkP02 = "" Or checkP03 = "" Then
MsgBox "「分割ファイル選択」を再度実施して下さい。"
Exit Sub
End If
If checkP11 = "" Then
MsgBox "「保存先フォルダ選択」を再度実施して下さい。"
Exit Sub
End If
If checkP21 = "" Then
MsgBox "「分割サイズ設定」を設定して下さい。"
Exit Sub
End If
'/
'/ 分割と結合
'/
Dim fileA As String '/分割元ファイルを格納
Dim fileB As String '/分割後ファイル設定
Dim fileC As String '/復元用バッチファイル
Dim ix As Integer '/分割数
Dim ln As Long '/分割長
Dim ReadArea() As Byte '/インプットエリア
Dim TotalLen As Long '/元ファイル長
Dim Last As Boolean '/終了フラグ
Dim Bat As String '/バッチファイルの内容
'/変数変更箇所/'
fileA = Cells(2, 6) '/分割元ファイル
fileB = Cells(6, 6) & Cells(16, 6) & "." '/分割後ファイル(末尾に通番を付与する)
fileC = Cells(6, 6) & "recovery.bat" '/復元用バッチファイル
ln = Cells(10, 6) '/分割長セット(byteで定義,1Mバイト=1,000,000)
TotalLen = FileLen(fileA) '/全体長セット
Open fileA For Binary Access Read As #1 '/元ファイルオープン
ix = 1 '/分割数初期値化
P_loop:
'分割長セット(TotalLenは残りバイト数を保持)
If TotalLen > ln Then
TotalLen = TotalLen - ln
Else
ln = TotalLen
Last = True
End If
ReDim ReadArea(1 To ln) '/読込みエリア確保
Get #1, , ReadArea '/読込み
'分割ファイル作成
Open fileB & Format(ix, "000") For Binary Access Write As #2
Put #2, , ReadArea
Close #2
'バッチファイルの内容を作成
'/変数変更箇所/'
If ix = 1 Then
Bat = "copy /b " & Cells(16, 6) & "." & Format(ix, "000")
Else
Bat = Bat & " + " & Cells(16, 6) & "." & Format(ix, "000")
End If
'終了処理
'/変数変更箇所/'
If Last Then
Close #1
Bat = Bat & " " & Cells(16, 6)
Open fileC For Output As #1
Print #1, Bat
Close #1
Exit Sub
End If
'ループ処理
ix = ix + 1
GoTo P_loop
End Sub
※参考にしたサイト
・Xillion Script Tips
http://www.xillion.net/script/2005/04/post_9.html
・Office TANAKA
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm
・Excel VBA 入門講座
http://excelvba.pc-users.net/fol2/2_6.html