• ベストアンサー

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

  • Excel VBAでSQLSERVERに接続、登録できますか

    Excel VBAでSQLSERVERに接続し SELECTしたりINSERTしたり できますか? できる方法(プログラム) を教えてください よろしくお願いします。

  • VBAで実行押すまでExcel非表示にしたい

    VBAでユーザフォームを作成しました。 Excelを立ち上げるとExcelシートの前にユーザフォームが出る状態なのですが、 ユーザフォームの実行ボタンを押すまでは非表示にしたいのですが、どのような記述をしたらよいでしょうか? マクロ的に実行ボタンを押すと結果が、Excel上に反映されるので、実行ボタンを押すまで非表示であれば大丈夫です どうか教えてください。

  • SQLServerに接続できない

    SQLServerを別PCにて稼動させて、クライアントPCよりVBAにて接続を試みているのですが、「SQLServerが存在しないか、アクセスが拒否されました。」と出て、接続が出来ません。 何が問題なのか分からず、困っています。 どなたかご教授頂けないでしょうか。 (ローカルで接続する分には、接続が出来る事を確認しています。) また、環境は以下のような形です。 ServerPC名:AAA SQLバージョン:SQLServer2005Express ServerOS:Win2003Server ログイン用アドレス:TAROU クライアントのVBAは以下のような記載をしています。 ------- Dim strSQL As String Dim rsTmp As ADODB.Recordset Dim DB As String DB = "Provider=MSDASQL;Driver={SQL Server};" & "Server=AAA\SQLEXPRESS;" & "Database=TEST;" & "" Set rsTmp = New ADODB.Recordset strSQL = "SELECT * From TEST_TABLE" rsDeli.Open strSQL, DB, adOpenStatic, adLockOptimistic -----------------

  • Excelを使用してSQLServerに接続

    主題の件について教えて下さい。 現在Excel2003のVBAを使用して、SQLServerにODBC接続し、 DBのテーブルデータを取得し、Excelに表示出来ないかを考えているの ですが、VBAの知識がほとんど皆無なので一向に進みません。 何か参考になるページなどありましたら教えてください。 理想はExcelのボタン一つでデータが取得出来れば良いのですが・・・。 よろしくお願いいたします。

  • ●Excel VBAからSQLServerのデータベースへのADO接続

    ●Excel VBAからSQLServerのデータベースへのADO接続をopenしたい ローカルのExcel VBAから、Windows2003Serverで動いているSQLServerのデータベースへのADO接続をopenにできるコードを教えてください =========================================== <環境> データベースの場所は、サーバーマシンのFドライブ内にあります。 (具体的には、サーバーマシンの『f:\SQLData\MSSQL\data\OrderSQL2.MDF』が接続先実体で、サーバーマシンのIPは192.168.16.2です(ipconfig/allでIP確認)。) また、ローカルマシンは、ローカルOS:WinXP、エクセルのバージョンはExcel2007、ローカルユーザーのサーバーでのWindows認証はすでにされており、Microsoft ActiveX Data Object2.8 Library, Microsoft ADO Ext.2.8 for DDL and Securityといったエクセルの参照設定は追加してあります。 =========================================== <結果> ここで、以下のコードを書いたのですが『ユーザーのログインに失敗しました。理由:SQL Serverの信頼関係接続に関連付けられていません』というエラーが出て接続できません。 試しに、SQLServerのセキュリティ認証モードを混合モードにしても変わりません。 どなたかご教授いただけると本当に助かります。 ヒントや思いつきでもいいので、何卒宜しくお願いします。 Sub DBconection()     Set Cn = New ADODB.Connection    Cn.Provider = "SQLOLEDB.1"    Cn.ConnectionString = _    "Data Source=192.168.16.2;" & _    "User Id=funao74;" & _    "Password=password;" & _    "Initial Catalog=OrderSQL2"    Cn.Open End Sub

  • Access2002でSQLSERVERに接続

    Access2002でSQLSERVERに接続してデータを参照しクエリを実行して個別集計したいのですが、こっそり接続したいので方法を教えてください。 目的:Accessを開いたら、設定したSQLSERVERのテーブルがクエリ実行されて希望の集計結果が表示されるようにしたい(権限は参照)。テーブル設定情報はクライアントに見せない(セキュリティの為) 近所の書店ではあまり参考になる本がなかったので検索した情報をもとに下記方法で接続してみることにしました。 (1)標準モジュールを設定  Sub DB接続() dim adocon as New ADODB.Connection adocon.Open "Deiver={SQL Server}; server=サーバー名; database=DB名; uid=ID; pwd=パス;" cn.Open end sub (2)マクロにてAutoExecを作成   プロシージャーの実行でAutoExecを設定し、モジュールにはAutoEXEC()にて   Call DB接続を設定しました。 しかしこれではうまく接続できたのかどうかも動作確認できません。また(2)の処理後に select * from テーブル名 のクエリを実行するように設定しても、テーブルがないと メッセージが表示されるので、うまく動作できてないようです。 クエリにて 「select * from [odbc;Driver={SQL Server}; Server=サーバー名; uid=ID;database=DB名;].テーブル名;」では接続してSQLSERVERのテーブル情報が見れます。なので名前などの間違いではないようです。(Accessの知識不足ですが、一つしかテーブルが参照できなく、複数のテーブルから色々条件を設定してデータ抽出ができないので使えないと判断しました) モジュールやマクロを利用してSQLSERVERからデータを参照するコマンド・方法を教えてください。

  • SQLSERVERへの接続

    SQLSERVER2000を使用しています。 クライアントPCからSQLServerへ接続して、SQLを実行しデータをselect等おこないたいのですが、クライアントPC側に何かソフトをインストール必要がありますか?

  • 旧VBAがExcel2013で突然実行エラー

    Excel2003で作ったVBAマクロを互換モードで保存し、ずっとExcel2013で実行できていましたが、2014.12.13に実行しようとしましたら、 Sheets("当番表サンプル").Select で実行エラー(インデックスエラー)になってしまいました。 Excel2010で実行したら、通りました。 どういう理由でしょうか?

  • カラム名について。

    忙しいところ申し訳ありません。 ● 使ってるソフト ORACLE SQLplus <状態> データベースについての質問なんですが、 1.カラム名を日本語してあります。 2.select文コマンドで入力したとき、ORACLE SQLplus でカラム名が表示されません。 データは取れているのですが、日本語にしているとカラム名が表示されないということが、あるのでしょうか?

  • Excel2007 VBA Daoクラス

    コーディング設計の質問です。 Oracle10gのDBに以下のテーブルがあります。 テーブル名:TEST_TABLE カラム名:CODE, NAME これから値を取得する際以下の方法をとっているのですが、VBA的に変なやり方ではないでしょうか。 クラスモジュール:TestDao, TestBean ExcelObjects----------------- Set ArrayList = TestDao.GetSQLResult(Conn, "検索条件", "0") For i = 1 To ArrayList.Count Step 1 Set Bean = New TestBean Set Bean = ArrayList.Item(i) Call Draw(Sheet, Bean, 1, 1) Row = Row + 1 Set Bean = Nothing Next i 描画メソッド-------- Private Sub Draw(ByVal Sheet As Object, _ ByVal Bean As Object, _ ByVal Row As Integer, _ ByVal Col As Integer) Sheet.Cells(Row, Col).Select ActiveCell.FormulaR1C1 = Bean.GetCode() Sheet.Cells(Row, Col + 1).Select ActiveCell.FormulaR1C1 = Bean.GetName() End Sub JAVAに触った方ならわかると思うのですが、 TestDaoにはSQL文を記述・実行し、取得した結果を格納する。 TestBeanにはテーブルのカラムのプロパティを配置しています。 VBAの場合、こういったクラスを作成する必要はありますでしょうか。 (より良いやり方はありますでしょうか)

このQ&Aのポイント
  • HP203を使用している方が質問です。
  • ヘッドフォン接続部品を購入したいと思っています。
  • 販売場所を教えていただけますか?
回答を見る