Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1511 / 2272 ツリー ←次へ | 前へ→

【6585】レコード数を制御して、Excelへ吐き出し Saiyama 05/10/25(火) 13:11 質問[未読]
【6592】レコード数を制御して、Excelへ吐き出し Saiyama 05/10/25(火) 17:13 質問[未読]
【6594】Re:レコード数を制御して、Excelへ吐き出し Gin_II 05/10/25(火) 17:24 回答[未読]
【6597】Re:レコード数を制御して、Excelへ吐き出し 小僧 05/10/25(火) 17:51 回答[未読]
【6601】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/10/26(水) 7:42 質問[未読]
【6605】Re:レコード数を制御して、Excelへ吐き出し 小僧 05/10/26(水) 9:46 発言[未読]
【6620】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/10/26(水) 22:41 質問[未読]
【6622】Re:レコード数を制御して、Excelへ吐き出し 小僧 05/10/27(木) 9:57 回答[未読]
【6669】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/10/29(土) 22:05 質問[未読]
【6671】Re:レコード数を制御して、Excelへ吐き出し 小僧 05/10/29(土) 23:04 発言[未読]
【6680】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/10/30(日) 19:41 質問[未読]
【6681】Re:レコード数を制御して、Excelへ吐き出し まさ7251 05/10/30(日) 20:32 回答[未読]
【6701】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/10/31(月) 21:36 質問[未読]
【6702】Re:レコード数を制御して、Excelへ吐き出し まさ7251 05/10/31(月) 22:23 発言[未読]
【6768】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/11/8(火) 18:17 質問[未読]
【6769】Re:レコード数を制御して、Excelへ吐き出し 小僧 05/11/8(火) 18:51 回答[未読]
【6791】Re:レコード数を制御して、Excelへ吐き出し Saiyama 05/11/10(木) 22:26 質問[未読]
【6794】Re:横から失礼 たん 05/11/11(金) 10:30 発言[未読]
【6795】Re:横から失礼 たん 05/11/11(金) 10:36 発言[未読]
【6810】Re:横から失礼 Saiyama 05/11/12(土) 0:49 質問[未読]
【6813】Re:横から失礼 たん 05/11/15(火) 9:03 発言[未読]

【6585】レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/25(火) 13:11 -

引用なし
パスワード
   いま、大変難しい問題を直面しています。
完全に私の能力を超えています、
よろしくお願いします。

下記のクエリAをExcelへ出力します。
其の構成は以下の通り、
文字1:テキスト
文字2:テキスト
文字3:テキスト
数字1:数値



数字34:数値

クエリAの20レコードごとに(上〜下順)フィールド名を挿入したいですが、
可能でしょうか?

文字1    文字2     文字3     数字1   ・・・数字34




文字1    文字2     文字3     数字1   ・・・数字34




文字1    文字2     文字3     数字1   ・・・数字34





【6592】レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/25(火) 17:13 -

引用なし
パスワード
   かなり難しい質問ですが、ぜひよろしくお願いします・
具体的にいいますと、

書き出されているEXCELデータの順番は以下のようになってほしいです。
1 行目 クエリAのタイトル
2    レコード
・    レコード
・    レコード
・    レコード
21行目 レコード
22行目 クエリAのタイトル
23   レコード
24   レコード



42行目 レコード
43行目 クエリAのタイトル

【6594】Re:レコード数を制御して、Excelへ吐き出し
回答  Gin_II  - 05/10/25(火) 17:24 -

引用なし
パスワード
   > クエリAの20レコードごとに(上〜下順)フィールド名を挿入したいですが、
> 可能でしょうか?

Excel で行のタイトルを設定するとか、
ユニオンクエリで、強引にフィールド名を入れてやるとか。。

ですかねぇ

【6597】Re:レコード数を制御して、Excelへ吐き出し
回答  小僧  - 05/10/25(火) 17:51 -

