Search

2018/10/20

Excelでマクロ無しで複雑な条件でif分の判定:powershellのImportExcelとif文

Excelで複雑なif関数の判定が苦手。
if関数をネストしたり、if関数の結果でセルを複数使ったり。
でも、powershellとImportExcelが使えるならもっと簡単にできるはず!
マクロ無しだけど、if文とか使うのでプログラム的なことは必須。


たとえば、B列の人口総数の下1桁の数値が奇数と偶数を判別して、G列の入力するとき。
4桁目も数値だけ漢字に変換してH列に入力するとき。

if文を作って、forで回せばできるはず。
Excelだと少し面倒なのでpowershellの方がいいかも。
ImportExcelがインストールできれば、の話しだけど・・・。

住所から丁目とか番地を除外するのもできそう。
漢数字とかの判定を細かくifで分岐すれば。
---
# エクセルを開く
$xlpkg = Open-ExcelPackage c:\tmp\test.xlsx;

# 一番目のシートをオブジェクトに割り当て
$sh=$xlpkg.workbook.worksheets[1];


# 偶数奇数の判定
# Cells[].textはwriteはできないのでValue使う
for($i=2;$i -le $sh.dimension.rows; $i++){
  $val=$sh.cells[$i,2].value;
  if( ($val % 2) -eq 0){
    $sh.cells[$i,7].value ="偶数";
  }else{
    $sh.cells[$i,7].value ="奇数";
  }
}

#下4桁目の数値を漢字に変更
for($i=2;$i -le $sh.dimension.rows; $i++){
  $val= $sh.cells[$i,2].value;
  $val= [math]::floor( $val / 1000 )%10 ;
  switch( $val){
  0{$sh.cells[$i,8].value ="零";}
  1{$sh.cells[$i,8].value ="壱";}
  2{$sh.cells[$i,8].value ="弐";}
  3{$sh.cells[$i,8].value ="参";}
  4{$sh.cells[$i,8].value ="四";}
  5{$sh.cells[$i,8].value ="伍";}
  6{$sh.cells[$i,8].value ="六";}
  7{$sh.cells[$i,8].value ="七";}
  8{$sh.cells[$i,8].value ="八";}
  9{$sh.cells[$i,8].value ="九";}
  }

}


# エクセルを保存して閉じる
$xlpkg.save();
$xlpkg.dispose();
---

---

# モジュールのインストール
Install-Module ImportExcel

# インストールしたモジュールの確認
Get-InstalledModule

# モジュールのアップデート
Update-Module ImportExcel

---


ImportExcelでは、EPPlusの命令が一部使えるはず。
https://github.com/JanKallman/EPPlus


# 行列の挿入と削除
#最後の追加はCellsで値を設定するだけ。
$sh.InsertColumn(7,1);
$sh.InsertRow(1,3);


$sh.DeleteColumn(7,1);


0 件のコメント:

コメントを投稿