# DataTable01.rb.txt: ruby script (encoding: Windows-31J) # データテーブルの操作 z_DataTable01.xls を出力 # BMI = 体重(キログラム) ÷ 身長(メートル) ÷ 身長(メートル) # 体重50〜80Kg(5Kg刻み)、身長150〜180Cm(5Cm刻み)のBMIを算出 require "exlap" # データテーブル設定に必要な情報の定義 row_data = [50, 55, 60, 65, 70, 75, 80] # 横方向データ(体重) col_data = [150, 155, 160, 165, 170, 175, 180] # 縦方向データ(身長) row_cell = "H1" # 横方向データ用の代入セル col_cell = "I1" # 縦方向データ用の代入セル formula_cell = "B3" # 計算式のセル(データテーブル領域の始点を当てる) formula = "#{row_cell}/((#{col_cell}/100)^2)" # BMIの計算式 filename = "z_DataTable01.xls" if test(?e, filename) # z_DataTable01.xls が存在するなら削除 File.unlink(filename) end xl = Exlap.new # Excelの起動 xl.opens(filename) do |wb| # ワークブックを開く ss = wb.fes # 空のワークシートを選択 y,x = Exl::yx(ss.Range(formula_cell)) # 計算式セルの番地を数値で得る ss.from_a(y,x+1, row_data) # 横方向のデータ(体重)を書き込む col_data2 = Exl::table_turn(col_data) # 配列の縦・横を逆転 ss.from_a(y+1,x, col_data2) # 縦方向のデータ(身長)を書き込む ss.Range(formula_cell).Formula = "=IF(OR(#{row_cell}=\"\"," + "#{col_cell}=\"\"),\"\",#{formula})" rng = ss.Range(formula_cell).CurrentRegion # データテーブル領域全体 rng.Table('RowInput'=>ss.Range(row_cell), # データテーブルを設定 'ColumnInput'=>ss.Range(col_cell)) ly,lx = ss.range_last(rng) # データテーブル領域の終点を数値で得る ss.rr(y+1,x+1, ly,lx).NumberFormatLocal = "#0.0" # 小数点1桁まで表示 # 見出しなどの書込み ss[1,1] = "BMIの算出結果" ss[y-1, x+1] = "体重" # 横方向の見出し ss[y-1, x+2] = "(kg)" # 体重の単位(キログラム) ss[y+1, x-1] = "身長" # 縦方向の見出し ss[y+2, x-1] = "(cm)" # 身長の単位(センチメートル) wb.save # ワークブックの保存 end xl.quit # Excelの終了