引用なし
パスワード
   ▼Saiyama さん、Gin_II さん:
こんばんは。

Excel 側で操作をしてみました。

Sub 標題を20行毎にExcelに主力()
'要参照 Microsoft DAO x.x Object Library
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim xName As String
Dim RS As DAO.Recordset
Dim QName As String
Dim i As Long
Dim j As Long
Dim LastRow As Long
Const lngMaxRow As Long = 20

  xName = "C:\Test2.xls"
  
  On Error Resume Next
    Kill xName
  On Error GoTo 0

  QName = "クエリ名"
  LastRow = DCount("*", QName)
  
  Set RS = CurrentDb.OpenRecordset(QName, dbOpenSnapshot)

  Set xlsApp = CreateObject("Excel.Application")
  'xlsApp.Visible = True
  Set xlsWkb = xlsApp.Workbooks.Add
    With xlsWkb.Sheets("Sheet1")
      Do Until RS.EOF
        For i = 0 To RS.Fields.Count - 1
          .Cells(j * (lngMaxRow + 1) + 1, i + 1).Value = RS(i).Name
        Next
        .Cells(j * (lngMaxRow + 1) + 2, 1).CopyFromRecordset RS, lngMaxRow
        j = j + 1
      Loop

    End With
  RS.Close: Set RS = Nothing
  xlsWkb.SaveAs xName
  xlsWkb.Close True: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  MsgBox "エクスポート終了"
End Sub

ExcelVBA を使っていますので理解出来ない所もあるかとは思いますが、
解らない事がありましたら遠慮せずに質問なさって下さい。

【6601】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/26(水) 7:42 -

引用なし
パスワード
   小僧さん
Gin_IIさん
 お早うございます。
 早速返事をいただき、ありがとうございます。
 Excel側の制御方法は運用の面では、難しいようです。
 やはりAccess側に制御をかけたいです。困難でしょうか?
 ご伝授ください。

【6605】Re:レコード数を制御して、Excelへ吐き出し
発言  小僧  - 05/10/26(水) 9:46 -

引用なし
パスワード
   ▼Saiyama さん:
おはようございます。

>Excel側の制御方法は運用の面では、難しいようです。

前回の説明で誤解があったようですが、

>>Excel 側で操作をしてみました。

Access から Excel を制御しExcel の命令を Access から発行させました。

という意味なのですが、
それでも運用上無理があるという事でしょうか。

提示したコードはもちろん Access に記述するコードですよ。

【6620】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/26(水) 22:41 -

引用なし
パスワード
   小僧さん
 こんばんは、早速やってみました、いい感じです!
 本当にこんな複雑な制御までできてしまいなんて、信じられません。本当に感謝して
おります。
 あとはもう一つの質問がありますので、よろしくお願いします。
 毎回出力時に行間の設定や文字サイズなどをしなければならないので、少し手間です
よね。
 ここで事前に用意した雛形(既に行間、文字サイズを設定したExcelFile)にクエリ
の内容を書き込みます。
 これは現実的な考えでしょうか?

【6622】Re:レコード数を制御して、Excelへ吐き出し
回答  小僧  - 05/10/27(木) 9:57 -

引用なし
パスワード
   ▼Saiyama さん:
おはようございます。

>ここで事前に用意した雛形(既に行間、文字サイズを設定したExcelFile)にクエリ
>の内容を書き込みます。 これは現実的な考えでしょうか?

可能ですよ。

雛形.xls を開いてクエリのデータを流し込んだ後に別名で保存する事も、
雛形を置かずに新規 Excel ブックを開いてフォントや罫線の設定をするのも可能です。


雛形を使うヒント
Dim HinaName As String               '追加

  HinaName = "C:\Hina.xls"            '追加

  'Set xlsWkb = xlsApp.Workbooks.Add       '削除
  Set xlsWkb = xlsApp.Workbooks.Open(HinaName)  '追加


