miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

Excel で選択範囲の単位を書式情報に移すスクリプト

先日見積りを作成してまして。

まあこんな感じで延々と工数を書いていく具合なんですけど、この Excel シートが全然ダメで、この「75ケース」って書いてある部分がそのまんま値に「75ケース」と書かれている。書式情報として「0ケース」を指定して、値として「75」を指定する形式じゃないと計算式で使えないでしょ。

ということでイラっときたので作った Ruby スクリプト

# "1(枚)"といった値が割り当てられたセルについて、
# 内容は 1 に、書式は "0(枚)" に変更するスクリプト

require 'win32ole'

# 起動中の Excel を取得
excel = WIN32OLE.connect('Excel.Application')
excel.visible = TRUE

# アクティブシートを選択
workbook = excel.ActiveWorkBook;
puts workbook.Name
worksheet = workbook.Activesheet;
puts worksheet.Name

# 選択部分の各セルの値を書式に外だし
excel.Selection.each {|cell|
  next if cell.value == nil # 空フィールドは判定せず次のセルの処理へ
  
  if cell.value.is_a?(String) and cell.value.match(/(\d+)(.*)/) then
    cell.value = $1
    cell.Select()
    excel.Selection.NumberFormatLocal = %Q<0"#{$2}">
  end
}

まあ書いてるとおりで、処理したいセルを選択&そのブックとシートをアクティブにしておいて .rb を呼び出すと書式情報に外だししてくれます。こうしれおけば「工数」のセルも「=<ケースあたりの時間>*<左のセル番号>」みたいな計算式で表せてすっきり、と。

今回みたいな変なシートに出会ったときにも使えますし、自分でこの手のテンプレート作るときにも使えそうですね。