|
>>元テーブルに枝番フィールドを追加すればどうでしょうか。
>といいますのは、
>かるびの様のおっしゃっているワークテーブルや追加クエリは使わずに、
>Q集計元1に枝番フィールドを追加する、という解釈でいいのでしょうか?
クエリの元になっているテーブルつまり「作業内容」テーブルに「枝番」という数値型フィールドを追加してください。
> 載せていただいたページを見ていたのですが、
>たくさんの知らない文に圧倒されてしまい…ただ文字通り見ているだけになってしまいました。
下記の関数をコピーして標準モジュールに貼り付けてください。(リンク先のページにある関数です。)
'グループ毎の連番を入力する関数
'引数 FieldName:連番を格納するフィールド名(データ型は数値型)
' TableName:対象のテーブル名またはクエリ名(パラメータクエリは不可)
' GroupBy:グループ化するフィールド名(省略可能)
' 複数フィールドをカンマ区切りで指定可能
' 省略した場合は全レコードを通しての連番になります。
' Orderby:並べ替えするフィールド名(省略可能)
' SQLのORDER BY句内の式と同一
' 省略した場合は並び順は不定になります。
' WhereCondition:抽出条件式(省略可能)
' SQLのOWHERE句内の式と同一
' 省略した場合は全レコードが対象になります。
'使用上の注意: DAO ライブラリへの参照設定が必要です。
Public Function SetSequenceNumber( _
FieldName As String, _
TableName As String, _
Optional GroupBy As String, _
Optional Orderby As String, _
Optional WhereCondition As String) As Boolean
Dim rs As DAO.Recordset
Dim c As Long, GCnt As Long, i As Long
Dim strSQL As String, strOrderby As String
Dim v() As String
On Error GoTo ErrHdl
SetSequenceNumber = True
'SQL文生成
strSQL = "SELECT " & FieldName
If LenB(GroupBy) > 0 Then
strSQL = strSQL & ", " & GroupBy
strOrderby = "," & GroupBy
End If
strSQL = strSQL & " FROM " & TableName
If LenB(WhereCondition) > 0 Then strSQL = strSQL & " WHERE " & WhereCondition
If LenB(Orderby) > 0 Then strOrderby = strOrderby & "," & Orderby
If LenB(strOrderby) > 0 Then strSQL = strSQL & " ORDER BY " & Mid$(strOrderby, 2)
strSQL = strSQL & ";"
Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
'グループ化するフィールド数分の動的配列確保
GCnt = UBound(Split(GroupBy, ","))
If GCnt > -1 Then ReDim v(GCnt)
'連番書き込みループ
Do Until rs.EOF
For i = 0 To GCnt
If v(i) = rs(i + 1) Then
Else
c = 0
v(i) = rs(i + 1)
End If
Next
c = c + 1
rs.Edit
rs(0) = c
rs.Update
rs.MoveNext
Loop
Ext:
On Error Resume Next
rs.Close
Set rs = Nothing
Exit Function
ErrHdl:
MsgBox Err & ":" & Err.Description
SetSequenceNumber = False
Resume Ext
End Function
この関数の内容は理解できなくても結構です。
使い方さえ理解すればOKです。
(ほとんどのPCユーザーはPCの仕組みは理解できていないが、PCは使えるというのと同じことです。)
使い方は、下記のコードを、クロス集計クエリを開く前に実行します。
SetSequenceNumber "枝番", "作業内容", "日付,社員番号"
これで、「作業内容」テーブルに「枝番」フィールドに、日付、社員番号毎に連番がふられます。
現状のクロス集計クエリの「列見出し」フィールドを下記に変更します。
式1: [社員] & IIf([枝番]=1,"",[枝番])
これで列見出しが下記のようになります。
佐藤 佐藤2 本田 川村
もう少し具体的にいうと、例えば、
フォーム上にコマンドボタンを配置して、そのクリック時のイベントプロシージャを下記のように記述すればいいでしょう。
Private Sub コマンド_Click()
SetSequenceNumber "枝番", "作業内容", "日付,社員番号"
DoCmd.OpenQuery "クロス集計クエリ"
End Sub
これで希望のクロス集計クエリで開きます。
|
|