学内で行なった模擬試験解答をマークシートで読み取って集計。とある事情で中間処理をExcelで行うことに。
エクスポートされた認識結果をExcelで読み込み、正解データ(選択枝番号)と一致するかどうかをIF関数でチェックして1か0を与えることにした。
ところがどうも得点の様子がおかしい。よく見ると、Excelで読み込んだときに、一部の列が文字列形式で読み込まれている。なので文字列と数値を比較しても一致せず、得点に計上されていないことが判明。
さらに酷いことに、これらのデータは単にセル書式で文字列に指定されているのと違い、数字の前にアポストロフィーをつけて入力したと同じ状況になっている。こうなると範囲を指定してセルの書式を変更してもだめ。
結局Excel上のデータをコピーしてテキストエディタにタブ付き文字列として貼り付け、さらに全面文字列のセル書式を設定したワークシートに貼り付け直す。という変な方法で、すべて文字列で比較して採点するようにして何とかなった。
【教訓】アポストロフィーをつけて文字列として入力したデータと、数値として入力したセルの書式を文字列に直したデータは同じではない。(セル書式の文字列のところの説明「数値も文字列として扱います」は、ウソを書いているか誤解を与える表現だ。文字列として扱うといいながら、アポストロフィーをつけて文字列として入力したものとは一致しないようだ。)
さらに凄いのは
セルに123と数値入力→セル書式を文字列に設定。この段階で「'123」と入力したセルとは不一致
123の前にアポストロフィーを挿入→当然「'123」と入力したセルとは一致(if関数で判定・確認)
挿入したアポストロフィーを数式バーで削除
もとの「不一致」に戻るかと思いきや、IF関数の判定は「一致」。ところが数式バーを見ると片方にはアポストロフィーがなく、もう片方にはついている。
一体全体どうなってんだ?
これって、入試などでマークシート読み取りで採点しているところで問題になっていないのだろうか?(調べてみてはいないが)Excelで入試の採点なんて怖くて出来ないのでは。