zipへの追加

Sub Main()

    Dim maxPathIndex As Integer

    maxPathIndex = 10 ' パスの配列の最大値(仮)を表す定数

    

    ' パスの配列を初期化

    Dim paths() As Variant

    ReDim paths(1 To maxPathIndex)

    

    ' パスの配列にファイルパスを設定

    paths(1) = "C:\Users\ichim\ブック.xlsx"

'    paths(2) = "YourPath02"

    

    ' 圧縮されたZIPファイルの保存先としてファイル名を指定

    Dim zipFileName As String

 

    zipFileName = "C:\Users\ichim\ブック11.zip"

 

    Call CompressFilesToZIP(paths, zipFileName)

End Sub

 

 

 

Function CompressFilesToZIP(ByVal paths As Variant, ByVal zipFileName As String)

    ' 圧縮対象のファイルパスとZIPファイル名を定義

    Dim srcFilePath As String

    

    ' パスの配列を連結し、末尾のカンマを除いた文字列を取得

    srcFilePath = ConcatPathsAndRemoveComma(paths)

    

    ' ZIPファイルを作成するサブルーチンを呼び出し

    Call ExecutePowerShellZIPCompression(zipFileName, srcFilePath)

    

End Function

 

Function ConcatPathsAndRemoveComma(ByVal paths As Variant) As String

    ' パスの配列を連結し、末尾のカンマを除いた文字列を返す関数

    Dim result As String

    Dim i As Integer

    Dim maxIndex As Integer

    

    ' パスの配列の最大値を取得

    maxIndex = GetMaxIndex(paths)

 

    ' パスの配列をカンマで連結

    For i = LBound(paths) To maxIndex

        result = result & paths(i) & ","

    Next i

    

    ' 末尾のカンマを除く

    If Right(result, 1) = "," Then

        result = Left(result, Len(result) - 1)

    End If

    

    ' 連結した文字列を返す

    ConcatPathsAndRemoveComma = result

End Function

 

Function ExecutePowerShellZIPCompression(ByVal zipFileName As String, ByVal srcFilePaths As String)

    ' ZIPファイルを作成するサブルーチン

    Dim PowerShellCmd As String

    Dim objWsh As Object

    Dim execResult As Long

    

    ' WScript.Shell オブジェクトを生成

    Set objWsh = CreateObject("WScript.Shell")

   

    ' ファイルパスとZIPファイル名に対して置換処理を実行

    srcFilePaths = ReplaceForPowerShell(srcFilePaths)

    zipFileName = ReplaceForPowerShell(zipFileName)

    

    ' ZIPファイルを作成するためのPowerShellコマンドを生成

    PowerShellCmd = "powershell -NoLogo -ExecutionPolicy RemoteSigned -Command Compress-Archive -Path " & srcFilePaths & " -DestinationPath " & zipFileName & " -Force"

    

    ' ZIPファイルがすでに存在するか確認

    Sheets("Sheet3").Range("G1") = zipFileName

    If Dir(zipFileName) <> "" Then

        ' PowerShellコマンドを実行

        execResult = objWsh.Run(Command:=PowerShellCmd, WindowStyle:=0, WaitOnReturn:=True)

    End If

    

    ' エラーを処理

    If execResult = 1 Then

        Stop ' エラーが発生しました

    Else

        ' エラーは発生しませんでした。

    End If

    

    ' WScript.Shell オブジェクトを解放

    Set objWsh = Nothing

End Function

 

Function ReplaceForPowerShell(ByVal inputString As String) As String

    ' スペースを含む文字列をバッククォートでエスケープ

    ReplaceForPowerShell = Replace(inputString, " ", "` ")

 

    ' 全角スペースを含む文字列をバッククォートでエスケープ

    ReplaceForPowerShell = Replace(ReplaceForPowerShell, " ", "` ")

 

    ' 開きカッコをバッククォートでエスケープ

    ReplaceForPowerShell = Replace(ReplaceForPowerShell, "(", "`(")

 

    ' 閉じカッコをバッククォートでエスケープ

    ReplaceForPowerShell = Replace(ReplaceForPowerShell, ")", "`)")

 

    ' 長音記号(ー)をバッククォートでエスケープ

    ReplaceForPowerShell = Replace(ReplaceForPowerShell, "ー", "`ー")

 

    ' 下線記号(_)をバッククォートでエスケープ

    ReplaceForPowerShell = Replace(ReplaceForPowerShell, "_", "`_")

End Function

 

 

Function GetMaxIndex(ByVal arr As Variant) As Integer

    ' 配列の最大インデックスを取得する関数

    Dim i As Integer

    i = LBound(arr)

    Do While i <= UBound(arr) And Not IsEmpty(arr(i))

        i = i + 1

    Loop

    GetMaxIndex = i - 1

End Function

Sub InsertHorizontalPageBreak()

    Dim ws As Worksheet

    Dim rowNum As Long

    

    ' 対象となるワークシートを設定

    Set ws = ThisWorkbook.Sheets("Sheet1") ' Sheet1を対象に変更してください

    

    ' 改ページを挿入する行番号を設定

    rowNum = 20 ' 例として20行目に挿入

    

    ' 水平な改ページを挿入

    ws.HPageBreaks.Add Before:=ws.Cells(rowNum, 1)

End Sub

 

 

 

Function RowsToFitInOnePage(ws As Worksheet, startRow As Long, endRow As Long) As Long

    Dim pagesWide As Long

    Dim pagesTall As Long

    Dim tempWs As Worksheet

    

    ' 一時的なワークシートを作成

    Set tempWs = ThisWorkbook.Worksheets.Add

    

    ' 指定した範囲を一時的なワークシートにコピー

    ws.Range(ws.Cells(startRow, 1), ws.Cells(endRow, ws.Columns.Count)).Copy Destination:=tempWs.Range("A1")

    

    ' ページ設定を調整

    With tempWs.PageSetup

        .Zoom = False

        .FitToPagesWide = 1

        .FitToPagesTall = 1

    End With

    

    ' ページの高さを取得

    pagesTall = tempWs.HPageBreaks.Count + 1

    

    ' 一時的なワークシートを削除

    Application.DisplayAlerts = False

    tempWs.Delete

    Application.DisplayAlerts = True

    

    ' 1ページに収まる行数を計算

    RowsToFitInOnePage = (endRow - startRow + 1) / pagesTall

End Function

Dim ws5, ws6 As Worksheet

Dim w1, h1 As Double

Dim i As Long

Set ws5 = Sheets("Sheet5")

Set ws6 = Sheets("Sheet6")

For i = 1 To 300

    h1 = ws6.Rows(i).RowHeight

     ws5.Rows(i).RowHeight = h1

Next

For i = 1 To 100

 w1 = ws6.Columns(i).ColumnWidth

   ws5.Columns(i).ColumnWidth = w1

Next

 

Sub GetRGBFromColorPalette()

    Dim colorIndex As Long

    Dim rgbColor As Long

    

    ' カラーパレットから色を選択

    colorIndex = Application.Dialogs(xlDialogEditColor).Show(, , , "Please select a color")

    

    ' カラーコードをRGB値に変換

    rgbColor = ActiveWorkbook.Colors(colorIndex)

    

    ' RGB値を表示

    MsgBox "RGB values: (" & (rgbColor Mod 256) & ", " & ((rgbColor \ 256) Mod 256) & ", " & (rgbColor \ 65536) & ")"

 

End Sub