Access VBA質問箱 IV

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

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


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

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

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

>複数検索

[#5570]で質問をされた方の場合、

>一つのテキストボックスに、検索wordをカンマで区切って
>入力していくようなことってできますか?

という事でしたので、「鈴木,佐藤」と入力すると
鈴木さんと佐藤さんのデータの抽出ができるような方法でしたので、

>[月度] And [氏名]

という場合とちょっと違いますよね。

月度、氏名と別々のテキスト(コンボ)ボックスから抽出で宜しければ、
先ほど他の方へ回答させて頂いた

[#5863]検索用フォームの作成

あたりが参考になるかと思われます。

同じテキストボックスにカンマ区切りで抽出したいのであれば
結構面倒な処理になりそうです…。(月が数字で名前が文字列になるので…)
・ツリー全体表示

【5866】Re:リセットボタン
発言  小僧  - 05/8/17(水) 11:08 -

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

当方、Ac2002 と Ac97 の環境で行ったのですが特にエラーが発生しませんでした。

Private Sub クリア_Click()
On Error GoTo ErrExe
Dim Ctrl As Control
  For Each Ctrl In Me.Controls
    If Ctrl.ControlType = acTextBox Then
      Ctrl.Value = ""
    End If
  Next
  Exit Sub
ErrExe:
  MsgBox Ctrl.Name
End Sub

として、どのコントロールが問題になっているのかを確認して頂けないでしょうか?
(それともコンパイル自体ができていないのでしょうか…)
・ツリー全体表示

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

引用なし
パスワード
   >小僧さん
>こんにちわ。
その後、全て時間計算についてのデータベースが出来上がりました。

お礼を兼ねてご報告申し上げます。
本当にありがとうございました。

ところで、過去ログ【5570】について教えて頂きたいのですが、
私も、同じように今回の時間計算結果の確認用として
フォームを使って複数検索をやって見たのですが上手くいきません。

フォームの元になるデータはクエリです。

↓のようにしてみたのですがMe.Filter = Kensakuで引っかかってしまいます。
何がいけないのでしょうか?
テキスト検索:テキストボックス
検索:コマンドボタン

Private Sub 検索_Click()
 Dim Kensaku As String
Dim S As Variant
Dim I As Long
  If InStr(1, Me.テキスト検索.Value, ",") > 0 Then
    S = Split(Me.テキスト検索.Value, ",")
      For I = 0 To UBound(S, 1)
        Kensaku = Kensaku & "([月度] And [氏名] LIKE '*" & S(I) & "*') And "
      Next
    Kensaku = Left(Kensaku, Len(Kensaku) - 4)
  Else
    Kensaku = "[月度] and [氏名] LIKE '*" & Me.テキスト検索.Value & "*'"
  End If
  
  Me.Filter = Kensaku
  Me.FilterOn = True
End Sub

お忙しいところ申し訳ありませんが宜しくお願いします。
・ツリー全体表示

【5864】Re:リセットボタン
質問  謙虚人  - 05/8/17(水) 10:32 -

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

下記の通り入力いたしましたが、
コンパイルエラー:
メソッドまたはデータメンバが見つかりません。
とエラーが出ます。

If Ctrl.ControlType = acTextBox Then

この文の.ControlType というところがどうやら違っているみたいなんです。

検索等でいろいろ調べましたが、欲しい回答がでてきませんでした。
どうぞご解答お願いします。
・ツリー全体表示

【5863】Re:検索用のフォーム作成
発言  小僧  - 05/8/17(水) 10:04 -

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

テーブルやフォームのご提示がありませんので、
仮テーブルを作って例を作ってみます。
T_選手
背番号  :数値型(主キー)
選手名  :テキスト型
ポジション:テキスト型
年齢   :数値型
年棒   :通貨型

背番号  選手名  ポジション  年齢  年棒
2      もとき  内野手   34  \12,000
5      きよはら 内野手   38  \45,000
6      こくぼ  内野手   34  \21,000
8       にし   内野手   34  \15,300
18      くわた  投手    37  \30,500
20      ろおず  外野手  37  \54,000
33      えとう  内野手   35  \21,500
47      くどう  投手    42  \28,000

このテーブルを基に帳票フォームで「F_選手」を作成して下さい。
レポートヘッダを広げて、そこに

【cmbポジション】:コンボボックス
   値集合ソース:SELECT [T_選手].ポジション FROM T_選手 GROUP BY [T_選手].ポジション;

【cmb年齢】:コンボボックス
   値集合ソース:SELECT [T_選手].年齢 FROM T_選手 GROUP BY [T_選手].年齢;
  
【txt人数】:テキストボックス

【txt年棒合計】:テキストボックス
  コントロールソース:=Sum([年棒])

【検索ボタン】:コマンドボタン

を配置します。

検索ボタンの「クリック時」イベントに下記コードを記述します。

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


コンボボックスで「ポジション」「年齢」を選んだ後、検索ボタンを押して
結果を確認してみて下さい。
・ツリー全体表示

【5862】Re:検索用のフォーム作成
質問  QOO  - 05/8/16(火) 23:58 -

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

>>検索用フォームの作成で、
>>検索結果の表示は…
>
>現在どのような形で検索結果を返そうとされているのでしょうか。
>
>A) 3つの条件を選択後、コマンドボタンをクリックすると別のフォームが開く。
>B) 全件が表示されているフォームがあり、ヘッダに配置されたコンボボックスを変更するとフィルタによって絞り込まれたレコードのみ表示される。

