社内システムの期次移行処理のうちに、
MicrosoftExcel内のワークブックから、完了になった案件のシートを削除する
というのがあった。
数千枚になるので、プログラムを書いて処理することにする。それほど難しくもないのだが、消してはいけないシートまで削除していないことをどうやって確かめよう、が気になった。
削除すべきものが残ってしまった場合は、作業的にはともかく、データ的にはまだましだ。リカバリが可能だからである。しかし削除してはならないものを消してしまうと、いろいろと問題が大きい。
テストを十分にやった、だから大丈夫、と言えるほど私の心臓は太くない。
なので、データ消失が起こってないこと、を実作業の中で確認することを考えた。
「削除件数+残存件数=元の件数」
で確認でするのが基本だがもう一押しほしい。もしこれが「金額」を含むものであれば、最重要情報なので合計額をあわせれば皆さん納得してくれるのだが「ない」。
要するに、そういった「金額が絡む」システムの移行を多量に手掛けてきた、という経験があるので、どこかの値をチェックしておかないと落ち着かない体質になってしまったのである。
ところが今回のシートは、そういうものがない。せいぜい日付である。
「よし、日付のシリアル値を合計しよう!」
作りました/動かしました/落ちました。
日付を入れる欄なのだけど別の値を(メモなのか?)入れていたユーザーさんがいたようです。(入力インターフェースでチェックする仕組みにできない事情があったのだよね。)
そこで考えたのが
特定セルの値を1文字ずつに分解して、文字コードを取得し、合計してやる、というもの。
セル値のテキストプロパティを取得し、一文字ずつ切りだしてAscWで文字コードに変換する、と。
関数自体は文字列を渡すと、文字コードを数値とみた合計を返す、というシンプルすぎるもので済みます。こんな感じ。
Function 文字コード値の合計(元文字列) AsLong
Dim ans AsLong
Dim n as long
Dim 元文字列長 As Long
Dim cLetter As String
ans = 0
元文字列長 = Len(元文字列)
From n = 1 To 元文字列長
cLetter=Mid(元文字列, n, 1)
ans = ans + AscW(cLetter)
Next n
文字コード値の合計 = ans
End Function