• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベースから取得した値を文字で表示する)

データベースから値を表示するマクロ - エラーメッセージを解決する方法

このQ&Aのポイント
  • Oracle12Cのデータベースからexcelへデータをもってくるマクロを作成しましたが、文字列の表記が標準になってしまう問題に直面しました。
  • マクロを実行すると、日時のデータが指数表記になったり、先頭の0が削除されたりしてしまいます。
  • jissekiArr配列を文字列として宣言すると実行時エラーが発生し、Nullの使い方が正しくないというエラーメッセージが表示されます。文字のまま抽出する方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

ORACLEから持ってきた数値データ(変数の)前(先頭)にアポストロフィを結合して、シートのセルに代入すれば(代入する前に先頭に’を使たデータ化する)仕舞ではないか。 セルA1に0012  があるとする。(ORCLE(SQL)が小生は使えないので、このようにしてテスト) エクセルVBAですが Sub test01() Cells(2, "A") = "'" & Range("A1 ") End Sub を実行する。 普通なら(=手入力では)12になるところ 00012 となった。 なおORACLE側での文字列結合は concat関数か、||を使うのだと思う。 何しろ当方は、ORACLEのテスト環境がないのでうまく行かなければ後免。 >どうしたら、文字のまま抽出できるか教えて頂きたく。 エクセル側の数値データ表示の(特徴あるクセ)問題だと思う。

3620313
質問者

お礼

ありがとうございます。助かりました。

3620313
質問者

補足

jissekiArr(rownum + 1, colnum) = rs(colnum).Value の部分を jissekiArr(rownum + 1, colnum) = "'" & rs(colnum).Value にすることで、文字列表示出来ました。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.3

>これだと日時のデータが >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セルずつ代入されると解決するかも知れません。(代入の直前で表示形式を文字列に変更する)

回答No.2

列が決まっているなら 取り込む前に数値の表示形式を「文字列」にしてしまうのもあり?   Columns("B").NumberFormatLocal = "@" などのように。 同様、オラクルの環境がないので、 テストはしてません。   

3620313
質問者

補足

Columns("C").NumberFormatLocal = "@" Columns("AJ").NumberFormatLocal = "@" Columns("AP").NumberFormatLocal = "@" Columns("AV").NumberFormatLocal = "@" Columns("AY").NumberFormatLocal = "@" 'データの表示 の前に上記設定をして、文字列表示出来ました。