Access VBA質問箱 IV

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

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


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

【9692】Re:クエリのカウントの仕方
回答  Nao  - 07/7/11(水) 14:46 -

引用なし
パスワード
   >都道府県  会員数  支店数
>北海道    58    4
>青森県    27    8
>岩手県    5     2
>  ・     ・    ・
>  ・     ・    ・

1つのクエリーで考えないで・・・

1.都道府県別の会員数の集計クエリー(現在の物)を作成する。
2.都道府県別の支店数の集計クエリーを作成する。
3.上記2区会えリーを「都道府県」で結合するクエリーを作成する。

3.で作成したクエリーによりお望みの結果が得られると思います。
・ツリー全体表示

【9691】Re:配列変数の引き渡し方
お礼  メイ子  - 07/7/11(水) 14:01 -

引用なし
パスワード
   ▼hatena さん:
できました!
大変丁寧に教えていただき、また何度もお付き合い頂き、ありがとうございました。
高度ですが、とても簡潔なコードでわかりやすかったです。
私も、このようなコーディングを勉強して身に付けたいと思います。
またわからないことがありましたら、どうぞよろしくお願いいたします。
・ツリー全体表示

【9690】Re:「重複データ非表示」と「グループフッ...
回答  hatena  - 07/7/11(水) 13:34 -

引用なし
パスワード
   >会社名ヘッダーのフォーマット時のイベントプロシージャを選択すると、
>
>Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
>  Me.MoveLayout = False
>End Sub
>
>ではなくて
>
>Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
>  Me.MoveLayout = False
>End Sub
>
>になります。

私の間違いです。こちらの方でいいです。

>詳細・グループヘッダー0 のいずれも 望みどおりの結果にはなりませんでした。

どのような結果になりましたか。
当方の実験では、うまくいってます。
・ツリー全体表示

【9689】Re:配列変数の引き渡し方
回答  hatena  - 07/7/11(水) 13:31 -

引用なし
パスワード
   >下記の場所に入れました。直前とは、どこに入れることになりますか?

意味を取り違えてました。現在の位置でいいです。

>後、もう一つ難問ができてしまいました。
>休日だけ文字の色を変える必要があると気がついたので、下記のようにしてみましたが、無反応です。「休日一覧」テーブルには「ID」と「休日」というフィールドがあり、「休日」は日付型です。
>どこを直したらよろしいでしょうか?度々申し訳ありません。

とりあえず下記のように修正してみてください。

>Private Sub SetCalendar(y As Integer, m As Integer)
>
>Dim i As Integer, j As Integer, FirstDay As Date, s As Integer
>
>  For j = -3 To 2
>    For i = 1 To 42
>      With Me(Chr(Asc("d") + j) & i)
>        .Caption = ""
        .OnClick = ""
        .ForeColor = vbBlack
>      End With
>    Next
>  Next
>
>Dim db As DAO.Database
>Dim RS As DAO.Recordset
>Dim strSQL As String
>  strSQL = "SELECT * FROM 休日一覧 "
>  Set db = CurrentDb()
>  Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
>  
>  For j = -3 To 2
>    FirstDay = DateSerial(y, m + j, 1)
>    s = Weekday(FirstDay)
>    For i = 0 To Day(DateSerial(y, m + j + 1, -1))
>      With Me(Chr(Asc("d") + j) & i + s)
        RS.FindFirst "休日 = #" & FirstDay + i & "#"
        If Not RS.NoMatch Then
          .ForeColor = vbRed
        End If
        .Caption = Day(FirstDay + i)
        .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
        .Tag = FirstDay + i
>      End With
>    Next
>  Next
>
>End Sub
・ツリー全体表示

【9688】Re:「重複データ非表示」と「グループフッ...
質問  pinetree  - 07/7/11(水) 10:14 -

引用なし
パスワード
   ▼hatena さん:
>会社名ヘッダーを表示させて、そこに「会社名」テキストボックスを移動させます。
>プレビューすると下記のようになります。
>
>NO    会社名    事業所名    担当者名
>     東北商事
>1            本社      山田
>2                    佐藤
>3           仙台支社     田中
>     北陸物産
>4           本社       鈴木
>5           金沢支店     安倍
>6                    塩崎
>
>デザインビューにして、会社名ヘッダーのフォーマット時の
>イベントプロシージャで、
>
>Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
>  Me.MoveLayout = False
>End Sub
>
>と1行のみ記述します。これでプレビューすると下記のように
>希望の結果になると思います。
>
>NO    会社名    事業所名    担当者名
>1    東北商事    本社      山田
>2                    佐藤
>3           仙台支社     田中
>4    北陸物産   本社       鈴木
>5           金沢支店     安倍
>6                    塩崎


