# DataTable02.rb.txt: ruby script (encoding: Windows-31J) # データテーブルの操作 z_DataTable02.xls を出力 # 3千万円を借りた場合、返済年数 10〜35年(5年刻み)、 # 年利 1%〜3.5%(0.5%刻み)の返済月額を算出 # Excelの関数 PMT(金利,返済期間,返済総額) で単位あたり返済額を得る # 年利2%, 返済年数30年, 返済総額3千万の返済月額を得るには # PMT(0.02/12, 30*12, 30000000) とする。 require "exlap" # データテーブル設定に必要な情報の定義 amount = 30000000 # 返済総額 row_data = [10, 15, 20, 25, 30, 35] # 返済年数 col_data = %w(1% 1.5% 2% 2.5% 3% 3.5%) # 年利 row_cell = "H1" # 横方向データ用の代入セル col_cell = "I1" # 縦方向データ用の代入セル formula_cell = "B3" # 計算式のセル(データテーブル領域の始点) formula = "PMT(#{col_cell}/12,#{row_cell}*12,-#{amount})" filename = "z_DataTable02.xls" if test(?e, filename) # z_DataTable02.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" # カンマ付き整数 # 見出しなどの書込み ss[1,1] = "ローン返済月額の算出" ss[1,2] = "返済額 #{amount}円" ss[y-1, x+1] = "返済期間(年)" # 横方向の見出し ss[y+1, x-1] = "年利" # 縦方向の見出し wb.save # ワークブックの保存 end xl.quit # Excelの終了