コーディング

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...
VBA

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

シート名の先頭に連番を振るVBAのサンプルコードを紹介します。仕様Excelファイルの各シートの先頭に連番を振ります。以下のようなサンプルファイルを用意してテストします。うまくいけば以下のようにシート名が変わります。実行前のシート名ABCD実行後のシート名01_A02_B03_C04_Dソースコードシート上にはボタン等は置きません。Visual Basic Editorを開き、ThisWorkbook上にそのまま、下記のaddSheetNumber()関数を配置しました。ソースコードOption Explicit Sub addSheetNumber() Dim i As Long For i = 1 To ThisWorkbook.Worksheets.Count Dim newSheetName As String newSheetName = Format(i, "00") & "_" & Worksheets(i).Name Worksheets(i).Name = newSheetName Next End Sub実行では上記のVBAを実行します。実行手順「開発」メニューから...
VBA

文字列を分割して1文字ずつセル入力するVBAのサンプルコード

文字列を分割して1文字ずつセル入力する、VBAのサンプルコードを紹介します。いわゆるExcel方眼紙で1文字1セル入力する形態をVBAコードでやろうというわけです。仕様試しに以下のようなExcelシートを用意して、1文字ずつセルに入力するVBAコードを作成します。実行前実行後(イメージ)サンプルコードとテスト大きく2種類のソースコードを作って実現してみました。一般的な方法一つ目はよく見かける一般的なソースコードです。(細かいところは、人によって違ったりするのですが・・・)入力テキストの1文字目からMid関数で1文字ずつ取得して、1文字ずつOffset関数でターゲットのセルに格納します。コード(1レコード)Sub splitText1record() '入力テキスト Dim intext As String intext = ActiveSheet.Cells(1, 1).Value '出力テキストのスタート位置 Dim targetRange As Range Set targetRange = Range(Cells(1, 2).Address) Dim i As Long For ...
PowerShell

PowerShellによる選択ソートのサンプルコード

PowerShellで選択ソートをするサンプルコードを紹介します。仕様PowerShellで配列データを、選択ソートして表示します。PowerShellは標準でソートの関数が用意されていますが、あえて自力でソートする関数を作成します。ソースコード選択ソートする部分をselectionSort関数として別に切り出しました。テストデータとしてランダムな数字を配列で用意して、ソート前後で表示します。SelectionSort.ps1# sort functionfunction selectionSort($data){ for($i = 0; $i -lt $data.Count - 1; $i++){ # 0 to array.count - 1 $min = $i; # 最小値 for ($j = $i+1; $j -lt $data.Count;$j++){ if($data -lt $data){ $min = $j } } # swap $tmp = $data $data = $data $data = $tmp } return $data}$array1 = @(100,0...
PowerShell

PowerShellによりExcelファイルをシート毎にファイル分割するサンプルコード

PowerShellによりExcelファイルを、シート毎にファイル分割するサンプルコードを紹介します。仕様シートが複数あるExcelファイルを、シートごとにブック分割します。以下のようなサンプルファイルを用意します。実行前PowerShellのScriptファイル(*.ps1)を実行すると各シートがファイルに運活されます。実行完了後に、以下3ファイルができるイメージです。「AAA.xlsx」「BBB.xlsx」「CCC.xlsx」ソースコードソースコードはPowerShellで記載しています。excelファイルはデータとして扱い、マクロ等は一切入れません。$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($filePa...
VBA

シート名毎にExcelファイルを分割するVBAのサンプルコード

シート名毎にExcelファイルを分割するVBAのサンプルコードを紹介します。仕様1ブックに複数のシートが存在するExcelファイルを、シートごとにファイル分割します。実際に実行してみるために、以下のようなサンプルファイルを用意します。マクロで実行すると各シートがファイルに分裂します。実行完了後に、以下3ファイルができるイメージです。「AAA.xlsx」「BBB.xlsx」「CCC.xlsx」ソースコード今回はシートをいじらずそのまま出力したいので、シート上にボタン等は置きません。Visual Basic Editorを開き、ThisWorkbook上にそのまま、下記のSplitSheet()関数を配置しました。ソースコードOption ExplicitSub SplitSheet() Dim wkSheet As Worksheet Dim newBook As Workbook Dim newBookName As String Dim folderParent As String Dim i As Long 'シートの保存先 folderParent = ThisWorkbook....
PowerShell

PowerShellによるバブルソートのサンプルコード

PowerShellでバブルソートするサンプルコードを作成してみました。(PowerShellでバブルソートする需要はないと思いますが・・・)仕様PowerShellで配列データをバブルソートして、配列データを表示します。PowerShellは標準でソートの関数が用意されていますが、あえて自力でソート関数を作成します。ソースコードバブルソートする部分をbubbleSort関数として別に切り出しました。テストデータとしてランダムな数字を配列で用意して、ソート前後で表示します。バブルソート.ps1# sort functionfunction bubbleSort($data){ for($i = 0; $i -lt $data.Count - 1; $i++){ # 0 to array.count - 1 for($j = $i + 1; $j -lt $data.Count; $j++){ # $i to array.count if($data -gt $data){ # swap $tmp = $data $data = $data $data = $tmp } } } retu...
PowerShell

PowerShellによりフォルダ内の各ファイルの名前に更新日時を追記するサンプルコード

PowerShellによりフォルダ内の各ファイルの名前に更新日時を追記するサンプルコードを紹介します。仕様以下の通り、フォルダ内にいくつかのファイルがあります。変なファイルネームネーミングルールの単体結果エビデンスや、一定時間間隔でキャプチャした画像というのがよくありそうです。実行前これらのファイルの後ろに更新日時を追記してみます。実行後ファイルソースコード$files = Get-Item *.xlsxforeach($file in $files){ $newfileName = $file.BaseName + "_" + $(Get-ItemProperty $file).LastWriteTime.ToString("yyyyMMdd-hhmmss") + $file.Extension Rename-Item $file $newfileName}PauseGet-Itemで「*.xlsx」を指定することによってExcelのみを取得するようにしていますが、他の拡張子に変更すればテキストやワードファイルも可能です。また、$newFileへの格納内容は下記のとおりです。命令説明...
PowerShell

PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコード

PowerShellによりフォルダ内のファイルの更新日時をランダムな日時するサンプルコードを紹介します。ファイルを自動生成したときとか更新日時が同じになるのですが、大人の事情で更新日時を変えざるを得ないときがあるのです。。仕様何かの成果物(設計書、仕様書)をプログラムで一括で作ってしまうと、すべての更新日時が同じになってしまうことがあります。これを諸事情により人が作ったように、PowerShellでランダムな日付にしてみます。実行前実行後このように更新日時をめちゃくちゃにしてみます。ファイルソースコードChangeFileUpdatedDateTime.ps1$files = Get-Item *.xlsxforeach($file in $files){ # 現在の日時 $randomDay = (Get-Date) # 減算する日時の値を取得 # 年(0~5年) $minusYear = Get-Random -Maximum 5 -Minimum 0 # 月(0~3か月) $minusMonth = Get-Random -Maximum 3 -Minimum 0 # 日(0~3...