オートメーションで Excel 操作のヒント
  With xlsWkb.Sheets("Sheet1")
    .Columns("A:A").Font.Size = 9
    .Columns("A:A").ColumnWidth = 9.5
  End With

オートメーションで操作をされたい場合には
メソッドは Excel のものを使う事になります。
Excel の「マクロの記録」機能や Excel のヘルプを使うと
コードを組むヒントになると思われます。

【6669】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/29(土) 22:05 -

引用なし
パスワード
   小僧さん
回答をいただき、ありがとうございます。
以下のヒントで修正をしました。
>雛形を使うヒント
>Dim HinaName As String               '追加
>
>  HinaName = "C:\Hina.xls"            '追加
>
>  'Set xlsWkb = xlsApp.Workbooks.Add       '削除
>  Set xlsWkb = xlsApp.Workbooks.Open(HinaName)  '追加
事前にHina.xlsを作って、
そこにNo.1、22、43の行間を設定し、そのまま保存しました。
modulを実行して、更新されたHina.xlsの行間
No.1→設定した行間はそのまま
No.22、43→設定した行間は元の状態に戻ってしまいました。
Hinaの設定情報はなくさない方法はあるのでしょうか?

【6671】Re:レコード数を制御して、Excelへ吐き出し
発言  小僧  - 05/10/29(土) 23:04 -

引用なし
パスワード
   ▼Saiyama さん:
こんばんは。

>No.1→設定した行間はそのまま
>No.22、43→設定した行間は元の状態に戻ってしまいました。

この事象が再現できません。

関係ないかもしれませんが、雛形を使う時には

>  On Error Resume Next
>    Kill xName
>  On Error GoTo 0

この 3 行も要りませんでしたね。

当方の環境(Ac2002、WinXP)ですと、雛形の書式設定のままデータのみ出力されました。

【6680】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/30(日) 19:41 -

引用なし
パスワード
   小僧さん
 こんばんわ、何度も質問しまいまして、すみませんでした。
 以下のコードを使って、走らせて見ました。思った通りの結果になりましたので、
本当にありがとうございます。
 最後の質問になりますが、よろしくお願いします。
質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
日時を入れてほしいです。
イメージ
元kw.xlsの登録日時→20051030 19:33の場合は、
Kw200510301933となってほしい。

Function ExcelExport20Recort()
'要参照 Microsoft DAO x.x Object Library
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim xName As String
Dim RS As DAO.Recordset
Dim QName As String
Dim i As Long
Dim j As Long
Dim LastRow As Long
Dim HinaName As String
HinaName = "C:\KW_Hina.xls"
Const lngMaxRow As Long = 20
  xName = "C:\KW.xls"    ====>ここです
  QName = "クエリ名"
  LastRow = DCount("*", QName)
 
  Set RS = CurrentDb.OpenRecordset(QName, dbOpenSnapshot)

  Set xlsApp = CreateObject("Excel.Application")
  
   Set xlsWkb = xlsApp.Workbooks.Open(HinaName)
    With xlsWkb.Sheets("Sheet1")
      Do Until RS.EOF
        For i = 0 To RS.Fields.Count - 1
          .Cells(j * (lngMaxRow + 1) + 1, i + 1).Value = RS(i).Name
        Next
        .Cells(j * (lngMaxRow + 1) + 2, 1).CopyFromRecordset RS, lngMaxRow
        j = j + 1
        Loop
        End With
  RS.Close: Set RS = Nothing
  xlsWkb.SaveAs xName
  xlsWkb.Close True: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  MsgBox "エクスポート終了"
End Function

【6681】Re:レコード数を制御して、Excelへ吐き出し
回答  まさ7251  - 05/10/30(日) 20:32 -

引用なし
パスワード
   >質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>日時を入れてほしいです。
>イメージ
>元kw.xlsの登録日時→20051030 19:33の場合は、
>Kw200510301933となってほしい。