→ B)のタイプが理想です。
最初のフォームでコンボボックスでそれぞれ選択し、「検索」ボタンをクリックすると、同一WINDOWで以下に検索結果が出て、件数&合計金額はコンボボックスと同じヘッダに設定したいと思っています。
・ツリー全体表示

【5861】Re:リセットボタン
発言  小僧  - 05/8/16(火) 16:49 -

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

フォーム上にある全てのテキストボックスの値をクリアするサンプルです。

Private Sub クリア_Click()
Dim Ctrl As Control
  For Each Ctrl In Me.Controls
    If Ctrl.ControlType = acTextBox Then
      Ctrl.Value = ""
    End If
  Next
End Sub
・ツリー全体表示

【5860】リセットボタン
質問  謙虚人  - 05/8/16(火) 14:34 -

引用なし
パスワード
   フォームからデータを入力し、途中まで入力したがリセットしたいので、リセ
ットボタンを押下するとクリアされるようにしたいのです。

コマンドボタンウィザードでレコードの削除を作りましたが、削除してくれま
せん。

ちなみにそのフォーム上は結構たくさんのテキストボックスがあります。。。

すいませんが、どなたか教えて下さい。

単票形式・テキストボックスはすべて非連結です。
・ツリー全体表示

【5859】Re:時間の計算について
お礼  わん  - 05/8/15(月) 14:47 -

引用なし
パスワード
   小僧さん
こんにちわ。

一応、私のSQLでも大丈夫でしたが、
その後の給与計算のためのクエリ数が増えて、
更にクエリ中の計算式も確かに多く面倒です。

早速、小僧さん方式を試してみます。
一目見て、小僧さん方式が後々のことも考慮されており、
スッキリしていることが解るようになりました。

今回のご指導で日付・時間だけでなく、クエリについてや変換関数についても
深く理解できました。

本当にありがとうございました。
只今、出勤、退勤以外に休憩入及び休憩出のコマンドを追加してトライしています。

今までの応用をきかせて頑張ります。
また、何か問題が発生した場合はお願い致します。

ありがとうございました。
・ツリー全体表示

【5858】Re:時間の計算について
発言  小僧  - 05/8/15(月) 13:23 -

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

>その後、落ち着いて考えてみました。
同じく落ち着いて考えてみました。