早速ご教示いただきありがとうございました。
会社名ヘッダーのフォーマット時のイベントプロシージャを選択すると、

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.MoveLayout = False
End Sub

ではなくて

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)
  Me.MoveLayout = False
End Sub

になります。

詳細・グループヘッダー0 のいずれも 望みどおりの結果にはなりませんでした。

OSはWIN2000 access2003です。
お忙しいところ恐縮ですが、よろしくお願い致します。
・ツリー全体表示

【9687】クエリのカウントの仕方
質問  FM66447  - 07/7/11(水) 2:30 -

引用なし
パスワード
   Accessで会員データの管理をしようと考えております。
全国にいる会員の都道府県別に人数をクリエでカウントしているのですが、
今度、全国の支店数も出すことになりました。
イメージとしては、
都道府県  会員数  支店数
北海道    58    4
青森県    27    8
岩手県    5     2
  ・     ・    ・
  ・     ・    ・
  ・     ・    ・

としたいのですが、現在毎月送られてくるデータを下に
集計を出しています。

テーブルは「T_都道府県」「T_支店名」「T_会員データ」です
「T_会員データ」には各会員一人一人の住所と支店が記入されており
その住所をクリエでカウントして都道府県別、会員数は出せるのですが
その都道府県のなかの支店数をどのようにして出せばいいのかわかりません。

同じ数字をカウントすると、支店ごとに人数が出てしまい支店数を出すことができません。

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

【9686】Re:連番をふりたい
お礼  一郎  - 07/7/10(火) 19:39 -

引用なし
パスワード
   うまくいきました。ありがとうございました。
・ツリー全体表示

【9685】Re:配列変数の引き渡し方
質問  メイ子  - 07/7/10(火) 19:03 -

引用なし
パスワード
   ▼hatena さん:
ご教示ありがとうございます。

>えっと、直後でなくて、直前ですよね。
>コード自体は私が書いてもそうような感じになります。

下記の場所に入れました。直前とは、どこに入れることになりますか?
後、もう一つ難問ができてしまいました。
休日だけ文字の色を変える必要があると気がついたので、下記のようにしてみましたが、無反応です。「休日一覧」テーブルには「ID」と「休日」というフィールドがあり、「休日」は日付型です。
どこを直したらよろしいでしょうか?度々申し訳ありません。

Private Sub SetCalendar(y As Integer, m As Integer)

Dim i As Integer, j As Integer, FirstDay As Date, s As Integer

  For j = -3 To 2
    For i = 1 To 42
      With Me(Chr(Asc("d") + j) & i)
        .Caption = ""
      End With
    Next
  Next

Dim db As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
  strSQL = "SELECT * FROM 休日一覧 "
  Set db = CurrentDb()
  Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
  
  For j = -3 To 2
    FirstDay = DateSerial(y, m + j, 1)
    s = Weekday(FirstDay)
    For i = 0 To Day(DateSerial(y, m + j + 1, -1))
      With Me(Chr(Asc("d") + j) & i + s)
        RS.FindFirst "休日 = " & DateSerial(y, m + j, 1)
          If RS.NoMatch Then
            .Caption = Day(FirstDay + i)
            .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
            .Tag = FirstDay + i
          Else
            .Caption = Day(FirstDay + i)
            .ForeColor = vbRed
            .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
            .Tag = FirstDay + i
          End If
      End With
    Next
  Next

End Sub
・ツリー全体表示

【9684】Re:連番をふりたい
回答  Gin_II  - 07/7/10(火) 17:11 -

引用なし
パスワード
   >各番号ごとに、区分の昇順で連番を振りたいのです。

SELECT テーブル名.番号
   , テーブル名.区分
   , DCount("*"
      , "テーブル名"
      , "番号=" & 番号 & " AND 区分<='" & 区分 & "'") AS 連番
FROM テーブル名
ORDER BY 番号, 区分

では、どうでしょうか?
・ツリー全体表示

【9683】Re:配列変数の引き渡し方
回答  hatena  - 07/7/10(火) 14:40 -

引用なし
パスワード
   >月が替わった時に、.Captionの数字が残るので、一旦消してからと思ったのですが、上記のコードを
>Private Sub SetCalendar(y As Integer, m As Integer)
>の直後に入れました。もっといい方法はありますか?

えっと、直後でなくて、直前ですよね。

コード自体は私が書いてもそうような感じになります。
・ツリー全体表示

