例えばある列に、8桁の整数が入力されているとする。
これらは年月を表しており、年4桁+月2桁+日2桁となっている(yyyymmdd)。これをDate型に切り替えるために、以下のようなマクロを作成した。
Sub test() Dim myRng As Range Set myRng = ActiveSheet.ListObjects(1).ListColumns("年月").DataBodyRange Dim seq As Variant seq = myRng.Value ' 二次元配列を一次元配列に変換。 seq = WorksheetFunction.Transpose(seq) Dim i As Long For i = 1 To UBound(seq) seq(i) = Left(seq(i), 4) & "/" & Mid(seq(i), 5, 2) & "/" & Right(seq(i), 2) Next myRng = WorksheetFunction.Transpose(seq) End Sub
実行してみると、意図したとおりに処理してくれた。
ところがある時、エラーが発生した。
デバックしてみると、ここでエラーが発生している。
色々と調べてみて、原因が分かった。分かったというか、当然と言えば当然の話だった。エラーが起きたデータは、レコードが一つしかなかったのだ。
複数の値があるから、配列になる。しかし値が一つしかないならば、seqはDouble型の変数として振舞ってしまうわけで。
これを配列であるかのように扱ったことが、今回のエラーの原因だった。
対処法は色々とあるだろうが、今回は
If IsArray(seq) Then
で配列か否かを確認して、処理を行った。
それにしてもこの失敗、定期的に起こしているような気がする。
来年の今頃に、また同じような内容のブログを書いているかもしれません。
参考まで。