PowerShell

PowerShellで関数の引数が2つ以上の時に引数がうまく渡されなくてハマったので修正方法の備忘録(ハマった)

PowerShellで関数の引数が2つ以上になると、引数がうまく渡されない現象にしばらくハマっていました。(初心者ですね)PowerShellは他の言語と比べると、関数への仮引数の記述が違います。正しく動作する記述について備忘録として残します。正しく動作しない引数2つ以上のコード(悪い例)まずは悪い例です。ソースコードJavaやそれに類似する言語をかじっている人は、PowerShellでもこんな関数の呼び出しをやりがちです。function doFunction($a,$b){ $result = $a * $b Write-Host $result}# 引数 2つ ※誤りdoFunction (2,3)Read-Host実行結果これだと思った通りに動きません。実行結果すると、2 * 3の計算結果の"6"が表示されるかと思いきや、何も表示されません。構文的には誤りではないので、やっかいなことにエラーも出てこないです。正しい動作する記述例PowerShellでは、仮引数に丸括弧を付けません。 ※丸括弧とは()他の言語をやっていると違和感があるのですが、もともとコマンドだと考えると当たり前...
PowerShell

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$e...
PowerShell

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

Excel上のフォームコントロールのチェックボックスの状態を取得する、PowerShellのサンプルコードを紹介します。操作対象ExcelファイルPowerShellから操作するチェックボックス入りのExcelファイルです。Book1.xlsx下記画像の1行目3列目のアイコンのチェックボックスを使用しています。細かいことを書くとこんな状態ですがさらっと読めばよいです。オブジェクト名「Check Box 1」~「Check Box 5」の、チェックボックスを5つ追加しています。チェックボックスはグループ化されています。チェックボックスはフォームコントロールです。※ActiveXコントロールではありません。単一のチェックボックスの状態の取得ソースコード「りんご」のチェックボックスの状態を取得して、表示してみます。「りんご」のオブジェクト名は「Check Box 1」なので、CheckBoxesに「Check Box 1」を指定します。$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $...
PowerShell

PowerShellの比較演算子のチートシート

PowerShellの比較演算子は-eqや-neなどの文字列で記述し、学生の頃数学で習ったような等号(=)、大なり(>)、小なり(<)を使いません。なので、演算子のパターンを覚えておく必要があります。ただ一覧化を見るとワンパターンなのに気づき、何度か構文を記述をすると慣れてくるはずです。チートシートPowerShellの比較演算子のチート表です。比較演算子覚え方(英語)Java(参考)意味挙動-eqequal==等しい左辺と右辺が等しい場合、$trueを返します-nenot equal!=等しくない左辺と右辺が等しくない場合、$trueを返します-ltless than<より小さい左辺が右辺より小さい場合、$trueを返します-leless than or equal<=以下左辺が右辺以下の場合、$trueを返します-gtgreater than>より大きい左辺が右辺より大きい場合、$trueを返します-gegreater than or equal=以上左辺が右辺以上の場合、$trueを返します比較演算子のチート表基本はequal、less、greaterと数合わせのthanの4単語...
PowerShell

PowerShellで実装してみるサーチアルゴリズム(リニアサーチ、バイナリサーチ)

PowerShellでサーチアルゴリズムを実装してみました。PowerShellで実行するいいところは、環境の設定に時間をかけず、この手の勉強ならすぐできることですね。今回実装したのはリニアサーチ、バイナリサーチの2種類です。サーチアルゴリズム「リストデータからキーを探す」アルゴリズムのことをサーチアルゴリズムといいます。代表的なサーチアルゴリズムとして、下記の3つがあります。リニアサーチ(別名:線形探索)バイナリサーチ(別名:二分探索)ハッシュ法本記事では上記のうち基礎的な内容の1.と2.について、Windowsに標準搭載のPowerShellで実装します。アルゴリズムの内容を分かりやすくするため、List Class等は作成せず配列を使用します。配列データに対して検索し、ヒットした値の位置を返します。リニアサーチまずはリニアサーチです。こちらは配列を先頭から順に検索して、見つかったらその位置を返却するサーチです。ソースコード実際に検索する部分をlinearSearch関数として切り離しています。検索データの配列と見つけたい値を、引数としてlinearSearch関数に渡して実行しま...
PowerShell

