OpenOfficeのマクロ

ウエブからコピーしてきた問題と解答があり、それをOpenOfficeCalcにペースト。それを整形して自分用の問題集に作り変えるという作業をしていた。その問題と解答はたくさんあるのでその整形をいちいちやるのは時間がかかる。だったら、ということでマクロを書いてみた。ところがうまく動かないことがあった。

プログラムの一部分において・・・・

スプレッドシートのA列に答えとその解説がペーストされている。解答部分には「1〜5」とか「ア〜オ」という番号がふってあり、ひとつのセルに入っている。(例えば、「1.妥当である」とか「イ.誤り」など)その下には解説が書かれたセルがある。そのため、セルの内容を読みこんで先頭の文字が「1〜5」または「ア〜オ」だった時とそうでないときという条件判断をする。しかし・・・・

「i」には行の番号が入っている。はじめはこう書いた。

cell = sheet.getCellByPosition(0, i)
cellvalue = cell.string

' cellvalueがENDなら終了する。
if cellvalue = "END" Then exit do

' セルの内容の1文字目を確認する。
firstString = Left(cellvalue, 1)

if cellvalue <> "" then
' 最初の文字が(1〜5)または(ア〜オ)であるか?
ascii = asc(firststring)
if (ascii > 48 and ascii < 54) or (ascii > 12449 and ascii < 12458) then
.............

しかし、「ascii = asc(firststring)」のところでオーバーフローのエラー。

Screenshot_from_2015-03-16 19:32:47どうも「1〜5」や「ア〜オ」以外のところで止まってしまう模様。asc()に何か条件でもあったのか?それとも文字セットの問題なのか?

たぶん、エラーになるだろうと思いつつも、最後の2行をこう書き換えるとすんなり動く。

if (firststring >= "1" and firststring <= "5") or ( firststring >="ア" and firststring <= "オ") then

う〜ん。BASICってこんな書き方で動いちゃうんだって実感した。javaでもこういう書き方は通ったかしら?

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です