Excel上のチェックボックスの状態を変更するPowerShellのサンプルコード(フォームコントロール)

記事内に広告が含まれています。

Excel上のフォームコントロールのチェックボックスの状態を変更する、PowerShellのサンプルコードを紹介します。

操作対象Excelファイル

PowerShellから操作するチェックボックス入りのExcelファイルです。

Book1.xlsx

下記画像の1行目3列目のアイコンのチェックボックスを使用しています。

細かいことを書くとこんな状態ですがさらっと読めばよいです。

  • オブジェクト名「Check Box 1」~「Check Box 5」の、チェックボックスを5つ追加しています。
  • チェックボックスはグループ化されています。
  • チェックボックスはフォームコントロールです。※ActiveXコントロールではありません。

単一のチェックボックスの変更

ソースコード

「りんご」のチェックボックスについてONにしてみます。

「りんご」のオブジェクト名は「Check Box 1」なので、CheckBoxesに「Check Box 1」を指定します。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# 単一のチェックボックスを変更する場合
$sheet.CheckBoxes("Check Box 1").Value =  $true

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

「りんご」にチェックが付きました。

ループしてチェックボックスを変更(foreach文)

ソースコード

foreach文を使用して、チェックボックスをまとめて変更します。

※全部チェックONにします。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# グループ内のチェックボックスをまとめて変更する場合 foreach版
foreach($checkbox in $sheet.Shapes("Group1").GroupItems){
    # 全てONにする
    $sheet.CheckBoxes($checkbox.Name).Value = $true
}

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

同じグループの全てのチェックボックスにチェックが付きました。

ループしてチェックボックスを変更(for文)

ソースコード

for文を使用して、チェックボックスをまとめて変更します。

※全部チェックONにします。

$excel = New-Object -ComObject Excel.Application
$book = $null

$excel.Visible = $false
$excel.DisplayAlerts = $false

$fileName  = "Book1.xlsx"
$filePath = (Convert-Path .) + "/" + $fileName

$book = $excel.Workbooks.Open($filePath)
$sheet = $book.Sheets("Sheet1")

# グループ内のチェックボックスをまとめて変更する場合 for版
for($i=1; $i -le $sheet.Shapes("Group1").GroupItems.Count;$i++){
    $checkboxName = "Check Box " + $i
    $sheet.CheckBoxes($checkboxName).Value = $true
}

[void]$book.Save()
[void]$book.Close($false)
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)

[void]$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

Pause

実行結果

for文でも同じ結果です。

同じグループの全てのチェックボックスにチェックが付きました。

参考情報

環境

下記の環境で作成・実行しております。

No.環境バージョン
1OSWindows10
2PowerShell5.1
環境一覧

以上です。

コメント

タイトルとURLをコピーしました