'製品用フィルター生成
Dim listIndex As Variant
For Each listIndex In Me![製品リストbox].ItemsSelected
strFilter = strFilter & ",'" & Me![製品リストbox].ItemData(listIndex) & "'"
Next
あと
'顧客用フィルター追加
If Me!コンボID <> "" Then
' trFilter = "顧客ID=" & Me!コンボID & " AND " & strFilter ←コピペミス?'
strFilter = "顧客ID=" & Me!コンボID & " AND " & strFilter
End If
選択数: 4
strFilter: 製品コード In ('0','1','3','5')
Form.Filter: 製品コード In ('0','1','3','5')
選択数: 3
strFilter: 製品コード In ('0','1','3')
Form.Filter: 製品コード In ('0','1','3')
選択数: 3
strFilter: 製品コード In ('0','1','2')
Form.Filter: 製品コード In ('0','1','2')
選択数: 3
strFilter: 製品コード In ('0','1','2')
Form.Filter: 製品コード In ('0','1','2')
Private Sub フィルタ適用ボタン_Click()
Dim strFilter As String 'フィルタ文字列
Debug.print "選択数: " & Me![製品リストbox].ItemsSelected.Count '※デバッグコード
'製品用フィルター生成
Dim Itm As Variant
For Each Itm In Me![製品リストbox].ItemsSelected
strFilter = strFilter & ",'" & Itm & "'"
Next
If strFilter = "" Then
MsgBox "製品をリストから選択してください。"
Exit Sub
End If
strFilter = "製品コード In (" & Mid(strFilter, 2) & ")"
Debug.print "strFilter: " & strFilter '※デバッグコード
'顧客用フィルター追加
If Me!コンボID <> "" Then
trFilter = "顧客ID=" & Me!コンボID & " AND " & strFilter
End If
If strFilter <> "" Then
Me![販売実績サブ].Form.Filter = strFilter
Me![販売実績サブ].Form.FilterOn = True
End If
Debug.print "Form.Filter: " & Me![販売実績サブ].Form.Filter '※デバッグコード
End Sub
Private Sub フィルタ適用ボタン_Click()
Dim strFilter As String 'フィルタ文字列
'製品用フィルター生成
Dim Itm As Variant
For Each Itm In Me![リスト].ItemsSelected
strFilter = strFilter & ",'" & Itm & "'"
Next
If strFilter = "" Then
MsgBox "製品をリストから選択してください。"
Exit Sub
End If
strFilter = "製品コード In (" & Mid(strFilter, 2) & ")"
'顧客用フィルター追加
If Me!cb顧客 <> "" Then
strFilter = "顧客ID=" & Me!cb顧客 & " AND " & strFilter
End If
If strFilter <> "" Then
Me![販売実績サブ].Form.Filter = strFilter
Me![販売実績サブ].Form.FilterOn = True
End If
End Sub
UPDATE t月, t決算日
SET
t月.期首日 = DateSerial(Year([決算日]),Month([決算日])-11,0)+1,
t月.月末 = DateSerial(Year([決算日]),Month([決算日])-11+[月ID],0);
これでt月は下記のようになります。
月ID
期首日
月末
1
2019/07/01
2019/07/31
2
2019/07/01
2019/08/31
3
2019/07/01
2019/09/30
4
2019/07/01
2019/10/31
5
2019/07/01
2019/11/30
6
2019/07/01
2019/12/31
7
2019/07/01
2020/01/31
8
2019/07/01
2020/02/29
9
2019/07/01
2020/03/31
10
2019/07/01
2020/04/30
11
2019/07/01
2020/05/31
12
2019/07/01
2020/06/30
下記のようなクエリを作成します。
SELECT
t商品マスタ.商品ID, t商品マスタ.商品名, t商品マスタ.期首数量, t商品マスタ.期首金額,
t月.月ID
Sum(t仕入明細.仕入数量) AS 仕入数量計,
Sum([仕入数量]*[仕入単価]) AS 仕入金額計
FROM t月, t商品マスタ INNER JOIN t仕入明細 ON t商品マスタ.商品ID = t仕入明細.仕入商品ID
WHERE t仕入明細.仕入日 Between [期首日] And [月末]
GROUP BY
t商品マスタ.商品ID, t商品マスタ.商品名, t商品マスタ.期首数量, t商品マスタ.期首金額,
t月.月ID
ORDER BY
t月.月ID;
Function 払出金額(前月金額, 前月数量, 当月仕入金額, 当月仕入数量, 当月売上数量)
払出金額 = (前月金額 + 当月仕入金額) / (前月数量 + 当月仕入数量) * 当月売上数量
End Function
Function 当月金額(前月金額, 前月数量, 当月仕入金額, 当月仕入数量, 当月売上数量)
当月金額 = 前月金額 + Nz(当月仕入金額, 0) - Nz((前月金額 + 当月仕入金額) / (前月数量 + 当月仕入数量) * 当月売上数量, 0)
End Function
:
Sum(IIf([月]=1,[仕入数量])) AS 8月仕入数量,
Sum(IIf([月]=1,[仕入金額])) AS 8月仕入金額,
Sum(IIf([月]=1,[売上数量])) AS 8月売上数量,
払出金額([7月金額],[7月数量],[8月仕入金額],[8月仕入数量],[8月売上数量]) AS 8月払出金額,
Sum(IIf([月]<=1,[仕入数量]-[売上数量])) AS 8月数量,
当月金額([7月金額],[7月数量],[8月仕入金額],[8月仕入数量],[8月売上数量]) AS 8月金額,
:
SELECT
q.商品ID,
Max(q.商品名) AS 商品名,
Sum(IIf(月=-1,仕入数量)) AS 期首数量,
Sum(IIf(月=-1,仕入金額)) AS 期首金額,
Sum(IIf([月]=0,[仕入数量])) AS 7月仕入数量,
Sum(IIf([月]=0,[仕入金額])) AS 7月仕入金額,
Sum(IIf([月]=0,[売上数量])) AS 7月売上数量,
([期首金額]+[7月仕入金額])/([期首数量]+[7月仕入数量])*[7月売上数量] AS 7月払出金額,
Sum(IIf([月]<=0,[仕入数量]-[売上数量])) AS 7月数量,
[期首金額]+Nz(Sum(IIf([月]=0,[仕入金額])),0)-Nz([7月払出金額],0) AS 7月金額,
Sum(IIf([月]=1,[仕入数量])) AS 8月仕入数量,
Sum(IIf([月]=1,[仕入金額])) AS 8月仕入金額,
Sum(IIf([月]=1,[売上数量])) AS 8月売上数量,
([7月金額]+[8月仕入金額])/([7月数量]+[8月仕入数量])*[8月売上数量] AS 8月払出金額,
Sum(IIf([月]<=1,[仕入数量]-[売上数量])) AS 8月数量,
[7月金額]+Nz(Sum(IIf([月]=1,[仕入金額])),0)-Nz([8月払出金額],0) AS 8月金額,
Sum(IIf([月]=2,[仕入数量])) AS 9月仕入数量,
Sum(IIf([月]=2,[仕入金額])) AS 9月仕入金額,
Sum(IIf([月]=2,[売上数量])) AS 9月売上数量,
([8月金額]+[9月仕入金額])/([8月数量]+[9月仕入数量])*[9月売上数量] AS 9月払出金額,
Sum(IIf([月]<=2,[仕入数量]-[売上数量])) AS 9月数量,
[8月金額]+Nz(Sum(IIf([月]=2,[仕入金額])),0)-Nz([9月払出金額],0) AS 9月金額,
Sum(IIf([月]=3,[仕入数量])) AS 10月仕入数量,
Sum(IIf([月]=3,[仕入金額])) AS 10月仕入金額,
Sum(IIf([月]=3,[売上数量])) AS 10月売上数量,
([9月金額]+[10月仕入金額])/([9月数量]+[10月仕入数量])*[10月売上数量] AS 10月払出金額,
Sum(IIf([月]<=3,[仕入数量]-[売上数量])) AS 10月数量,
[9月金額]+Nz(Sum(IIf([月]=3,[仕入金額])),0)-Nz([10月払出金額],0) AS 10月金額,
Sum(IIf([月]=4,[仕入数量])) AS 11月仕入数量,
Sum(IIf([月]=4,[仕入金額])) AS 11月仕入金額,
Sum(IIf([月]=4,[売上数量])) AS 11月売上数量,
([10月金額]+[11月仕入金額])/([10月数量]+[11月仕入数量])*[11月売上数量] AS 11月払出金額,
Sum(IIf([月]<=4,[仕入数量]-[売上数量])) AS 11月数量,
[10月金額]+Nz(Sum(IIf([月]=4,[仕入金額])),0)-Nz([11月払出金額],0) AS 11月金額,
Sum(IIf([月]=5,[仕入数量])) AS 12月仕入数量,
Sum(IIf([月]=5,[仕入金額])) AS 12月仕入金額,
Sum(IIf([月]=5,[売上数量])) AS 12月売上数量,
([11月金額]+[12月仕入金額])/([11月数量]+[12月仕入数量])*[12月売上数量] AS 12月払出金額,
Sum(IIf([月]<=5,[仕入数量]-[売上数量])) AS 12月数量,
[11月金額]+Nz(Sum(IIf([月]=5,[仕入金額])),0)-Nz([12月払出金額],0) AS 12月金額,
Sum(IIf([月]=6,[仕入数量])) AS 1月仕入数量,
Sum(IIf([月]=6,[仕入金額])) AS 1月仕入金額,
Sum(IIf([月]=6,[売上数量])) AS 1月売上数量,
([12月金額]+[1月仕入金額])/([12月数量]+[1月仕入数量])*[1月売上数量] AS 1月払出金額,
Sum(IIf([月]<=6,[仕入数量]-[売上数量])) AS 1月数量,
[12月金額]+Nz(Sum(IIf([月]=6,[仕入金額])),0)-Nz([1月払出金額],0) AS 1月金額,
Sum(IIf([月]=7,[仕入数量])) AS 2月仕入数量,
Sum(IIf([月]=7,[仕入金額])) AS 2月仕入金額,
Sum(IIf([月]=7,[売上数量])) AS 2月売上数量,
([1月金額]+[2月仕入金額])/([1月数量]+[2月仕入数量])*[2月売上数量] AS 2月払出金額,
Sum(IIf([月]<=7,[仕入数量]-[売上数量])) AS 2月数量,
[1月金額]+Nz(Sum(IIf([月]=7,[仕入金額])),0)-Nz([2月払出金額],0) AS 2月金額,
Sum(IIf([月]=8,[仕入数量])) AS 3月仕入数量,
Sum(IIf([月]=8,[仕入金額])) AS 3月仕入金額,
Sum(IIf([月]=8,[売上数量])) AS 3月売上数量,
([2月金額]+[3月仕入金額])/([2月数量]+[3月仕入数量])*[3月売上数量] AS 3月払出金額,
Sum(IIf([月]<=8,[仕入数量]-[売上数量])) AS 3月数量,
[2月金額]+Nz(Sum(IIf([月]=8,[仕入金額])),0)-Nz([3月払出金額],0) AS 3月金額,
Sum(IIf([月]=9,[仕入数量])) AS 4月仕入数量,
Sum(IIf([月]=9,[仕入金額])) AS 4月仕入金額,
Sum(IIf([月]=9,[売上数量])) AS 4月売上数量,
([3月金額]+[4月仕入金額])/([3月数量]+[4月仕入数量])*[4月売上数量] AS 4月払出金額,
Sum(IIf([月]<=9,[仕入数量]-[売上数量])) AS 4月数量,
[3月金額]+Nz(Sum(IIf([月]=9,[仕入金額])),0)-Nz([4月払出金額],0) AS 4月金額,
Sum(IIf([月]=10,[仕入数量])) AS 5月仕入数量,
Sum(IIf([月]=10,[仕入金額])) AS 5月仕入金額,
Sum(IIf([月]=10,[売上数量])) AS 5月売上数量,
([4月金額]+[5月仕入金額])/([4月数量]+[5月仕入数量])*[5月売上数量] AS 5月払出金額,
Sum(IIf([月]<=10,[仕入数量]-[売上数量])) AS 5月数量,
[4月金額]+Nz(Sum(IIf([月]=10,[仕入金額])),0)-Nz([5月払出金額],0) AS 5月金額,
Sum(IIf([月]=11,[仕入数量])) AS 6月仕入数量,
Sum(IIf([月]=11,[仕入金額])) AS 6月仕入金額,
Sum(IIf([月]=11,[売上数量])) AS 6月売上数量,
([5月金額]+[6月仕入金額])/([5月数量]+[6月仕入数量])*[6月売上数量] AS 6月払出金額,
Sum(IIf([月]<=11,[仕入数量]-[売上数量])) AS 6月数量,
[5月金額]+Nz(Sum(IIf([月]=11,[仕入金額])),0)-Nz([6月払出金額],0) AS 6月金額
FROM (SELECT
商品ID,
商品名,
-1 AS 月,
期首数量 AS 仕入数量,
期首金額 AS 仕入金額,
0 AS 売上数量,
0 AS 売上金額
FROM t商品マスタ, t決算日
union all
SELECT
仕入商品ID,
"",
(month([仕入日])+5) mod 12,
仕入数量,
仕入単価*仕入数量,
0,
0
FROM t仕入明細, t決算日
WHERE 仕入日 Between DateAdd("yyyy",-1,[決算日]+1) And [決算日]
union all
SELECT
売上商品ID,
"",
(month([売上日])+5) mod 12,
0,
0,
売上数量,
売上単価*売上数量
FROM t売上明細, t決算日
WHERE 売上日 Between DateAdd("yyyy",-1,[決算日]+1) And [決算日]
) AS q
GROUP BY q.商品ID;
Private Sub コマンド25_Click()
Dim a As String
a = MsgBox("請求書履歴に登録しますか。はいを押すと請求書履歴に保存されます。", vbOKCancel)
If a = vbCancel Then
MsgBox ("中止しました")
Exit Sub
End If
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim rs1 As DAO.Recordset
'Connectionは一つで共有する
Set DB = Application.CurrentDb
Set rs = DB.OpenRecordset("Q_月間請求書履歴", dbOpenForwardOnly, dbReadOnly)
Set rs1 = DB.OpenRecordset("T_seikyu", dbOpenDynaset, dbAppendOnly)
Do Until rs.EOF
'"月間請求書履歴"(rs)のデータを"データ"(rs1)に新規追加
rs1.AddNew
rs1!請求書NO = rs!請求書NO
rs1!請求日 = rs!請求日
rs1!会社名 = rs!会社名
rs1!氏名 = rs!氏名
rs1!現場名 = rs!現場名
rs1!工事名 = rs!工事名
rs1!請求金額 = rs!請求金額
rs1.Update
'"月間請求書履歴"(rs)を次レコードへ移動
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
rs1.Close
Set rs1 = Nothing
DB.Close
Set DB = Nothing
DoCmd.OpenForm "F_seikyu"
End Sub
Public Sub SetSchedule()
Dim i As Integer
For i = 1 To 42
Me("T" & i).Caption = ""
Me("G" & i).Caption = ""
Next
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset( _
"SELECT 開始日, 終了日, 件名 FROM T_予定 WHERE " & _
"終了日>#" & FirstDay & "# AND 開始日<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
Dim BeginI As Long
BeginI = rs!開始日 - FirstDay
If BeginI > 0 Then
Me("T" & BeginI).Caption = rs!件名
Else
Me("T1").Caption = rs!件名
End If
If Not IsNull(rs!終了日) Then
If BeginI > 0 Then
Me("G" & BeginI).Caption = ChrW(8656) '"←"
Else
BeginI = 0
End If
Dim EndI As Long
EndI = rs!終了日 - FirstDay
If EndI <= 42 Then
Me("G" & EndI).Caption = Me("G" & EndI).Caption & ChrW(8658) '"→"
Else
EndI = 43
End If
For i = BeginI + 1 To EndI - 1
Me("G" & i).Caption = "="
Next
End If
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
Public Sub SetSchedule()
Dim i As Integer
For i = 1 To 42
Me("T" & i).Caption = ""
Me("G" & i).Caption = ""
Next
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset( _
"SELECT 開始日, 終了日, 件名 FROM T_予定 WHERE " & _
"開始日>#" & FirstDay & "# AND 開始日<=#" & FirstDay + 42 & "#", _
dbOpenForwardOnly, dbReadOnly)
Do Until rs.EOF
Dim BeginI As Long
BeginI = rs!開始日 - FirstDay
Me("T" & BeginI).Caption = rs!件名
If Not IsNull(rs!終了日) Then
Dim EndI As Long
EndI = rs!終了日 - FirstDay
Me("G" & BeginI).Caption = ChrW(8656) '"←"
Me("G" & EndI).Caption = Me("G" & EndI).Caption & ChrW(8658) '"→"
For i = BeginI + 1 To EndI - 1
Me("G" & i).Caption = "="
Next
End If
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
End Sub
Accessでできないことはないです。
が、かなりの高度なスキルが必要です。
質問内容から想像するにめいさんが、そのような高度なスキルをお持ちとは思えません。
いちどソフト屋さんに見積もりを出してみてください。かなりの金額のシステムになると思います。
このような掲示板で扱える案件でもありません。
ご連絡ありがとうございます。
こちらのURLのような伝票を印刷したいと考えております。
https://goqsystem.com/ittaigata
送り状はCSVですが、明細書はPDFで、Accessを使用して1枚の伝票に印刷したいと考えております。
どなたかお分かりでしたら、方法を教えて下さい。
hirotonさん、サポートありがとうございます。
ItemsSelected はインデックスが入るのでした。あと、コピペミスもしてました。
うしねこさん、hirotonさんの回答を参考に修正してください。
CSV と PDF ってまったくジャンルの違うものですが、それを「1枚の伝票に印刷したい」とは、まったく意味が分かりません。もう少し具体的に説明してもらえませんか。
2020/04/08 の私の回答の方法を一度試してみてください。
集計期間の日付を更新クエリで t月 に生成しますので、それを使って集計するようにします。その為に、式はシンプルになります。2つめのクエリで月次移動平均の計算に必要なデータは揃うと思いますので、それに必要な式を追加すればできると思います。
hirotonさん
返信ありがとうございます。
商品数が数百と仕入売上で数千レコードあるのでやはり難しそうですね。
商品別に仕入数量、仕入金額、売上数量をまとめてVBAで金額部分を計算という方法でやってみようと思います。
エクセルでVBAをちょっと触ったくらいの知識しかないので、時間がかかるかもしれませんがまた相談させてください。
hatenaさん
返信ありがとうございます。
月次移動平均は下記の計算方法になります。
・期首在庫数量
・期首在庫金額
・7月仕入数量
・7月仕入金額
・7月払出数量
・7月払出金額 → (期首在庫金額+7月仕入金額)/(期首在庫数量+7月仕入数量)× 7月払出数量
・7月在庫数量 → 期首在庫数量+7月仕入数量-7月払出数量
・7月在庫金額 → 期首在庫金額+7月仕入金額-7月払出金額
毎月の在庫金額が前月の在庫金額を元に計算してしまうので複雑になってしまうという事ですね。
これで
Itm
に入るのはリストのインデックスになってますね。ItemsSelected プロパティ (Access)(インデックスを入れる変数名にItmを使うのはなんかやだなぁと思ったけどリンク先の例文も
varItm
だった・・・)あと
VBEのオプション設定のお勧めを徹底解説
VBA触るなら読まないと損するページです。
つまらないミスをなくすためにも変数宣言の強制を。
貼り付けます。
選択数: 4
strFilter: 製品コード In ('0','1','3','5')
Form.Filter: 製品コード In ('0','1','3','5')
選択数: 3
strFilter: 製品コード In ('0','1','3')
Form.Filter: 製品コード In ('0','1','3')
選択数: 3
strFilter: 製品コード In ('0','1','2')
Form.Filter: 製品コード In ('0','1','2')
選択数: 3
strFilter: 製品コード In ('0','1','2')
Form.Filter: 製品コード In ('0','1','2')
コードに下記のようにデバッグ用のコードを埋め込んでください。
その後、フォームを開いて、リストボックスでリストを複数選択して、フィルタ適用ボタンをクリックします。
次に、Ctrl+G でイミディエイトウィンドウを開いて、そこに出力されているテキストをコピーしてここに貼り付けてもらえますか。
hatenaさんありがとうございます。
顧客ID:数値型
製品コード:テキスト型
コード提示いたします。
デバッグをしてみたところ、 Itmがemptyになっていることに気が付きました。
サブフォームになにも表示されなくなってしまう件と
なにか関係がありますでしょうか・・・?
‘‘‘Private Sub フィルタ適用ボタン_Click()
Dim strFilter As Variant 'フィルタ文字列
Dim trFilter As Variant
'製品用フィルター生成
Dim Itm As Variant
For Each Itm In Me![製品リストbox].ItemsSelected
strFilter = strFilter & ",'" & Itm & "'"
Next
If strFilter = "" Then
MsgBox "製品をリストから選択してください。"
Exit Sub
End If
strFilter = "製品コード In (" & Mid(strFilter, 2) & ")"
'顧客用フィルター追加
If Me!コンボID <> "" Then
trFilter = "顧客ID=" & Me!コンボID & " AND " & strFilter
End If
If strFilter <> "" Then
Me![販売実績サブ].Form.Filter = strFilter
Me![販売実績サブ].Form.FilterOn = True
End If
End Sub‘‘‘
では、まず、私の回答のコードを参考にして、実際に書いたコードを提示してください。
あと、顧客ID と 製品コード のデータ型も教えてください。(数値型か、テキスト型か)
hatenaさんありがとうございます。
が、しかし、エラーは出なくなったのですが、
フィルタ適用ボタンを押してもサブフォームになにも出てこなくなってしまいました 泣
(フォームを開いたときはすべてのデータが表示されるのですが、
その後顧客IDを選んで、製品コードを選んで、「フィルタ適用」を押すとなにも表示されなくなってしまいます。)
あっ、すみません。間違てますね。下記に修正してください。
strFilter = "顧客ID=" & Me!cb顧客 & " AND " & strFilter
元の回答も修正しておきます。
hatenaさんありがとうございます!
早速試したのですが、
strFilter = "顧客ID=" & Me!cb顧客 & " AND " strFilter
ここで「構文エラー」になってしまいます・・・泣
hatena様
早速のご回答ありがとうございます。
ご指導頂きましたようにやると集計が出来ました。
数日悩んでいたので目からうろこが落ちる思いです。
本当にありがとうございました。
下記のような取引国マスターを作成します。
クエリを作成して、元テーブルと取引国マスターを取引国コードで結合します。
集計クエリにして、企業名、企業コード、地域コード、地域名 でグループ化して、取引件数を合計にすればご希望の結果になります。
下記のような仕様だと仮定した場合のコード例
顧客を選択するコンボボックス
名前 cb顧客
連結しているフィールド 顧客ID(数値型)
上記で仕入関係のデータは得られます。移動平均もクエリ内で計算できると思います。
同様に、売上関係のデータを出力するクエリを作成します。
2つのクエリを[月ID]で結合すれば月別の移動平均データができると思います。
月別データが縦に並びますが、もし、横に並べないなら、クロス集計クエリで横並びに変換できます。
ちょっと考えてみました。
まず、下記のようなテーブルを作成します。
テーブル名 T月
月ID に 1 から 12 までの数値を入力します。
下記の更新クエリを実行します。
これでt月は下記のようになります。
下記のようなクエリを作成します。
これで移動平均を計算できるデータは揃うと思いますがいかがでしょうか。
実際のデータでの確認はしてませんので、見落としがあるかもしれません。
考え方を参考にしてください。下記のような考え方です。
「月次移動平均」というのを知らなかったのと、hirotonさんの回答が付いたので、お任せしてましたが、なかなか苦労してますね。
「月次移動平均」というものをちょっと調べてみましたか、下記の理解であってますでしょうか。
期首日からのある月までの合計金額を合計数量で割ったもの。
つまり、今回は6/30が決算日のようですので、
7月度移動平均は、(期首金額+7月金額計)/(期首数量+7月数量計)
8月度移動平均は、(期首金額+7月~8月金額計)/(期首数量+7月~8月数量計)
9月度移動平均は、(期首金額+7月~9月金額計)/(期首数量+7月~9月数量計)
・・・
ということでよろしいでしょうか。
ということなら、そのデータベースのファイルを送付してもらえますか。
右カラムの一番下に「ファイル送信フォーム」のリンクがありますので、そこから送信してください。
内容を確認して、ここにファイルリンクを置きますので、だれでもダウンロードしてそれをもとに実験できますので、的確な回答が付きやすいと思います。
複数選択可能なリストボックスを使ったうんぬんってそれなりに高度な内容(だと思っている)ので本題との難易度の差がどこで躓いているのかよくわからんです
Filter プロパティ (Access)
FilterにはWHERE句と同等の文字列を設定する(てきとー)なので
のようになるよう
strFilter
を作ってあげれば良いです現象を確認しました。
hirotonの上げた構文は8月以降の式が想定と異なっていたためエラーにならなかったようです。
いろいろ試してみましたが、一時テーブルを作成して、「n月金額」部分のみ計算させるような(sumもiifもnzもない)クエリを作っても11か月以上同時に表示しようとするとエラーが発生してしまいました。
フィールドを順次参照していることと、そのフィールドが計算式になっていることが重なって「複雑」となるようですが、明確な条件はわかりませんでした。
いろいろやってみたところ、クエリでの計算を減らすとなんとかなることもあるようでした。例えば標準モジュールに以下のユーザー定義関数を作成し、クエリ上の計算式を置き換えます。
ただ、表示までこぎつけても、数件のテストデータだけでも表示までにそれなりの時間がかかっていたので、実用できるかはちょっと疑問です。「複雑すぎ」ると言われるのも納得かなと
金額計算部分がフィールドを繰り返し参照する重い処理になっているので、出力用のテーブルを事前に作成しておいて金額部分以外を出力したのち、VBAで金額部分を計算させるのがいいんじゃないのかなぁと思いました
下記で紹介している関数を使って、18インチモニターの時は縮小するようにすればどうでしょうか。
フォーム上のコントロールのサイズを拡大/縮小する関数 - hatena chips
もう、見てないようなので閉じます。
閉じます(凍結)。
解決済みということで、閉じます(凍結)。
解決したようなので閉じます。
できました。本当に助かりました。DAOの方も、少し勉強したいと思います。
ありがとうございました。
早々にご対応いただき有難うございます。
イメージしていたコードより思いの外複雑でしたが、勉強になりました。
今後ともよろしくお願いいたします。
新たにデータベース、テーブルを作成し、レコードを数行入力して下記コードで実行してみましたが
10か月未満では表示できましたが、それを超えると表示できなくなってしまいました。
何か他に原因があるのでしょうか。
おはようございます。今回は届いていました。
動化確認してみましたら、確かにそのエラーがでますね。クエリも普通に開けるので特に問題はないですね。
ためしに、ADODBの処理をDAOに書き直してみましたら、エラーなく実行できるようになりました。
なぜ、ADODBでは失敗するのかは原因が分かりませんが、DAOの方がAccessのテーブルとは相性がいいと思います。
カレンダーの範囲をまたぐときにも対応できる様に処理を追加しました。
下記がサンプルファイルです。
FrmCalendar2.zip
おはようございます。送信致しました。今回は届いていると思います。よろしくお願いします。
早速のお返事有難うございます。
上記コードを理解できるように努めてみます。
追伸;
ちなみに月跨ぎの場合はエラー表示が出ました。
例えば、
月マタギの”2月”を表示した瞬間、”G59”フィールドが見つかりません。
日付をクリックすると”T43870”フィールドが見つかりません。というのもでした。
お時間の都合が付きましたら、教えていただけると幸いです。
ガントチャート表示用のラベルを42個、予定表示のラベルの下に配置してください。
名前は、G1 ~ G42 とします。
文字配置は「中央」にしておくといいと思います。
SetSchedule関数を下記のように修正してください。
これで表示できると思います。
ただし、月またぎの予定は考慮してないので、現状のままだとエラーになるか、表示できないと思いますので、
その辺を考慮した処理を追加する必要があります。
今日のところはここまでで。明日、時間が取れたら、月またぎの部分のコードを追加します。
Furuさんの方でもまずは上記のコードの内容を理解して、可能なら月またぎの処理も考えてみてください。
ご返信有難うございます。
基本的に1日に複数の予定を入れることは無いです。
テーブルのデータはまだ勉強中というのもあり簡素化しています。
"開始日","終了日","件名","備考"
のみです。
よろしくお願いいたします。
mikamiさん、まだファイルが届いてません。送信に失敗しているかもしれませんので、もう一度送信してもらえますか。
それなら比較的に簡単にできそうです。
1日に複数の予定が入ることはないですか。
テーブルのデータ例を何レコードか提示していただけたら、サンプルコードを提示できると思います。
ご返信有難うございます。
ちなみに↑の場合は、単純に”件名”ラベルの中に打ち込む感じでも可能と思っていますが、
コチラのイメージ的には別ラベルで、例えば、エクセルで作成できるガントチャートのような
感じでした。
フォーム内 指定日(”開始日”)をクリックし、予定を入力すると別ラベルに”←”が表示され、
”終了日”を入力すると、別ラベル中間日に”=”と最終日に”→”が表示されるイメージです。
4月
| 1日 | 2日 | 3日 | 4日 | 5日 |
| 出張 | | | | |
| ← | = | = | = | → |
どのようなVBAを使用すると可能になるかをご教示いただけると幸いです。
すみません。計算式を間違えていました。
見えてる範囲の(画像の)データを作成し試していますが、NZ追加、月算出方法の変更を掛けてもこちらでは問題なく表示がされます。
ということですが、表示できなくなるのは質問同様半年を超えたあたりということでしょうか?
クエリで表示月を減らすと表示されますか?
新規にACCESSファイルを作り、テストデータを作ってみるとどうですか?