【9682】Re:配列変数の引き渡し方
質問  メイ子  - 07/7/10(火) 14:20 -

引用なし
パスワード
   ▼hatena さん:
できました!!
大変丁寧に教えていただきありがとうございました。
素晴らしいシステムになりつつあり、喜んでおります。

ところで、もう一つだけ質問させてください。

  For j = -3 To 2
    For i = 1 To 42
      With Me(Chr(Asc("d") + j) & i)
        .Caption = ""
      End With
    Next
  Next

月が替わった時に、.Captionの数字が残るので、一旦消してからと思ったのですが、上記のコードを
Private Sub SetCalendar(y As Integer, m As Integer)
の直後に入れました。もっといい方法はありますか?
レスポンスはほとんど変わらないようです。
・ツリー全体表示

【9681】Re:「重複データ非表示」と「グループフッ...
回答  hatena  - 07/7/9(月) 22:12 -

引用なし
パスワード
   会社名ヘッダーを表示させて、そこに「会社名」テキストボックスを移動させます。
プレビューすると下記のようになります。

NO    会社名    事業所名    担当者名
     東北商事
1            本社      山田
2                    佐藤
3           仙台支社     田中
     北陸物産
4           本社       鈴木
5           金沢支店     安倍
6                    塩崎

デザインビューにして、会社名ヘッダーのフォーマット時の
イベントプロシージャで、

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.MoveLayout = False
End Sub

と1行のみ記述します。これでプレビューすると下記のように
希望の結果になると思います。

NO    会社名    事業所名    担当者名
1    東北商事    本社      山田
2                    佐藤
3           仙台支社     田中
4    北陸物産   本社       鈴木
5           金沢支店     安倍
6                    塩崎
・ツリー全体表示

【9680】連番をふりたい
質問  一郎  - 07/7/9(月) 20:59 -

引用なし
パスワード
   質問いたします。
いま、以下のようなテーブルがあります。

番号  区分
------------------
 1   1父
 1   2母
 1   4弟
 2   2母
 2   5姉
 3   1父
 3   3兄
 3   4弟
 3   5姉
 3   6妹

これをクエリで、各番号ごとに、区分の昇順で連番を振りたいのです。

番号  区分   連番
------------------------
 1   1父    1
 1   2母    2
 1   4弟    3
 2   2母    1
 2   5姉    2
 3   1父    1
 3   3兄    2
 3   4弟    3
 3   5姉    4
 3   6妹    5

どのようにすればうまくいくでしょうか?
・ツリー全体表示

【9679】Re:SQLの構文
お礼  AT  - 07/7/9(月) 17:17 -

引用なし
パスワード
   hatena さん ご教授ありがとうございます。

第4引数を使用する方法で処理することができました。
今回、【ロット台帳変更用】テーブルを使用したかったので。
勉強になりました、ありがとうございました。

>OpenFormの第3引数 FilterName にクエリ名またはSQLを設定した場合は、
>WHERE句が フォームのFilterプロパティに、ORDER BY句がOrderByプロパティに
>設定されます。SELECT句、FROM句は関係有りません。
>
>パラメータが出るのは、フォームのレコードソースのクエリに、
>ロット台帳変更_引張表示 が含まれてないからではないですか。
>
>フォームのレコードソースを「ロット台帳変更_引張表示」が
>含まれるものに変更するか、
>下記のように第4引数に抽出条件を設定するようにします。
>
>StrSQL = "ロットNo In " _
>    & "(SELECT T.ロットNo FROM ロット台帳変更_引張表示 AS T" _
>    & " WHERE ロット一括変更 = True)" _
>                    
>DoCmd.OpenForm "ロット台帳変更", , , StrSQL
・ツリー全体表示

【9678】「重複データ非表示」と「グループフッタ...
質問  pinetree  - 07/7/9(月) 16:42 -

引用なし
パスワード
   質問 「重複データ非表示」と「グループフッター」の関連について

下記のようなデータがあります。

NO    会社名    事業所名    担当者名
1    東北商事    本社    山田
2    東北商事    本社    佐藤
3    東北商事    仙台支社  田中
4    北陸物産    本社    鈴木
5    北陸物産    金沢支店  安倍
6    北陸物産    金沢支店  塩崎

会社名・事業所名を「重複データ非表示」
にして下記のようにレポートを作成したい
のですが

NO    会社名    事業所名    担当者名
1   東北商事    本社   山田
2               佐藤
3          仙台支社  田中
4   北陸物産    本社   鈴木
5          金沢支店  安倍
6                塩崎


