Access VBA質問箱 IV

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

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


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

【8660】Access2003からExcelへの仕分け? hm_Yh 06/10/8(日) 14:47 質問[未読]
【8662】Re:Access2003からExcelへの仕分け? 小僧 06/10/10(火) 9:57 回答[未読]
【8667】Re:Access2003からExcelへの仕分け? hm_Yh 06/10/12(木) 12:15 お礼[未読]
【8669】Re:Access2003からExcelへの仕分け? 小僧 06/10/12(木) 17:42 回答[未読]
【8728】Re:Access2003からExcelへの仕分け? hm_Yh 06/10/24(火) 15:57 質問[未読]
【8735】Re:Access2003からExcelへの仕分け? まさ7251 06/10/25(水) 12:00 発言[未読]
【8804】Re:Access2003からExcelへの仕分け? hm_Yh 06/11/19(日) 16:47 お礼[未読]
【8831】Re:Access2003からExcelへの仕分け? hm_Yh 06/11/26(日) 11:20 質問[未読]
【8836】Re:Access2003からExcelへの仕分け? 小僧 06/11/27(月) 9:35 発言[未読]

【8660】Access2003からExcelへの仕分け?
質問  hm_Yh  - 06/10/8(日) 14:47 -

引用なし
パスワード
   こんにちは、
Access2003を始めて使って、データの仕分け業務をやっていますが、
もっといい方法があれば、ぜひ教えていただきたいです。

今のやり方はまずクエリAを作って、
抽出条件のところに「001」を入力して、保存する。
OfficeLinksのExcelを選択して、001.xls名前で保存する。
今の手順で、Noに格納されているコードを一つ一つやって、
すべて終わったら、
作成した複数の***.xlsをシート単位毎にコピーして、
一つのExcelファイルに格納する。

テーブルA
No   名前  ・・・
001  山田
002  鈴木
009  佐藤
001  山田




【8662】Re:Access2003からExcelへの仕分け?
回答  小僧  - 06/10/10(火) 9:57 -

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


>もっといい方法があれば、ぜひ教えていただきたいです。

VBA を使えば自動化も可能ですが、
ある程度のスキルが必要となりそうですね。

方法A)
No を 抽出条件にしたクエリを作成し
TransferSpreadsheet メソッドを使ってExcelにエクスポートする。

方法B)
No を抽出条件とするパラメータクエリを作り、
QueryDefオブジェクト経由で CopyFromRecordset メソッドを使って
Excel へとデータを書き込む。


どちらにしても VBA で完全に自動化は可能ですが
上記説明が全く解らない、という事でしたらちょっと難易度は高いかもしれません。

※ No というフィールド名は Accessに「Yes/No」の「No」と勘違いされ
  誤作動を起こすもととなります。フィールド名の変更をお勧めします。

【8667】Re:Access2003からExcelへの仕分け?
お礼  hm_Yh  - 06/10/12(木) 12:15 -

引用なし
パスワード
   小僧さん

おはようございます。

アドバイスをいただき、ありがとうございます。

 VBAで全自動化を図りたいと思っていますが、やはり「スキル」がないと、
こんな難題を解けるって、難しいです。
同僚たちに小僧さんからいただいたヒントをみてもらいましたが、理解できる人が
ひとりも居なかったです。

※ No というフィールド名は Accessに「Yes/No」の「No」と勘違いされ
>  誤作動を起こすもととなります。フィールド名の変更をお勧めします。
早速、変更しました。

【8669】Re:Access2003からExcelへの仕分け?
回答  小僧  - 06/10/12(木) 17:42 -

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

>こんな難題を解けるって、難しいです。

まずはテーブル全部を Excelファイル にエクスポート、
それができたら No 毎に それぞれ Excelファイル へエクスポート、
それができたら No 毎に 同じExcelファイル へエクスポート、


の様に少しずつスキルアップしていく事が
御自身でコードを組めるようになる近道かと思われます。


>早速、変更しました。

今回は SEQ というフィールド名としてコードを組んでみました。