>HinaName = "C:\KW_Hina.xls"

>  xName = "C:\KW.xls"    ====>ここです

FileDateTime関数で、ファイルの更新日を求めることが出来ます。
Format関数で、変換が出来ます。
この2つの関数でご希望の処理は出来るかと思います。

【6701】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/10/31(月) 21:36 -

引用なし
パスワード
   ▼まさ7251 さん:
 ヒントをいただき、誠にありがとうございます。
 見本として、作成していただけませんか?
よろしくお願いします。

【6702】Re:レコード数を制御して、Excelへ吐き出し
発言  まさ7251  - 05/10/31(月) 22:23 -

引用なし
パスワード
   ▼Saiyama さん:
>▼まさ7251 さん:
> ヒントをいただき、誠にありがとうございます。

と言いつつ、

> 見本として、作成していただけませんか?

ご自分では調べてみたり、試してみたりはしなかったのですか?

試してみてうまく行かないようでしたら、
”どのように試してみて、どううまく行かなかったのか”を
書き込んでみてください。

【6768】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/11/8(火) 18:17 -

引用なし
パスワード
   まさ7251さん
 こんばんわ、ヒントをいただいて、やってみましたが、うまくいかないです。
よろしくお願いします。
>>質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>>日時を入れてほしいです。
>>イメージ
>>元kw.xlsの登録日時→20051030 19:33の場合は、
>>Kw200510301933となってほしい。
>
>>HinaName = "C:\KW_Hina.xls"
>
>>  xName = "C:\KW.xls"    ====>ここです
>
>FileDateTime関数で、ファイルの更新日を求めることが出来ます。
>Format関数で、変換が出来ます。
>この2つの関数でご希望の処理は出来るかと思います。

書いたコード:
Sub TEXT()
Dim QPath As String  
Dim EName As String  
Dim QName As String
Dim SDateTime As String
Dim Fdt As Atring
  QPath = "C:\"
  EName = "KW.XLS"
  QName = "クエリ"
  Fdt =FileDateTime(QPath & EName)

  SDateTime = Format(Fdt, "yyyymmdd","hhmm")

  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName & "_" & SDateTime
End Sub

【6769】Re:レコード数を制御して、Excelへ吐き出し
回答  小僧  - 05/11/8(火) 18:51 -

引用なし
パスワード
   ▼Saiyama さん:
こんにちは。

>>>質問とは、出力したファイルのFilenameはKwの後ろに「元kw.xls」の登録
>>>日時を入れてほしいです。

出力するファイルに「yymmmdd」のような名前を付けてしまうと、
そのフォルダ内の最新のファイルを探し…という余計な作業が加わってしまいます。

出力するファイルは「KW.xls」のままで
元ファイルの名前を FileDateTime 付きの名前に変える、
という動作にしてみてはいかがでしょうか。

Sub Excel出力()
Dim QPath As String
Dim EName As String
Dim QName As String
Dim SDateTime As String
Dim Fdt As String
  QPath = "C:\"
  EName = "KW.XLS"
  QName = "クエリ"
  Fdt = FileDateTime(QPath & EName)

  'SDateTime = Format(Fdt, "yyyymmdd","hhmm")
  SDateTime = Format(Fdt, "yyyymmddhhmm")      '変更

  Name QPath & EName As QPath & SDateTime & ".xls" '追加

  'DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName & "_" & SDateTime
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
            QName, QPath & EName     '変更
End Sub

【6791】Re:レコード数を制御して、Excelへ吐き出し
質問  Saiyama  - 05/11/10(木) 22:26 -

引用なし
パスワード
   小僧さん
 今晩は、いただいたコードを使って、あるExcelの登録「日時」情報を取得し、
KWの後ろにつけることが成功しました。
 もし以下のコードに「Adsl.xls」の登録日時を取得して、その情報をKWの後ろに
つける場合は、どのように修正すればいいでしょうか?
 