事業所名のところにグループフッターを「あり」
にすると下記のようになってしまいます。
NO 3 と 5 の会社名は非表示にしたいのですが
良い方法があればご教示ください。

NO    会社名    事業所名    担当者名
1   東北商事   本社    山田
2                佐藤
3   東北商事    仙台支社  田中
4   北陸物産    本社    鈴木
5   北陸物産    金沢支店  安倍
6                塩崎
・ツリー全体表示

【9677】Re:配列変数の引き渡し方
回答  hatena  - 07/7/9(月) 11:38 -

引用なし
パスワード
   >早速コードをコピーして実行してみましたら、
>RS.FindFirst "出席日=#" & Split(.Tag, "#")(1) & "#"
>のところで、「インデックスが有効範囲にありません」と表示されます。

Tagプロパティには日付がそのままは行ってますので、Splitで
取り出す必要は有りません。

RS.FindFirst "出席日=#" & .Tag & "#"

>下記のすべてのsub、functionを記述すればよいのですよね?
>Private Sub Form_Load()
>Private Function Day_Click(D As Date)
>Private Function SetCalendar(y As Integer, m As Integer)
>
>Private Sub Form_Current()
>Private Sub CalUpdate(y As Integer, m As Integer)
>Private Sub SetColor(y As Integer, m As Integer)

アップしたときに、こちらでサンプル用に作ったのとごっちゃになってました。

フォームに必要なコードは下記がすべてです。

Private Sub Form_Load()
  SetCalendar Year(Date), Month(Date)
End Sub

Private Sub Form_Current()
  SetColor Year(Date), Month(Date)
End Sub

Private Function Day_Click(D As Date)
  Screen.ActiveControl.Value = D
End Function

Private Sub SetCalendar(y As Integer, m As Integer)
Dim i As Integer, j As Integer, FirstDay As Date, s As Integer

  For j = -3 To 2
    FirstDay = DateSerial(y, m + j, 1)
    s = Weekday(FirstDay)
    For i = 0 To Day(DateSerial(y, m + j + 1, -1))
      With Me(Chr(Asc("d") + j) & i + s)
        .Caption = Day(FirstDay + i)
        .OnClick = "=Day_Click(#" & FirstDay + i & "#)"
        .Tag = FirstDay + i
      End With
    Next
  Next

End Sub

Private Sub SetColor(y As Integer, m As Integer)
Dim i As Integer, j As Integer
Dim db As DAO.Database
Dim RS As DAO.Recordset
Dim strSQL As String
  strSQL = "SELECT * FROM 出欠 " & _
      "WHERE 出席日 Between #" & DateSerial(y, m + 0, 1) & _
      "# AND #" & DateSerial(y, m + 2, 0) & "#"
  Set db = CurrentDb()
  Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly)
  
  For j = -3 To 2
    For i = 1 To 42
      With Me(Chr(Asc("d") + j) & i)
        If .Tag = "" Then
          .BackColor = vbWhite
        Else
          RS.FindFirst "出席日=#" & .Tag & "#"
          If RS.NoMatch Then
            If WeekdayName(Weekday(.Tag)) = Me.曜日 Then
              .BackColor = vbMagenta
            Else
              .BackColor = vbWhite
            End If
          ElseIf RS!出欠 Then
            .BackColor = vbBlue
          Else
            .BackColor = vbRed
          End If
        End If
      End With
    Next
  Next
  RS.Close
End Sub


まったく同じサンプルは作ってないので、
まだ、おかしなところがあるかも知れませんが、
たぶんこれでいいと思います。
・ツリー全体表示

【9676】Re:配列変数の引き渡し方
質問  メイ子  - 07/7/9(月) 11:05 -

引用なし
パスワード
   ▼hatena さん:
丁寧なご教示ありがとうございます。

>ちょっと分かりにくいしので、Tagプロパティにも日付を格納するように
>CalUpdate を改良しました。これで後から日付を利用するときシンプルな
>コードになりますので。
ありがとうございます。.Tagプロパティに格納するという形だと理解しやすくなりました。
早速コードをコピーして実行してみましたら、
RS.FindFirst "出席日=#" & Split(.Tag, "#")(1) & "#"
のところで、「インデックスが有効範囲にありません」と表示されます。
前回のように
Private Sub Form_Load()
  SetCalendar Year(Date), Month(Date)
End Sub
の部分が消えているということはありません。

Debug.Print .Tag
を付け加えて実行してみましたら、ウィンドウに
2007/04/01
とだけ表示されています。

