Access VBA質問箱 IV

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

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


366 / 500 ページ ←次へ | 前へ→

【5888】Re:エクセルへの自動出力
回答  クロ  - 05/8/17(水) 17:41 -

引用なし
パスワード
   >はい、直下です。今はマイドキュメントの下に「テスト.xls」を作っています。
マイドキの直下はクセがありますよ。パスにスペースがあるから…
スタートメニューの「ファイル名を指定して実行」にマイドキュメントの下の「テスト.xls」ドラッグアンドドロップしてパスを確認してください。
※コピペしても可
・ツリー全体表示

【5887】Re:エクセルへの自動出力
質問  aki  - 05/8/17(水) 17:30 -

引用なし
パスワード
   ▼クロ さん:
>適当なコマンドボタンにでも
>DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "テストテーブル", "C:\テスト.xls"
>と書いても「テスト.xls」の「テストテーブル」シートに書き出されませんか?

はい、駄目でした。

>
>それと何かエラーは出るのでしょうか?

エラーはなにもでません。
>また、「テスト.xls」の「テストテーブル」シートには何も書かれていない状態ですか?
>
今シートを新規で作り(同じ名前で)直しました。
そしたら、「テスト.xls」の「テストテーブル」シート名もなんにも出力されなくなってしまいました。

>ちなみにCドライブ直下にある「テスト.xls」を開いて確認しているんですよね?
はい、直下です。今はマイドキュメントの下に「テスト.xls」を作っています。
・ツリー全体表示

【5886】Re:時間の計算について
お礼  わん  - 05/8/17(水) 17:16 -

引用なし
パスワード
   小僧さん:
いつもありがとうございます。

なるほど、ここでLeft関数、Right関数を利用するのですね。

