こちらでは初めて質問させていただきます。
Accessは簡単なマクロとVBを作ったことがあるくらいの初級者です。
■やりたいこと
複数月にわたる場所貸しの日数を求め、その売上を月ごとに集計したい。(場所代は毎日一定で、日にちによる変化はありません)
■詳細
現在、テーブルには「開始日」「終了日」「売上」の項目があります。
売上は、開始日から終了日までの日数を出し、その日数で割って算出したいです。(端数は最後の日に上乗せします)
例えば、
「開始日」 「終了日」 「売上」
2009/04/20 2009/06/03 1,000,000
のような場合、日数はDatediff関数で求めれば良いと思うのですが、
「4月の売上のみ集計」「5月の売上のみ集計」といった場合の
算出の仕方がわかりません。
例えば4月は11日間、5月は30日間、6月は3日間となり、100万円をそれぞれの日数分で割れば良いと思っています。
こういったデータから、月ごとの集計を出すのにはどのようにすれば良いでしょうか?
Accessのフォームには「2009/06」などや、「2009/06から6ヶ月分」などのように入力して算出する予定です。
わかりづらい内容がございましたら補足させていただきます。
何卒宜しくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
アクセスの処理方法の
(1)クエリ操作や関数
(2)SQL
(3)モジュール
のうち
(1)は多分無理かと思う。
(2)SQLで解決するのも、難しいと思う。それで(3)でやってみたまた、結果のアウトプットは、レポートでは非連結では難しそうなので、EXCELを使うことにした。これでは初めからEXCELにエクスポートして、EXCEL関数やVBAでやるほうがよいかもしれないが。
ーーー
私のテスト例
社員2.mdbと言うmdbがあり、「室料」と言うテーブルを作った。
データは
ID開始日終了日室料計
12009/04/202009/06/031000000
22009/03/052009/06/232000000
32008/12/212009/03/053000000
を作った。
ーーー
モジュールに
Sub test013()
Dim oExl As Object
Dim oExlBook As Object
'Excelファイルオープン
Set oExl = CreateObject("Excel.Application")
oExl.Application.Visible = True
Set oExlBook = oExl.Application.Workbooks.Open("C:\Documents and Settings\XXXX\My Documents\test01.xls")
k = 2
'---
Dim moji As String
Dim URL As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "室料", cn, adOpenStatic, adLockPessimistic
'---------
If rs.RecordCount = 0 Then
MsgBox "該当するレコードは存在しません"
Else
Do
oExlBook.sheets("Sheet3").range("A" & k) = rs.Fields("開始日")
situttl = rs.Fields("室料計")
sy = Year(rs.Fields("開始日"))
sm = Month(rs.Fields("開始日"))
sd = Day(rs.Fields("開始日"))
st = rs.Fields("開始日")
ed = rs.Fields("終了日")
tns = ed - st + 1
'---
For i = 1 To 120
matu = DateSerial(sy, sm + i, 0)
If matu < rs.Fields("終了日") Then
oExlBook.sheets("Sheet3").range("B" & k) = matu
ns = (matu - st + 1)
oExlBook.sheets("Sheet3").range("C" & k) = matu - st + 1
oExlBook.sheets("Sheet3").range("D" & k) = Int(situttl * ns / tns + 0.5)
st = DateSerial(sy, sm + i, 1)
Else
oExlBook.sheets("Sheet3").range("B" & k) = rs.Fields("終了日")
oExlBook.sheets("Sheet3").range("C" & k) = (rs.Fields("終了日") - st + 1)
ns = (rs.Fields("終了日") - st + 1)
oExlBook.sheets("Sheet3").range("D" & k) = Int(situttl * ns / tns + 0.5)
GoTo p1
End If
k = k + 1
oExlBook.sheets("Sheet3").range("A" & k) = matu + 1
Next i
p1:
rs.MoveNext
k = k + 1
oExlBook.sheets("Sheet3").range("B" & k) = "-----"
k = k + 1
Loop Until rs.EOF
End If
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
'----
'Excel終了
oExlBook.Close True
oExl.Application.Quit
Set oExlBook = Nothing
Set oExl = Nothing
End Sub
を作った。
test01.xlsは白紙(データなし)のものを作っておく。
実行するとEXCELのシートに(Sheet3)
A列 B列 C列 D列
2009/4/20 2009/4/30 11244444
2009/5/12009/5/31 31688889
2009/6/12009/6/3 366667
-----
2009/3/52009/3/31 27486486
2009/4/12009/4/30 30540541
2009/5/12009/5/31 31558559
2009/6/12009/6/23 23414414
-----
2008/12/21 2008/12/3111440000
2009/1/12009/1/31 311240000
2009/2/12009/2/28 281120000
2009/3/12009/3/5 5200000
-----
A,B列は書式を「日付に設定しておく。
パスのXXXXは私に場合ユーザーIDです。
内分割計算(シェア計算)しているので、合計が1ぐらい合わない場合が出るが、丸めのことは考慮してない。
For i = 1 To 120の120はとりあえずテストでの限界になっているので注意してください。
No.2
- 回答日時:
具体的なテーブルの構造が分からないので、場所貸し案件毎に、なんらかのIDがあるとして、別にID、年月、当月貸与日数、場所代IDといったテーブルを作り、VBAで1レコードずつ変換してやって、変換先のテーブルで集計する事くらいしか思いつきません。
変換はエクセルでやる方が楽でしょう。特定の1年に限定すれば、ユーザー定義関数を作ってやって、クエリでできない事もないかもしれませんが、年がまたがると思うので、フィールド数が不定で現実的ではないでしょうね。
mitarashi様、書き込みありがとうございます。
会社でしかこのサイトが見られないため、お礼が遅くなってしまって申し訳ありません。
やはりクエリなどだけでは難しいということですね。
1件ごとにデータを取り出すたびになんらかの処理を入れるという方向で考えてみたいと思います。
良いヒントをいただきました!!
ありがとうございますm(__)m
No.1
- 回答日時:
とりあえず「開始日」 「終了日」
の間の日を1日1レコードにします。
テーブルsuujiを数字0~9で新規作成
これで45レコードつくります。
あとは。。。。
umazanpai様、早速の書き込みを頂き、有難うございます!
会社でしかOKWEBを見られないため、お礼が今日になってしまったことをお許しください。
この画面には画像も付けられるんですね!驚きました。
わかりやすいように付けてくださってありがとうございます。
書き込みしてくださった内容をこれからよく見て、チャレンジしてみたいと思います。
また結果を書き込みさせていただきます。
簡単ではございますが、まずはお礼まで‥m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- Excel(エクセル) EXCELピボットテーブル関数について 2 2023/04/10 20:35
- Excel(エクセル) エクセルで最初に値が入っているセルを見つける方法はありますか? 2 2023/07/18 14:58
- その他(ビジネス・キャリア) 事業復活支援金の事前確認での売上高チェックについて 2 2022/03/26 13:47
- 財務・会計・経理 【仕訳】集計されて引かれる販売手数料について 5 2023/04/26 15:32
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- Excel(エクセル) エクセルで、未来の月の数値を表示させないようにしたい 1 2022/05/07 18:58
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2000で複数のクエリをフ...
-
エクセルのピボットで、集計値...
-
【アクセス】クエリで、行と列...
-
Access2003 クロス集計クエリ...
-
Access 構成比 クエリ集計
-
ピボットでの時間集計
-
【アクセス】空白があると集計...
-
Access レポートに合計を表示
-
差込印刷での全角表示について...
-
日付型のフィールドに空白を入...
-
アクセスのエラー「クエリには...
-
SQL文で パラメータが少なすぎ...
-
2つのテーブルに共通するレコ...
-
ACCESS 重複データを1...
-
Accessで、1つの項目に複数の...
-
アクセスで追加した項目に全て...
-
accessでクエリの結果だけをリ...
-
ACCESS 「パラメータの入力」...
-
テキストボックスにクエリ結果...
-
Accessのテーブルのフィールド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ピボットでの時間集計
-
Accessのクロス集計から構成比...
-
【アクセス】クエリで、行と列...
-
エクセルのピボットで、集計値...
-
Excelで売上げデータの中の任意...
-
Access2003 クロス集計で集計値...
-
Access 条件に合うレコード数を...
-
ACCESS2000で複数のクエリをフ...
-
【アクセス】空白があると集計...
-
Access 構成比 クエリ集計
-
年齢層で集計したい
-
accessクエリでのクロス集計に...
-
アクセスの集計クエリの件
-
SUMIFS関数とDSUM関数の違いに...
-
Accessの更新クエリについて質...
-
クロス集計の日付表示について
-
統計学 ファイ係数
-
access2010 クロス集計後の計算...
-
Access2007の集計クエリで演算...
-
Accessで、複数月にわたる売上...
おすすめ情報