質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

4647閲覧

[VB.NET]SELECT文で検索した結果をEXCEL出力しているのですが処理をもっと高速にしたいです

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/09/28 23:45

編集2020/09/29 00:38

前提・実現したいこと

現在、SQL文で取ってきたデータをエクセル出力しているのですが、もっと高速に処理を終えたいです。

具体的には、Excelに貼り付ける処理を現在はセルに一つ一つに入れているため遅いので二次元配列を使用したいと思っているのですが、初心者なので二次元配列の使用したパターンのソースがわからず困っています。

今後のために二次元配列での出力方法を身に付けたいと思っているためどなたかご教授頂けると幸いです。

Excelへの出力はInterop.Excelを使用しています。

発生している問題・エラーメッセージ

特になし 処理が重たい

該当のソースコード

VB

1 Using dr As SqlDataReader = cmd.ExecuteReader() 2 Dim RngTitle(0, 10) As Object 3 'Dim RngKotei(0, 1) As Object 4 Do While dr.Read() 5 '//EXCELセルへデータセット 6 xlRange = xlTargetTailSheet.Range(xlTargetTailSheet.Cells(ix1, 1), xlTargetTailSheet.Cells(ix1, 11)) 7 RngTitle(0, 0) = Sub_Null_Convert(dr.Item("1"), "") 8 RngTitle(0, 1) = Sub_Null_Convert(dr.Item("2"), "") 9 RngTitle(0, 2) = Sub_Null_Convert(dr.Item("3"), "") 10 RngTitle(0, 3) = Sub_Null_Convert(dr.Item("4"), "") 11 RngTitle(0, 4) = Sub_Null_Convert(dr.Item("5"), "") 12 RngTitle(0, 5) = Sub_Null_Convert(dr.Item("6"), "") 13 RngTitle(0, 6) = Sub_Null_Convert(dr.Item("7"), "") 14 RngTitle(0, 7) = Sub_Null_Convert(dr.Item("8"), "") 15 RngTitle(0, 8) = Sub_Null_Convert(dr.Item("9"), "") 16 RngTitle(0, 9) = Sub_Null_Convert(dr.Item("10"), "") 17 RngTitle(0, 10) = Sub_Null_Convert(dr.Item("11"), "") 18 'RngTitle(0, 11) = Sub_Null_Convert(dr.Item("12"), "") 19 'RngTitle(0, 12) = Sub_Null_Convert(dr.Item("13"), "") 20 xlRange.Value = RngTitle 21 ix1 += 1 22 23 24 '//進捗表示 (アニメーション無効) 25 Row_Count += 1 26 labRowCount.Text = Row_Count 27 Dim val As Integer = Row_Count * 100 / Result_Count 28 If val < ProgressBar1.Maximum Then 29 ProgressBar1.Value = val + 1 30 ProgressBar1.Value = val 31 Else 32 ProgressBar1.Maximum += 1 33 ProgressBar1.Value = val + 1 34 ProgressBar1.Value = val 35 ProgressBar1.Maximum -= 1 36 End If 37 Application.DoEvents() 38 39 'Writer1.WriteLine(sub_GetLogHeader() & "06.EXCEL明細記入NO." & labRowCount.Text) 40 Logger(LogFile, "06.EXCEL明細記入NO." & labRowCount.Text) 41 42 Loop 43 44 End Using 45 46 End Using

補足情報(FW/ツールのバージョンなど)

VisualStudio2017,SQLServer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/09/29 00:25

提示されたソースでも2次元配列を使用していますが、具体的に何が知りたいのでしょうか?
退会済みユーザー

退会済みユーザー

2020/09/29 00:32

より処理を高速にすることは出来ますでしょうか? 二次元配列に設定した値を一括で出力できるようにしたいです・・・
退会済みユーザー

退会済みユーザー

2020/09/29 00:34

現在何を使ってExcel出力しているかを記入してください。 (Interop.Excel、ClosedXml、EPPlus etc)
Y.H.

2020/09/29 02:00

質問後即退会の質問者さんなので回答が欲しいだけの質問でしょうか・・・
退会済みユーザー

退会済みユーザー

2020/09/29 02:37

捨てアカっぽい名前(数字だけの名前)で、回答付く前に退会してましたね 何故そんな事をするのか理解に苦しみますけど
kuma_kuma_

2020/09/29 05:01

もったいない。せっかく回答書こうと思ったのに...
guest

回答1

0

現在、SQL文で取ってきたデータをエクセル出力しているのですが、もっと高速に処理を終えたいです。

SQL Server などのデータベースのテーブルから ADO.NET と ACE OleDb プロバイダを利用してデータを取得し、Excel のブックを新規作成する方法を参考に紹介します。

ACE OleDb で Excel のブック作成
http://surferonwww.info/BlogEngine/post/2012/01/26/Creating-Excel-workbook-by-using-ACE-OleDb-provider.aspx

質問者さんが今行っている方法より高速になるかどうかは分かりません。そこは質問者さんの方で試してみてください。(Interop.Excel とかよりは高速なような気がしますが、気がするだけで、実際に質問者さんのケースで試してみないことには分かりません)

投稿2020/09/29 00:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問