SELECT 社員労働時間.社員番号,
    社員労働時間.打刻日付,
    DateAdd("n",15-Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤,
    DateAdd("n",-Minute([退勤時間]) Mod 15,[退勤時間]) AS 退勤,
    DateDiff("n",[出勤],[退勤])/60-1 AS 労働時間,
    IIf(Hour([退勤]) Between 5 And 22,DateDiff("n",[出勤],[退勤]),
          DateDiff("n",[出勤],CDate([打刻日付] & ' 22:00')))/60-1 AS 日勤,
    IIf(Hour([退勤]) Between 5 And 22,0,
          DateDiff("n",CDate([打刻日付] & ' 22:00'),[退勤]))/60 AS 夜勤,
    IIf([日勤]>8,[日勤]-8,0) AS 日勤残業,
    IIf([労働時間]>9,DateDiff("n",[出勤],[退勤])/60-[日勤残業]-9,0) AS 夜勤残業
FROM 社員労働時間;

10件くらい色々データを入れて検証した結果は問題なさそうなのですが、
わんさん の実際使われているデータでも問題なければ良いのですが…。
・ツリー全体表示

【5857】Re:検索用のフォーム作成
発言  小僧  - 05/8/15(月) 10:30 -

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

>検索用フォームの作成で、
>検索結果の表示は…

現在どのような形で検索結果を返そうとされているのでしょうか。

A) 3つの条件を選択後、コマンドボタンをクリックすると別のフォームが開く。
B) 全件が表示されているフォームがあり、ヘッダに配置されたコンボボックスを変更すると
  フィルタによって絞り込まれたレコードのみ表示される。

>A:件数と

A) でしたら「フォームを開いた時」
B) でしたら「コンボボックスの値が変化した時」

のタイミングで、件数を表示したいテキストボックス(フォームフッタに配置)に

Me.Recordset.RecordCount

と値を代入すれば表示されます。(VBAで行うことになりますね。)

>B:(売上)合計金額

結果を表示したいテキストボックス(フォームフッタに配置)のコントロールソースに

=Sum([売上金額])

のような感じで合計金額が表示されると思います。
・ツリー全体表示

【5856】Re:複雑なクエリ処理方法について
回答  小僧  - 05/8/15(月) 9:59 -

引用なし
パスワード
   ▼MK&db さん、Gin_II さん:
おはようございます。

>>以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?

Null値があるとうまくいかないかもしれませんが、

Sub 動的SQLを作成()
'要参照設定 Microsoft DAO x.x Object Library
Dim SQLCode As String
Dim QD As DAO.QueryDef
Dim FName(1 To 4) As Variant
Dim RecCNT As Long
Dim I As Long

  FName(1) = "Fe"
  FName(2) = "Cu"
  FName(3) = "Si"
  FName(4) = "Ca"
  
  SQLCode = "SELECT ModelNo, NameNo, "
  
  RecCNT = DCount("*", "テーブルAD_Group")
  
  For I = 1 To UBound(FName, 1)
    If DSum(FName(I), "テーブルAD_Group") > 0 Then
      SQLCode = SQLCode & FName(I) & ", "
    End If
  Next
    SQLCode = Left(SQLCode, Len(SQLCode) - 2) _
        & " FROM テーブルAD_Group"
          
  Set QD = CurrentDb.CreateQueryDef("クエリADNew", SQLCode)
  QD.Close
  Set QD = Nothing
End Sub


「CreateQueryDef」メソッドでわざわざクエリを作成しているため、
同名のクエリが存在するとエラーになります。

「クエリADNew」をフォームやレポートの基にしたい場合であれば
クエリを作成しなくても 変数:SQLCode をレコードソースに代入すれば
結果が表示されると思います。
・ツリー全体表示

【5855】Re:ソートの仕方
お礼  りすりす  - 05/8/14(日) 21:16 -

