- ベストアンサー
データベースから値を表示するマクロ - エラーメッセージを解決する方法
- Oracle12Cのデータベースからexcelへデータをもってくるマクロを作成しましたが、文字列の表記が標準になってしまう問題に直面しました。
- マクロを実行すると、日時のデータが指数表記になったり、先頭の0が削除されたりしてしまいます。
- jissekiArr配列を文字列として宣言すると実行時エラーが発生し、Nullの使い方が正しくないというエラーメッセージが表示されます。文字のまま抽出する方法を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ORACLEから持ってきた数値データ(変数の)前(先頭)にアポストロフィを結合して、シートのセルに代入すれば(代入する前に先頭に’を使たデータ化する)仕舞ではないか。 セルA1に0012 があるとする。(ORCLE(SQL)が小生は使えないので、このようにしてテスト) エクセルVBAですが Sub test01() Cells(2, "A") = "'" & Range("A1 ") End Sub を実行する。 普通なら(=手入力では)12になるところ 00012 となった。 なおORACLE側での文字列結合は concat関数か、||を使うのだと思う。 何しろ当方は、ORACLEのテスト環境がないのでうまく行かなければ後免。 >どうしたら、文字のまま抽出できるか教えて頂きたく。 エクセル側の数値データ表示の(特徴あるクセ)問題だと思う。
その他の回答 (2)
- bunjii
- ベストアンサー率43% (3589/8249)
>これだと日時のデータが >20161221151143 >の部分が >2016E+13 日時のデータは"2016/12/21 15:11:43"のように加工してからセルへ代入しないと14ケタの整数になるでしょう。(標準形式では指数表示のため2.01612E+13となる) >先頭に0があるコード >0601000 >が >601000 >の様に表示されてしまいます。 代入するセルの表示形式を"@"(文字列)に指定してから値を代入してみると良いでしょう。 >Dim jissekiArr() >の部分を >Dim jissekiArr() as string >とすると、 配列変数のサイスを固定する必要があるようです。 例:Dim jissekiArr(1000,100) as string >※貼り付けるシートsheet1を全て文字列にしておいても、標準に変更されてしまいます。 配列変数(jissekiArr)を一挙にSheet1へ代入せずにforループで1セルずつ代入されると解決するかも知れません。(代入の直前で表示形式を文字列に変更する)
- tsubu-yuki
- ベストアンサー率46% (179/386)
列が決まっているなら 取り込む前に数値の表示形式を「文字列」にしてしまうのもあり? Columns("B").NumberFormatLocal = "@" などのように。 同様、オラクルの環境がないので、 テストはしてません。
補足
Columns("C").NumberFormatLocal = "@" Columns("AJ").NumberFormatLocal = "@" Columns("AP").NumberFormatLocal = "@" Columns("AV").NumberFormatLocal = "@" Columns("AY").NumberFormatLocal = "@" 'データの表示 の前に上記設定をして、文字列表示出来ました。
お礼
ありがとうございます。助かりました。
補足
jissekiArr(rownum + 1, colnum) = rs(colnum).Value の部分を jissekiArr(rownum + 1, colnum) = "'" & rs(colnum).Value にすることで、文字列表示出来ました。