• ベストアンサー

EXCEL2003 VBA でSQLServerに接続。その時カラム名

EXCEL2003 VBA でSQLServerに接続。その時カラム名を表示したい。 いつもお世話になっております。 EXCEL2003のVBAでSQLServerに接続しています。 VBAの中でセレクト分を作って、実行した結果をエクセルシートに返しています。 エクセルシートには、SQLServerから検索した結果が正しく返されますが、 各カラムの名称が表示されません。 できれば、SELECT 文の AS を使って、カラムの名称も変更したいのですが、 VBA経由では、カラム名は表示されないものでしょうか。 何か方法がありましたら、ご教授ください。 以上、よろしくお願いいたします。

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

  • ベストアンサー
  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

dim i as long For i = 0 To rs.Fields.Count - 1 Cells(1, i) = rs.Fields(i).Name Next cells(2,1).copyfromrecordset rs レコードセットオブジェクトがrsとして 上記のコードで1行目にカラム名が表示され,2行目以降にデータが表示されます。

pao5
質問者

お礼

コードがとてもすっきりしました。 ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 私はC#とSQLServerですが、やはりカラム名は第1行目に入りません。 データだけです。 だから自分で1行目にカラム名を付けています。 こんな感じのコードです。 // SQL Server からデータを読み込んでB2以降のセル範囲にセット SqlDataAdapter sAdp = new SqlDataAdapter("SELECT * FROM dbo." + TableName + " ORDER BY よみがな", scn); System.Data.DataTable dtbl = new System.Data.DataTable(); sAdp.Fill(dtbl); object[,] MyArray = new object[dtbl.Rows.Count, 2]; WS.Cells.Font.Name = "MS P明朝"; for (int r = 0; r < dtbl.Rows.Count; r++) { MyArray[r, 0] = dtbl.Rows[r].ItemArray[0].ToString(); MyArray[r, 1] = dtbl.Rows[r].ItemArray[1].ToString(); } WS.get_Range("B2", Type.Missing).get_Resize(dtbl.Rows.Count, 2).Value2 = MyArray; // 見出しの書き込み if (TableName.Substring(0, 3) == "テレビ") { WS.get_Range("A1", "C1").Value2 = new string[] { "番号", "DVD", "タイトル" }; } else { WS.get_Range("A1", "C1").Value2 = new string[] { "番号", "MD", "タイトル" }; } // 列幅のオートフィット WS.get_Range("A1", "C1").EntireColumn.AutoFit();

pao5
質問者

お礼

実は、私も最初は個別に、見出しを作っていました。 とても参考になりました、ありがとうございました。

関連するQ&A