引用なし
パスワード
   ▼Gin_II さん:
>「ツール」⇒「参照設定」で、Microsoft DAO 3.x Object Library に
>チェックが入っているかを確認してください。
>
>> Dim MyDb As Recordset ' 型(/--)/違うと怒られます。
>
>Dim MyDb As DAO.Recordset
いっぱいあったので一番数字の大きい 3.6 にチェックいれて
Dim MyDb As DAO.Recordset
で通りました ♪

>
>
>> ' 2.ここで ソートさせたいです。
>Recordset で、Sort は可能ですよ。
>
>MyDB.Sort = "掲載の順位 DESC"
>Set MyDB = MyDB.OpenRecordset()
>
>かな ^^; (未検証)
並び変わりました♪

ありがとうございました m(_ _)m
・ツリー全体表示

【5854】検索用のフォーム作成
質問  QOO  - 05/8/14(日) 15:29 -

引用なし
パスワード
   こんにちは。
検索用フォームの作成で、
1.部署名 2.年 3.月 の3点でAND検索するマクロをボタンに組み込みたいのですが、どのようなマクロを作成すればよいのでしょうか?
検索結果の表示は検索レコードの表示と+A:件数とB:(売上)合計金額を表示できるようにしたいのです。
件数は、下のレコード数で見ればわかるのでは、と思われますがaccessがわからない人にでも、わかるような画面にしたいのです。
ちなみに、3点ともコンボボックスでそれぞれ選択できるようになっています。
宜しくご教授願います。
・ツリー全体表示

【5853】Re:複雑なクエリ処理方法について
質問  MK&db  - 05/8/13(土) 21:30 -

引用なし
パスワード
   ▼Gin_II さん:
>>以下のクエリADがあるとします、クエリADを使って、列の縦方向の合計が
>>ゼロの列を除外したいです。このような煩雑な処理は可能でしょうか?
>
>VBAを使って、動的にクエリのSQL文を編集すれば可能だと思います。
>このクエリADは、元のテーブルも同じようなレイアウトなのでしょうか?

データ処理の流れは、

一、テーブルAD_Group
ModelNo  NameNo    Fe   Cu   Si   Ca  ・・・・・ Other

二、クエリAD
テーブルAD_Groupからいくつかのフィールドを選択して、以下のクエリ結果に
なります。
クエリAD
ModelNo  NameNo    Fe   Cu   Si   Ca   Other
M-1    N-1     20   30   15       35
M-2    N-2     25   30   10       35
M-3    N-3     10   40   15       35

三、縦方向のΣゼロ列の処理
新しいクエリADnewを作って、ここで縦方向のΣがゼロの列を除外したいのですが、
ご伝授ください。
・ツリー全体表示

【5852】Re:時間の計算について
お礼  わん  - 05/8/13(土) 15:26 -

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

その後、落ち着いて考えてみました。

基本勤務形態として 09:00〜18:00、12:00〜21:00、15:00〜00:00であり、
深夜は必ずしも残業とは限らず、深夜残業として考えると難しくなるので、
単純に深夜勤務として考えてみました。


残業時間は算出されているので、
↓のように深夜勤務22:00〜5:00の勤務時間を算出してみました。

深夜勤務: IIf(Hour([退勤]) Between 5 And 22,0,DateDiff("n",CDate([打刻日付] & ' 22:00'),[退勤]))/60

あとは、残業の割増率と深夜勤務の割増率から増加分を算出し、
合算する方法を検討しています。

他にもっと簡単な方法があればご教授下さい。
宜しくお願いします。
・ツリー全体表示

【5851】Re:時間の計算について
発言  小僧  - 05/8/12(金) 16:02 -

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

>22:00以降の残業計算で頭がこんがらがってしまいました。
>混乱してきました。

業務の合間に作っているのですが
同じく混乱中です…。