Function ExcelExport20Recort()
'要参照 Microsoft DAO x.x Object Library
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim xName As String
Dim RS As DAO.Recordset
Dim QName As String
Dim i As Long
Dim j As Long
Dim LastRow As Long
Dim HinaName As String
HinaName = "C:\KW_Hina.xls"
Const lngMaxRow As Long = 20
  xName = "C:\KW.xls"
  QName = "クエリ名"
  LastRow = DCount("*", QName)
  Set RS = CurrentDb.OpenRecordset(QName, dbOpenSnapshot)
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Open(HinaName)
   With xlsWkb.Sheets("Sheet1")
   Do Until RS.EOF
   For i = 0 To RS.Fields.Count - 1
   .Cells(j * (lngMaxRow + 1) + 1, i + 1).Value = RS(i).Name
   Next
   .Cells(j * (lngMaxRow + 1) + 2, 1).CopyFromRecordset RS, lngMaxRow
    j = j + 1
   Loop
   End With
RS.Close: Set RS = Nothing
xlsWkb.SaveAs xName
xlsWkb.Close True: Set xlsWkb = Nothing
xlsApp.Quit: Set xlsApp = Nothing
MsgBox "エクスポート終了"
End Function

【6794】Re:横から失礼
発言  たん  - 05/11/11(金) 10:30 -

引用なし
パスワード
   > もし以下のコードに「Adsl.xls」の登録日時を取得して、その情報をKWの後ろに
>つける場合は、どのように修正すればいいでしょうか?

キツイ事を書くけど、このプログラムを作っているのは、Saiyamaさんなのでしょうか?
それとも、ロジックを提供した小僧さんなのでしょうか?

「どのように修正」とありますが、これでは、Saiyamaさんが作るプログラムではなく、
小僧さんが考えたロジックを、小僧さんがSaiyamaさんのやりたい事を含めたロジックに
修正し、この掲示板にアップしたものを、Saiyamaさんがコピーして、自分の
プログラムに埋め込むという事になります。

うがった見方をすれば、「小僧さんが作ったロジックを、自分のプログラムとして運用
する」事に変わりがありません。

まずは、小僧さん提供のロジックがどういう動きをするから、望みの結果が出ているの
かを、自身が把握すべきでしょう。

その上で、この要望を実現する為に「ここの部分をこう直したが、こういう結果になり、
欲しい結果と違う」という事を提示すれば、回答は得られると思います。

Saiyamaさんが今のプログラムを作る為にどのぐらいの努力をしてるのかは不明ですが、
今のままでは、私から見れば、「自分の案件を他人に考えてもらい、ロジックを作って
もらい、そのロジックをコピーしてるだけ」で、質問者自身が、このプログラムを
完成させる為に努力をしているとは、どうしても見えません。
(少なくとも、この掲示板のやり取り上では)

キツイ事を書いたけど、自分でも頑張ってみて下さい。

【6795】Re:横から失礼
発言  たん  - 05/11/11(金) 10:36 -

引用なし
パスワード
   掲示板では、協力すべきとは思います。

ただ、協力の為に、相手に「意見や回答(ヒント)を求める」事と、
相手に「1から作ってもらう」のは別だと思うのです。

# 後者は「協力」ではなく「一方的なねだり」です。

【6810】Re:横から失礼
質問  Saiyama  - 05/11/12(土) 0:49 -

引用なし
パスワード
   たんさん
 こんばんは、言われたことは正論です。申し訳ありませんでした。

【6813】Re:横から失礼
発言  たん  - 05/11/15(火) 9:03 -

引用なし
パスワード
   ▼たん さん:
>掲示板では、協力すべきとは思います。
>
>ただ、協力の為に、相手に「意見や回答(ヒント)を求める」事と、
>相手に「1から作ってもらう」のは別だと思うのです。
>
># 後者は「協力」ではなく「一方的なねだり」です。

1511 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free