下記のすべてのsub、functionを記述すればよいのですよね?
Private Sub Form_Load()
Private Function Day_Click(D As Date)
Private Function SetCalendar(y As Integer, m As Integer)

Private Sub Form_Current()
Private Sub CalUpdate(y As Integer, m As Integer)
Private Sub SetColor(y As Integer, m As Integer)

下記の二つは中身が似ているのですが、functionとsubで違う使い方になっているということですね?
相互関係がわからなくなってきました。申し訳ありません。もう一度ご教示お願いいたします。
Private Function SetCalendar(y As Integer, m As Integer)
Private Sub CalUpdate(y As Integer, m As Integer)
・ツリー全体表示

【9675】Re:フォルダ内の最新ファイルの取得につい...
お礼  qq  - 07/7/9(月) 10:50 -

引用なし
パスワード
     Set FileSysobj = CreateObject("Scripting.FileSystemObject")
  Set Fid = FileSysobj.GetFolder(DirHdata)
  Set Fils = Fid.Files
  f_name1 = "import" '**ファイル名要確認**
  For Each Trgtfile In Fils
    
    If InStr(Trgtfile.Name, "_") <> 0 Then
      If f_name1 = _
        Replace(Trgtfile.Name, Mid(Trgtfile.Name, InStr(Trgtfile.Name, "_")), "") Then
''     同一日付の最新ファイルを取得
        If taihi < Mid(Trgtfile.Name, InStr(Trgtfile.Name, "_") + 1, 12) Then
          taihi = Mid(Trgtfile.Name, InStr(Trgtfile.Name, "_") + 1, 12)
          TAIHIFL = Trgtfile.Name
        End If
        flg = True
      End If
    End If
  
  Next

以上のような記述で、最大のタイムスタンプを取得することが
できました。
お騒がせしました。
・ツリー全体表示

【9674】フォルダ内の最新ファイルの取得について
質問  qq  - 07/7/9(月) 10:34 -

引用なし
パスワード
   お世話になります。

掲題の通りなのですが、フォルダを指定して、そのフォルダ内の
最新のファイルを取得したいです。
ファイル名にはタイムスタンプがついており、
ファイル名でソートできればどれが最新のファイルなのか
すぐ分かるようになっています。
(最新→一番タイムスタンプの値が大きいファイル)
ファイル名でソートできればすぐに取得できるのですが。

  Dim MyPath As String
  Dim MyName As String
  ' C:\ 内のフォルダの名前を表示します。
  MyPath = "D:\test\"
  MyName = Dir(MyPath)
  Do While MyName <> ""
    Debug.Print MyName
    MyName = Dir
  Loop

これでファイル名を取得することはできますが、
一度全てのファイル名を取得してテーブルにでも
保存して、ソートをかけてからでないと、
最新ファイルがどれだか分からないのではないかと
思います。

ご存知の方おられましたら、どうぞ教えて下さい。
・ツリー全体表示

【9673】Re:SQLの構文
回答  hatena  - 07/7/9(月) 1:41 -

引用なし
パスワード
   >クエリで実行すると抽出結果が表示されるのですが、
>モジュールで宣言して実行すると、
>パラメータ入力を聞かれてしまいます。
>【ロット台帳変更_引張表示.ロット一括変更】??インプットボックス
>
>StrSQL = "SELECT ロット台帳変更用.* FROM ロット台帳変更用 " _
>    & "INNER JOIN ロット台帳変更_引張表示 " _
>    & "ON ロット台帳変更用.ロットNo = ロット台帳変更_引張表示.ロットNo " _
>    & "WHERE (((ロット台帳変更_引張表示.ロット一括変更) = True ))" _
>    & "ORDER BY ロット台帳変更用.ロットNo"
>                    
>DoCmd.OpenForm "ロット台帳変更", , StrSQL

OpenFormの第3引数 FilterName にクエリ名またはSQLを設定した場合は、
WHERE句が フォームのFilterプロパティに、ORDER BY句がOrderByプロパティに
設定されます。SELECT句、FROM句は関係有りません。

パラメータが出るのは、フォームのレコードソースのクエリに、
ロット台帳変更_引張表示 が含まれてないからではないですか。

フォームのレコードソースを「ロット台帳変更_引張表示」が
含まれるものに変更するか、
下記のように第4引数に抽出条件を設定するようにします。

StrSQL = "ロットNo In " _
    & "(SELECT T.ロットNo FROM ロット台帳変更_引張表示 AS T" _
    & " WHERE ロット一括変更 = True)" _
                    
DoCmd.OpenForm "ロット台帳変更", , , StrSQL
・ツリー全体表示

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