>[#5863]の例ですと、「ポジション」と「年齢」で抽出していましたが、このへんを
>「打刻日付の左4文字」  と 「年コンボ」
>「打刻日付の6、7文字目」 と 「月コンボ」
>を比較すれば可能ですね。この場合は文字列での比較になります。
↑は何とかできそうです。

>テキストボックスでもリストボックスでもコンボボックスでも記述は同じだったりします。
若干、xls.VBAとは異なるのですね。

>レコード数が増えると、使用されている環境によりますがAccessの動作が遅くなります。
>5万件位のレコードで速度に問題があるようでしたら(クエリの表示、抽出など)
>テーブルの設計等を少し考え直す必要があるかもしれません。

過去ログを読むとかなりのデータ量でも耐えられるような気がしますが。
私としては、データを年度末若しくは月末に清算できるような
マクロ記述により別テーブルを作成するようなことができればいいと
考えているのですが難しいのでしょうか?
それとも、基本のテーブル設計をより良いものに考え直す方がいいのでしょうか?

今回の場合は、仮にテーブル設計を考え直すとするとどうすればいいのでしょうか?
抽象的な質問になってしまい申し訳ありません。
・ツリー全体表示

【5884】Re:エクセルへの自動出力
回答  クロ  - 05/8/17(水) 17:12 -

引用なし
パスワード
   適当なコマンドボタンにでも
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "テストテーブル", "C:\テスト.xls"
と書いても「テスト.xls」の「テストテーブル」シートに書き出されませんか?

それと何かエラーは出るのでしょうか?
また、「テスト.xls」の「テストテーブル」シートには何も書かれていない状態ですか?

ちなみにCドライブ直下にある「テスト.xls」を開いて確認しているんですよね?
・ツリー全体表示

【5883】Re:エクセルへの自動出力
発言  aki  - 05/8/17(水) 16:57 -

引用なし
パスワード
   ▼クロ さん:
>テストテーブルにはフォームで入力したIDが書き込まれていますか?

はい、それはきちんと書き込まれています。
・ツリー全体表示

【5882】Re:最終項目の最後の移動
発言  小僧  - 05/8/17(水) 16:47 -

引用なし
パスワード
   ▼hikaru さん:
>質問者の方がSQL さえ提示すれば回答者は全てが解る訳もなく、
>回答者(少なくとも自分)は SQL の内容からテーブル構成を
>想像しながら作っていかなければいけません。
>
>少なくともテーブル構成とフィールドのデータ型は情報としてご提示して頂きたいです。
>
>
>まだクエリ1しかみておりませんが、現在のところ解っているのは
>
>>WHERE AND ((ki.ukeno)=・・・
>
>WHERE 句の後にいきなり「AND」 はありえません。
>
>>(ki.ukeymd)<`90000000`)
>
>「ki.ukeymd」は dbo_kenirahd テーブルと dbo_kenkekdt テーブルで持っている
>「受付日」にあたる項目ではないのでしょうか?
>それが「90000000」という文字列と比較している…「kancd」の間違いでは?
>
>フィールドの名前からある程度判断はできるのですが回答者の想像に委ねることなく、
>安久 さんが伝えたい情報をできるだけ正確に回答者(当方だけにでなく)に伝えられる様に
>ご提示する内容を検討されてみて下さい。

は無視ですか。

>というふうに検査名の最後に検査した日だけの結果を抽出したいわけです。

[#5847]で提示したSQLがそのようになっています。後はご自分で頑張ってください。
・ツリー全体表示

【5881】Re:エクセルへの自動出力
回答  クロ  - 05/8/17(水) 16:47 -

引用なし
パスワード
   ▼aki さん:
>テストテーブルという名前のシートはありましたが、中身が出力されていません。
>なにがどうなったのでしょうか?

う〜ん。私はakiさんの隣いるわけではないので…
テストテーブルにはフォームで入力したIDが書き込まれていますか?
・ツリー全体表示

【5880】Re:エクセルへの自動出力
質問  aki  - 05/8/17(水) 16:24 -

引用なし
パスワード
   テスト.xls内に「テストテーブル」という名前のsheetに書かれていませんか?

テストテーブルという名前のシートはありましたが、中身が出力されていません。なにがどうなったのでしょうか?
・ツリー全体表示

【5879】Re:時間の計算について
発言  小僧  - 05/8/17(水) 15:39 -

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


>****年**月と1つになっているものを「年」「月」とわけて
>コンボ検索することは可能なのでしょうか?

[#5863]の例ですと、「ポジション」と「年齢」で抽出していましたが、このへんを
「打刻日付の左4文字」  と 「年コンボ」
「打刻日付の6、7文字目」 と 「月コンボ」

を比較すれば可能ですね。この場合は文字列での比較になります。


>また、コンボ検索とテキストボックスでの「名前」検索の組合せは、
>どのようにコードを書けば良いのでしょうか?
>先程の【#5863】を例にして、
>仮に、ポジションをテキストボックスに変更すると、
>何を変更するのかを教えて頂けると助かります。

実は…何も変更無しです(笑)
テキストボックスでもリストボックスでもコンボボックスでも記述は同じだったりします。

>そのまま利用できないかと考えました。
100人の社員が月22日出勤で12ヶ月 → 26400レコード

レコード数が増えると、使用されている環境によりますがAccessの動作が遅くなります。
当方の環境で12万件のレコードから Dcount関数を使って抽出するテストを
行ってみたのですが、体感で1.5秒位です。(遅いのか早いのか微妙ですね^^;)

わん さんの環境でも、同じレコードを コピー&ペースト でがんがん増やして
5万件位のレコードで速度に問題があるようでしたら(クエリの表示、抽出など)
テーブルの設計等を少し考え直す必要があるかもしれません。
・ツリー全体表示

【5878】Re:≠回答
発言  たん  - 05/8/17(水) 15:35 -

引用なし
パスワード
   ▼hikaru さん:

質問毎に名前を変えるのは、そちらの自由かもしれませんが、
複数の質問があるのなら、名前統一して、きちんと自己を示した
上で質問すべきでは?

5707のスレッドについても、質問者と5876は別の投稿者なのに、
文面を読む限りは同一人物のように見えます。

投稿者名が違えば、個々の質問は独立したものとして考え、回答が
発生します。
その為、貴方が同一人物であれば、まったく違う答えを貴方自身が
自分の力でまとめねばなりません。その整合を取れますか?
取れなくて、別名でまた質問を上げますか?

また、別名で複数上げて、個々の部分をそれぞれ作ってもらおうとか
甘い事を考えていませんか?

ネットでは匿名で発言できるので、同一人物かどうか判断出来るのは
投稿者本人のみですが、あえてそうであると思い、発言しました。

分からないのを聞くのは恥ずかしい事ではありません。
ただ、「分からない」事を隠す為に、複数の匿名を使ったり、
「何も分からない」と開き直るのは、恥ずかしい事です。
・ツリー全体表示

【5877】Re:複雑なクエリ処理方法について
回答  小僧  - 05/8/17(水) 15:08 -

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

>この現象を回避するため、クエリ削除

まずはクエリの存在を確認する方法
If DCount("*", "MSysObjects", "Name = 'クエリ名'") > 0

クエリ削除は
DoCmd.DeleteObject acQuery, "クエリ名"

で行う事ができます。

>→クエリADNewの結果をExcelへ吐き出すにはどのように書けばいいでしょうか?

こちらは「TransferSpreadsheet」メソッドが使えます。


…クエリを作成する目的が「Excel へn出力」の為だけでしたら、
わざわざ作らなくても行うことが可能です。
こちらは ExcelVBA の操作も必要でコードの記述も長くなりますが、
「TransferSpreadsheet」メソッドではできない細かい指定(セル位置やシート名等)
が可能です。 気になるようでしたら「オートメーション」「CopyFromRecordset」
あたりで過去ログを検索してみて下さい。
・ツリー全体表示

【5876】Re:最終項目の最後の移動
質問  hikaru  - 05/8/17(水) 14:58 -

引用なし
パスワード
   いつもお返事ありがとうございます。

 患者氏名ごとに抽出するのではなく

 検査日 検査名 検査結果  単位
 10/30  TG   10     mg
 10/30  WBC   20     
 10/30  Na   40     
 10/26  TG   60    
 10/22  WBC   5   
 09/25  K    78   
 09/01  TG    20  

というふうに抽出しているのですが
  これを

 検査日 検査名 検査結果  単位
 10/30  TG    10     mg
 10/30  WBC   20  
 10/30  Na    40
 09/25   K    78

というふうに検査名の最後に検査した日だけの結果を抽出したいわけです。

お願いします。
・ツリー全体表示

【5875】移動
質問  hikaru  - 05/8/17(水) 14:48 -

引用なし
パスワード
   Form1とForm2があります。
Form1にForm2のリストボックスからForm1の各対応しているテキストボックスに移動できるようにしているのですが、Form2のコマンドボタンを押すとそのリストボックスのデータが移動できます。
例えば、11/08の日の結果をいどうさしたらそのデータは移動するのですが、移動した後日にちを変えて違うひのデータを移動さいたら前のデータが消えて新しくデータが入ります。
 前のデータが消えないようにそのままForm1に移動することはありますか
・ツリー全体表示

【5874】Re:エクセルへの自動出力
回答  クロ  - 05/8/17(水) 14:45 -

引用なし
パスワード
   <省略>
>
>  DoCmd.RunSQL SQLCODE
 ↑は余計です。↓ここに書いてあるので
>  DoCmd.RunSQL SQLCODE
>  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,"テス
>トテーブル",XName
テスト.xls内に「テストテーブル」という名前のsheetに書かれていませんか?
・ツリー全体表示

【5873】Re:時間の計算について
発言  わん  - 05/8/17(水) 14:16 -

引用なし
パスワード
   小僧さん:
早速ありがとうございます。

「月度」をコンボボックスにするのは最もだと思います。

ただ、今回は前回の打刻日付をもとに1つのクエリで集計しており、
年度別にわけることなく、そのまま利用できないかと考えました。

あるのでしたら「年」「月」の2つのコンボボックスで、
↑おっしゃる通りこれができれば一番良いと思います。
****年**月と1つになっているものを「年」「月」とわけて
コンボ検索することは可能なのでしょうか?

また、コンボ検索とテキストボックスでの「名前」検索の組合せは、
どのようにコードを書けば良いのでしょうか?

先程の【#5863】を例にして、
仮に、ポジションをテキストボックスに変更すると、
何を変更するのかを教えて頂けると助かります。

Private Sub 検索ボタン_Click()
  Me.Filter = "ポジション = '" & Me.cmbポジション & "' AND 年齢 = " & Me.cmb年齢
  Me.FilterOn = True
  Me.txt人数 = Me.Recordset.RecordCount
End Sub

宜しくお願いします。
・ツリー全体表示

【5872】Re:時間の計算について
発言  小僧  - 05/8/17(水) 13:45 -

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

>コンボボックスの利用というのはどの位の件数までが妥当なのでしょうか?

これは使う人によるので何とも言えないのですが…。

コンボボックスによる利点として、もちろんユーザの手間を省けるという点がありますが、
作り手にとっても大きなポイントがあります。ユーザに自分勝手な入力をさせない点(笑)です。

こちらとしては「2005/08」と入れて欲しいのに「2005.08」「2005/8」の様に
入力して結果が返ってこない等という事が多々ありますが、そうなると作り手は

・こちらの意図としないものは全部エラーで返す
・「.」は「/」に自動変換、桁数は補正

余計な手間が増えることになります。年と月を選ぶだけなのに…。

という事で「月度」はコンボボックスがお勧めです。

>名前に関しては100人以上います。

こちらはテキストボックスが良さそうですね…。
以前「あ」「か」「さ」「た」「な」…ボタンを配置して、コンボボックスの表示を
絞ったものを作った事があるのですが、ユーザから「直接入力の方が早い」と
ボツになった事もありました…。

>月度は1年に12個ずつ増えて

このへんは運用面の問題だと思います。
例えば去年のタイムカードを今年になってから見る事があるのでしょうか?

あるのでしたら「年」「月」の2つのコンボボックスで、
ないのでしたら「2005年度給与.mdb」「2006年度給与.mdb」のように
別mdb での運用もありだと思います。
・ツリー全体表示

【5871】エクセルへの自動出力
質問  aki  - 05/8/17(水) 13:37 -

引用なし
パスワード
   テーブル"テストテーブル"  フィールド"ID"
フォームAにあるテキストボックス"テスト"をコマンドボタン"実行"をクリッ
クすることにより、テーブル"テスト"の"ID"に自動入力(追加)され、かつ、
エクセル"テスト.xls"に自動に出力されるようにするにはVBAをどのように入
力すればいいのでしょうか?
テーブルに出力までできています。しかし、エクセルに自動出力がされません
。なにか悪い点があったら教えて下さい。

Private Sub 実行_Click()
Dim SQLCODE As String
Dim XName As String
  
  XName = "C:\テスト.xls"

  SQLCODE = "INSERT INTO テストテーブル(ID)VALUES('" & Me.テスト.val
ue & "')"

  DoCmd.RunSQL SQLCODE

  DoCmd.RunSQL SQLCODE
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9,"テス
トテーブル",XName

End Sub
・ツリー全体表示

【5870】Re:複雑なクエリ処理方法について
質問  MK&db  - 05/8/17(水) 13:08 -

引用なし
パスワード
   ▼小僧 さん:
>▼MK&db さん、Gin_II さん:

ありがとうございます。期待している結果がでました。

→実行するとき、クエリADNewが存在すると、エラーになります。
この現象を回避するため、下記の動的SQL文には、クエリ削除(objectcatalog.procedures.delete)の書き方を教えていただけないでしょうか?

→クエリADNewの結果をExcelへ吐き出すにはどのように書けばいいでしょうか?

>Sub 動的SQLを作成()
・ツリー全体表示

【5869】Re:時間の計算について
質問  わん  - 05/8/17(水) 12:37 -

引用なし
パスワード
   小僧さん
早速のご返信ありがとうございます。

私も[#5863]検索用フォームの作成を試してみました。
これで問題なくできると思います。

1つ疑問なのですが、
コンボボックスの利用というのはどの位の件数までが妥当なのでしょうか?

仮に、ポジションに相当するものを月度とし、年齢に相当するものを名前とすると
月度は1年に12個ずつ増えて、名前に関しては100人以上います。
それでも、コンボボックスの方が良いのでしょうか。
・ツリー全体表示

【5868】Re:リセットボタン
お礼  謙虚人  - 05/8/17(水) 11:33 -

引用なし
パスワード
   もう一度コマンドボタンから作り直しましたらできました!
ありがとうございます。
・ツリー全体表示

366 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084732
(SS)C-BOARD v3.8 is Free