Sub Excelへエクスポート()
'※要参照 Microsoft DAO x.x Object Library
Const TName = "テーブルA"      'データの入っているテーブル名
Const OutFile = "C:\Export.xls"   'エクスポート先 Excelファイル名
Dim RS1 As DAO.Recordset
Dim RS2 As DAO.Recordset
Dim strSQL1 As String
Dim strSQL2 As String
Dim xlsApp As Object
Dim xlsWkb As Object
Dim xlsSht As Object
Dim i As Long

  On Error Resume Next
    Kill OutFile
  On Error GoTo 0
  
  Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Add
  
  strSQL2 = "SELECT DISTINCT SEQ FROM " & TName
  
  Set RS2 = CurrentDb.OpenRecordset(strSQL2, dbOpenSnapshot)
  Do Until RS2.EOF
    Set xlsSht = xlsWkb.Worksheets.Add
      xlsSht.Name = RS2![SEQ]
      
    strSQL1 = "SELECT * FROM " & TName _
        & " WHERE SEQ = '" & RS2![SEQ] & "';"
    
    Set RS1 = CurrentDb.OpenRecordset(strSQL1, dbOpenSnapshot)
      For i = 1 To RS1.Fields.Count
        xlsSht.Cells(1, i).Value = RS1(i - 1).Name
      Next
      xlsSht.Range("A2").CopyFromRecordset RS1
      xlsSht.Range("A1").CurrentRegion.Columns.AutoFit
      xlsSht.Range("A1").CurrentRegion.Rows.AutoFit
      RS1.Close
    Set RS1 = Nothing
    RS2.MoveNext
  Loop
    
  Set RS1 = Nothing
  RS2.Close: Set RS2 = Nothing
    
  On Error Resume Next
    For i = 1 To 3
      xlsWkb.Sheets("Sheet" & i).Delete
    Next
  On Error GoTo 0
  Set xlsSht = Nothing
  xlsWkb.SaveAs OutFile
  xlsWkb.Close: Set xlsWkb = Nothing
  xlsApp.Quit: Set xlsApp = Nothing
  
  MsgBox "出力が終了しました。"
End Sub


コードで解らない箇所がありましたら
再度質問して頂ければ当方の解る範囲でしたらお答えできるかと思われます。

【8728】Re:Access2003からExcelへの仕分け?
質問  hm_Yh  - 06/10/24(火) 15:57 -

引用なし
パスワード
   小僧さん

こんにちは。
以下のテーブルAを使って、実行しましたら、
実行時エラー’3061’:パラメータが少なすぎます。1を指定してください。
ご伝授ください。
環境:WinXP、Office2003

Set xlsApp = CreateObject("Excel.Application")
  Set xlsWkb = xlsApp.Workbooks.Add
 
  strSQL2 = "SELECT DISTINCT SEQ FROM " & TName
 
  Set RS2 = CurrentDb.OpenRecordset(strSQL2, dbOpenSnapshot)  エラーで反転


テーブルA
製造番号    Name01    Name02    Name03
01        001    001    001
02        002    002    002
01        001    001    001

仕分けして、以下の結果を求めたいです。
シート名:01
製造番号    Name01    Name02    Name03
01        001    001    001
01        001    001    001

シート名:02
製造番号    Name01    Name02    Name03
02        002    002    002

【8735】Re:Access2003からExcelへの仕分け?
発言  まさ7251  - 06/10/25(水) 12:00 -

引用なし
パスワード
   小僧さんは、
> 今回は SEQ というフィールド名としてコードを組んでみました。
といっている通り、
No を SEQ に変更したという前提でコードを書き込んでくれています。

それが違うのでしたら、hm_Yhさんの状況にあわせて修正してから
実行してみて下さい。

【8804】Re:Access2003からExcelへの仕分け?
お礼  hm_Yh  - 06/11/19(日) 16:47 -

引用なし
パスワード
   まさ7251さん
小僧さん
 「SEQ」を修正しましたら、動きました。
ありがとうございました。
 

【8831】Re:Access2003からExcelへの仕分け?
質問  hm_Yh  - 06/11/26(日) 11:20 -

引用なし
パスワード
   小僧さん

 お世話になっています。先日のレッスンでありがとうございました。
前回レッスンの続きで、質問させていただきますので、よろしくおねがいします。
仕分けの元ファイルも同じブックへエクスポートしようと考えていますが、
可能でしょうか?

【8836】Re:Access2003からExcelへの仕分け?
発言  小僧  - 06/11/27(月) 9:35 -

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


ページ上部に

「本サイトの基本方針をまとめました。こちら をご一読ください。」

とありますが、その中の

・してはいけない質問について

という項目の丸投げに該当していませんか?

現実には hm_Yh さんが色々苦労されているのかもしれませんが、
掲示板上では伝わりませんよね。

可能か不可能かから言えば恐らく可能だと思われます。

まずはご自分でどこまでやって何がうまくいかないのか
ご提示して頂くと回答がつきやすくなるかもしれません。


>小僧さん

の様に、回答者を指定してしまうと他の方から
回答がつかなくなってしまいますよ^^

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