複数のExcelファイルのシートを1つのExcelブックへコピーしていくPowerShellのサンプルコード

複数のExcelファイルのシートを1つのExcelブックへ集約していく、PowerShellのサンプルコードを紹介します。仕様サンプルとして、以下のようなExcelファイル3つを用意します。これら3ブックにあるシートを、新しいブックのAllSheets.xlsxにコピーします。Book1.xlsxBook2.xlsxBook3.xlsx実行結果のイメージは以下のとおりです。絵心がなくてすみませんが・・ソースコードソースはPowerShellで記述します。createAllBookSheets.ps1$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $false# 出力先ファイル$destFilePath = (Convert-Path .) + "\AllSheets.xlsx"$destBook = $excel.Workbooks.add()# 入力元ファイル$sourceFiles = Get-Item *.xlsxf...
PowerShell

PowerShellによる挿入ソートのサンプルコード

PowerShellで挿入ソートをするサンプルコードを紹介します。仕様PowerShellで配列データを、挿入ソートをして表示します。PowerShellは標準でソートの関数が用意されていますが、あえて自力でソートする関数を作成します。ソースコード挿入ソートをする部分をinsertSort関数として別に切り出しました。テストデータとしてランダムな数字を配列で用意して、ソート前後で表示します。挿入ソート.ps1# sort functionfunction insertSort($data){ for($i = 0; $i -lt $data.Count; $i++){ # < $temp = $data for($j = $i; $j -gt 0 -and $data -gt $temp ; $j--){ # 挿入位置まで値をスライドする $data = $data } $data = $temp } return $data}$array1 = @(100,0,1,75,3,4,50,2,10,2,99,5,8,7,35,4,8)# ソート前表示Write-Host "ソート前"Wr...
PowerShell

PowerShellによりExcelのシートの並び替えをするサンプルコード

PowerShellによりExcelのシートの並び替えをするサンプルコードを紹介します。仕様以下のようなサンプルファイルを用意します。Book1.xlsxうまくいけば、PowerShell実行後にシートがSheet1→Sheet2→Sheet3・・・Sheet6の並び順に変わります。以下のキャプチャのイメージですソースコードソースはPowerShellで記述します。SortExcelSheets.ps1$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)# シート名の取得$workArray = @()foreach ($s in $book.sheets){ $workArray+= $s.nam...
PowerShell

PowerShellによりExcelファイルのシートの色を変更するサンプルコード

PowerShellによりExcelファイルのシートの色を変更するサンプルコードを紹介します。Web上で類似ソースが意外に見つからなかったので、VBAのサイトを見ていろいろ試しました。仕様以下のようなExcelファイルを用意して、PowerShellからシートの色を変えてみます。なお、実装方法はいくつかあります。IndexColorプロパティ版IndexColorによりSheet1の色を設定します。一番記述が簡単です。たまにWeb上で出てくるサンプルもこの方法が多く、最も一般的な方法なのかと思われます。ソースコードsetSheetColorColorIndex.ps1$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(...
PowerShell

PowerShellによりExcelの各シートの先頭に連番を振るサンプルコード

PowerShellによりExcelを操作し、各シートの先頭に連番を振るサンプルコードを作成しました。仕様Excelファイルの各シートの先頭に、PowerShellから連番を振ります。以下のようなサンプルファイルを用意します。book.xlsxPowerShell実行後、うまくいけば以下のようにシート名が変わります。実行前のシート名ABCD実行後のシート名01_A02_B03_C04_DソースコードソースはPowerShellで記述します。addSheetNumberToExcelSheet.ps1$excel = New-Object -ComObject Excel.Application$book = $null$excel.Visible = $false$excel.DisplayAlerts = $false$fileName = "book.xlsx"$filePath = (Convert-Path .) + "\" + $fileName$book = $excel.Workbooks.Open($filePath)for ($i=1; $i -le $book.wo...