データベースから取得した値を文字で表示する
office2010 Oracle12C
Oracle12CのデータベースからexcelへデータをもってくるマクロをWEB参照しながら作成しました。
しかしながら、配列構成でひっぱると、”文字列”で表示したい内容が”標準”の書式になってしまいます。
マクロは下記です。
Sub shutoku()
'ADO用のオブジェクト変数の宣言
Dim cn As New ADODB.Connection 'コネクション
Dim rs As New ADODB.Recordset 'レコードセット
Dim rownum As Long
Dim colnum As Integer
Dim jissekiArr()
Application.ScreenUpdating = False
'クリア
Worksheets("Sheet1").Cells.Clear
'dwhへ接続
cn.Open "Provider=OraOLEDB.Oracle;Data Source= dwh ;User ID=dwh;Password=dwh;", "dwh", "dwh"
'ADOレコードセットの生成(全データを返すレコードセットの生成)
'DBから条件で抽出する
rs.Open "select * from TABLE_NAME where CD = 'コード'", cn, adOpenDynamic, adLockOptimistic, adCmdText
'配列の初期化
rsCount = 0
Do Until rs.EOF
rs.MoveNext
rsCount = rsCount + 1
Loop
ReDim jissekiArr(rsCount, rs.Fields.Count)
'データレコードを最初に戻す
rs.MoveFirst
'フィールド名の表示
For colnum = 0 To rs.Fields.Count - 1
jissekiArr(0, colnum) = rs(colnum).Name
Next
'データの表示
rownum = 0
Do Until rs.EOF
For colnum = 0 To rs.Fields.Count - 1
jissekiArr(rownum + 1, colnum) = rs(colnum).Value
Next
rs.MoveNext
rownum = rownum + 1
Loop
'配列をシートに出力する。
Sheets("Sheet1").Select
Range(Cells(1, 1), Cells(rsCount + 1, rs.Fields.Count)) = jissekiArr
'オブジェクトのクローズ
rs.Close
cn.Close
'各種オブジェクトの開放
Set rs = Nothing
Set OraDatabase = Nothing
Set OraSession = Nothing
Erase jissekiArr
End Sub
これだと日時のデータが
20161221151143
の部分が
2016E+13
先頭に0があるコード
0601000
が
601000
の様に表示されてしまいます。
Dim jissekiArr()
の部分を
Dim jissekiArr() as string
とすると、
jissekiArr(rownum + 1, colnum) = rs(colnum).Value
の部分が黄色く表示され、
実行時エラー'94'
Nullの使い方が不正です。
となります。
どうしたら、文字のまま抽出できるか教えて頂きたく。
※貼り付けるシートsheet1を全て文字列にしておいても、標準に変更されてしまいます。
お礼
回答ありがとうございます。 tanka = RS.fields("TANKA") + 0 この行で(型が一致しません。)のエラーが出てしまいますが、 tanka = RS.fields("TANKA") &"" 文字列にしたら計算ができて思い通りの結果がでました。ありがとうございました。