深夜残業: IIf(DateDiff("n",[出勤],[退勤])<600 Or Hour([退勤]) Between 5 And 22,0,DateDiff("n",CDate([打刻日付] & ' 22:00'),[退勤]))/60

でできたと思ったのですが、

残業 > 深夜残業

の処理が抜けてました…。

[退勤] - [出勤] > 8h 以上
[退勤] > 22:00
[残業] > [深夜残業]  であれば[退勤] - [打刻日付の22:00]


[退勤] - [出勤] > 8h 以上
[退勤] > 22:00
[残業] < [深夜残業]  であれば[残業]

その他 0

の3パターンなのですが、ちょっと複雑すぎるので
もう少し整理できたらまた回答させて頂きます。
・ツリー全体表示

【5850】Re:時間の計算について
質問  わん  - 05/8/12(金) 13:42 -

引用なし
パスワード
   小僧さん
こんにちわ。

時間計算をしていましたが行き詰まりました。
労働時間、残業時間はできたのですが、
22:00以降の残業計算で頭がこんがらがってしまいました。
(計算に用いている時間は数値が細かくなり過ぎないように切捨て、切上げしているものを使用しています。)

現在のSQLビューの全文は以下のようになっています。

SELECT 社員労働時間.社員番号, 社員労働時間.打刻日付, 社員労働時間.出勤時間, 社員労働時間.退勤時間,
DateAdd("n",15-Minute([出勤時間]) Mod 15,[出勤時間]) AS 出勤,
DateAdd("n",-Minute([退勤時間]) Mod 15,[退勤時間]) AS 退勤,
(DateDiff("n",[出勤],[退勤])-60)/60 AS 労働時間,
(DateDiff("n",[出勤],[退勤])-540)/60 AS 残業時間,
IIf(Hour([退勤])<=22,0,IIf(((DateDiff("n",[出勤],[退勤])-60)/60)>=540,(Hour([退勤])-22))) AS 深夜残業
FROM 社員労働時間;

IIf(Hour([退勤])<=22,0,IIf(((DateDiff("n",[出勤],[退勤])-60)/60)>=540,(Hour([退勤])-22))) AS 深夜残業

一応↑のように考えてみたのですが、22:00前は0で表示されますが、
22:00以降は未表示になります。
また、今のままでは正確に22:00を過ぎた状態から計算されていません。

もしかしたら、
IIfではなくBetween #〜# And #〜# で考えなければいけないような気もするのですが、
混乱してきました。

何処に誤りがあるのかご指摘をお願いします。
宜しくお願いします。
・ツリー全体表示

【5849】Re:テキストボックスデータをテーブルに
お礼    - 05/8/12(金) 11:58 -

引用なし
パスワード
   はい、ごめんなさい(T_T)

その通りですね。

がんばってみます。
・ツリー全体表示

【5848】Re:テキストボックスデータをテーブルに
回答  小僧  - 05/8/12(金) 10:54 -

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

こんにちは。

とりあえずやる → NG → 質問 でなく、
今まで提示させて頂いたコード、マクロを参考にして自分なりの工夫もしてみて下さいね。

コードの場合:
Private Sub 実行_Click()
Dim SQLCode As String
Dim XName As String

  XName = "C:\Test1.xls" 'Excel のフルパスを入れる

  SQLCode = "INSERT INTO IDテーブル(ID) VALUES ('" & Me.ID.Value & "')"
  DoCmd.RunSQL SQLCode

  DoCmd.RunSQL SQLCode
  DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "IDテーブル", XName

End Sub

マクロの場合:
アクション
SQLの実行
   SQLステートメント:INSERT INTO IDテーブル(ID) VALUES (Forms![フォーム名].[ID])

ワークシート変換
   変換の種類    :エクスポート
   ワークシートの種類:Microsoft Excel 8-10
   テーブル名    :IDテーブル
   ファイル名    :C:\Test2.xls
   フィールド名の設定:はい
・ツリー全体表示

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