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

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

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

解決済

AccessからExcelデータの加工・出力時間が長い

ukana
ukana

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

1回答

0リアクション

0クリップ

341閲覧

投稿2022/09/05 01:12

編集2022/09/05 01:17

前提

お世話になっております。

Microsoft access 365で
データベース構築をしています。

AccessVBAからExcelデータをエクスポートするのですが
出力したExcelを開くと関数として表示したかったセルが
テキストとして出力され自動計算されません。
(出力されたExcelデータの該当セルをTYPE関数で見ると
論理値(4)ではなくテキスト(2)でした)

そこで別の質問にてお聞きしたところ
(https://teratail.com/questions/ubyo6wcepiu0ea)
CreateObject("Excel.Application")から
Excelオブジェクトでの編集を提案して頂き
そちらを実施しました。
確かにテキストだったものが関数として出力されましたが
データ出力までに1分ほどかかります。
(前回質問の回答の意図がくみ取れておらず
適切なプログラムでないかもしれません。)
そこで別の方法がないかお聞きしたいです。

実現したいこと

AccessからExcelデータを出力するのに
関数を記載したテキストが論理値として出力される
もしくはテキストとして出力後
論理値として変換される。
これを出力時間30秒程度で実現したいです。

該当のソースコード

前回質問時(変更前)のテキストとして出力される
関数部分(処理1~3)のプログラムでの記載内容が以下です。

vba

Do Until rsa.EOF j = j + 1 If rsa!間口 <> Null Or rsa!間口 <> "" Then i = i + 1 rsa!照合1 = "1" rsa!照合2 = "2" rsa!処理1 = "=IF(E" & j & "=L" & j & ",TRUE,FALSE)" rsa!処理2 = "=IF(MID(M" & j & ",11,15)=E" & j & ",TRUE,FALSE)" rsa!処理3 = "=IF(MID(M" & j & ",27,1)=F" & j & ",TRUE,FALSE)"        rsa.Update End If rsa.MoveNext Loop

上記のレコードセット記載の内容を追加したテーブルを
Excelテンプレートに出力します。
上記のコードが記載し下記のプログラムで出力されたExcelデータを開き、
該当セルを選択→enterで確定してみるとテキストから関数として認識されます。

vba

Const csOutputTemplate As String = "出力テンプレート.xltx" strFileName = pass & "\" & name & Format(day, "yyyymmddhhmm") & ".xlsx" Set xlapp = CreateObject("Excel.Application") Set myCn = CurrentProject.Connection strsql = "SELECT * FROM checksheet WHERE ((間口)>0) ORDER BY ID" myRs.Open strsql, myCn, adOpenForwardOnly, adLockReadOnly With xlapp strTemplate = Application.CurrentProject.Path & "\" & csOutputTemplate .Workbooks.Open strTemplate .Cells(5, 1).CopyFromRecordset myRs '結果値出力処理(ヘッダー位置調整) .ActiveWorkbook.SaveAs FileName:=strFileName End With

論理値として出力されますが出力に1分ほどかかるプログラムが以下です。
こちらでは上記のレコードセットの書き込みはせず
Excelテンプレートで出力後にobjWs.Cells(, ).Valueを
利用してAccessからExcelへ書き込んでいます。
この処理に変えた途端出力時間が長くなったように思うので
別の方法があれば教えて頂きたいです。

vba

Dim objExcel As Object, objWb As Object, objWs As Object Set objExcel = CreateObject("Excel.Application") Set objWb = objExcel.Workbooks.Open(pass) Set objWs = objWb.Worksheets("Sheet1") Dim wb As Workbook Set wb = ActiveWorkbook Dim j As Integer objWs.Cells(2, 18).Value = Now() For j = 5 To max If objWs.Cells(j, 9).Value <> "" And objWs.Cells(j, 6).Value <> "対象外" Then objWs.Cells(j, 13).Value = "1" objWs.Cells(j, 14).Value = "2" objWs.Cells(j, 15).Value = "=IF(E" & j & "=L" & j & ",TRUE,FALSE)" objWs.Cells(j, 16).Value = "=IF(MID(M" & j & ",11,15)=E" & j & ",TRUE,FALSE)" objWs.Cells(j, 17).Value = "=IF(MID(M" & j & ",27,1)=F" & j & ",TRUE,FALSE)" End If Next j objWb.Save Set objWs = Nothing Set objWb = Nothing objExcel.Quit Set objExcel = Nothing

よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/05 01:33

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

ukana

2022/09/05 02:12

出力時間30秒程度と具体的な理想を 書いてしまいましたが プログラムの全体像を書いておらず 環境にも依存するので 現状の出力速度より早くなるような 方法ありましたら教えて頂きたいです。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。