- 締切済み
アクセスまたは他のオフィスソフトで
hatena1989の回答
- hatena1989
- ベストアンサー率87% (378/433)
アクセスで、下記のテーブルを作成します。 テーブル名 テーブル1 フィールド 氏名 テキスト型 日付 日付/時刻型 数量 数値型 累計 数値型 ここにデータを読み込みます。この時点では累計は空白です。 下記の関数をコピーして標準モジュールに貼り付けます。 '累計を入力する関数 '引数 Expr:累計の対象となるフィールド名またはフィールドを使用した式 ' FieldName:連番を格納するフィールド名(データ型は数値型または通貨型) ' TableName:対象のテーブル名またはクエリ名(パラメータクエリは不可) ' GroupBy:グループ化するフィールド名(省略可能) ' 複数フィールドをカンマ区切りで指定可能 ' 省略した場合は全レコードを通しての連番になります。 ' Orderby:並べ替えするフィールド名(省略可能) ' SQLのORDER BY句内の式と同一 ' 省略した場合は並び順は不定になります。 ' WhereCondition:抽出条件式(省略可能) ' SQLのOWHERE句内の式と同一 ' 省略した場合は全レコードが対象になります。 ' KeepInitialValue:先頭フィールドを初期値の設定(省略可能) ' True グループの先頭レコードの値を初期値として以降それに加算 ' False 先頭レコードの累計値を0にリセットしてから加算(既定値) '使用上の注意: DAO ライブラリへの参照設定が必要です。 Public Function SetCumulativeTotal( _ Expr As String, _ FieldName As String, _ TableName As String, _ Optional GroupBy As String, _ Optional Orderby As String, _ Optional WhereCondition As String, _ Optional KeepInitialValue As Boolean) As Boolean Dim rs As DAO.Recordset Dim ct As Currency, GCnt As Long, i As Long Dim strSQL As String, strOrderby As String Dim v() As String Dim flgBreak As Boolean On Error GoTo ErrHdl SetCumulativeTotal = True 'SQL文生成 strSQL = "SELECT " & FieldName & ", " & Expr 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) '連番書き込みループ flgBreak = True Do Until rs.EOF For i = 0 To GCnt If v(i) = rs(i + 2) Then Else flgBreak = True v(i) = rs(i + 2) End If Next If flgBreak Then flgBreak = False If KeepInitialValue Then ct = rs(0) Else ct = rs(1) End If Else ct = ct + rs(1) End If rs.Edit rs(0) = ct rs.Update rs.MoveNext Loop Ext: On Error Resume Next rs.Close Set rs = Nothing Exit Function ErrHdl: MsgBox Err & ":" & Err.Description SetCumulativeTotal = False Resume Ext End Function 下記のコードを実行します。 If SetCumulativeTotal("数量","累計","テーブル1","氏名","日付") Then MsgBox "完了" End If 「完了」というメッセージボックスが表示されたら、テーブルに累計が書き込まれています。 「累計を入力する関数」でWEB検索するとより詳しい解説ページが見つかるかも。
関連するQ&A
- こんな関数お願いします
こんな関数お願いします ドングリを拾った数の合計 Excel2003です、A列 月日 B列 氏名 C列 数量 行は2~60 氏名はA君B君C君D君です、 シート2のA列に氏名 B列に合計数量です。 B列の合計数量セルの関数式をお願いします、 シート1に記入するとシート2のB列に合計数量が出る方法A君でお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルでの表作成(関数)について
エクセルにて、添付画像のような表を作りたいと思っています。 A列に日付、B列に時間数、C列に累計です。 C列に累計を出したいのですが、B列に時間数を入力した時のみ、C列に累計が表示されるにはどうしたら良いのでしょうか。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELでうまく反映させたい
A列に名前、B列に数、C列に日付が入っています。 それが100行あります。 D列以降の1行目にに7/1から7/31まで日付が入っていて、A列からC列までをD列の2行目から100行目までに反映させて、表を作りたいと思っています。 A・B列・C列にそれぞれ名前や数、日付を入れるとD列以降の日付の下に必要な数量が入るように数式を作る方法はありますか? A・B・C列は専用端末からデータを持ってくるので、その度にD列以降を手で作るのは大変です。A・B・C列だけだと、見た目に見づらいので何日にいくつ(数)必要かを一目で見られるようにしたいのです。 何かいい方法を思いつく方いらっしゃいますか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 今あるリストから条件に合ったものを別シートに書き出したい!【Excel2002】
Excelで下記のような在庫管理表があります。 A列 B列 C列 D列 E列 F列 G列 ---------------------------------------------------------------------- 1 品名 発売日 項目 9/20 9/21 9/22 9/23 2 (火) (水) (木) (祝) ---------------------------------------------------------------------- 3 A 09/20 日初在庫数 4000 3900 3750 3640 4 A 09/20 販売予測数 100 150 110 120 5 A 09/20 販売予測累計100 250 360 480 6 A 09/20 仕入数 0 0 0 0 7 B 09/20 日初在庫数 5000 4800 4550 4360 8 B 09/20 販売予測数 200 230 250 190 9 B 09/20 販売予測累計200 430 650 840 10 B 09/20 仕入数 0 0 0 0 G列より右以降は、発売開始から90日目までのデータが入っています。 10行目以下は、商品C・D・E・F...と、約10種類の商品がAやBと同じような形式で続いています。 このリストをもとにして、下記の条件を満たす商品の必要データを 自動的に別シートに書き出したいのです。 抽出条件は、 ・発売開始から64日目の日初在庫がゼロ以下の商品 抽出したいデータは、 ・品名:A列そのまま ・日付:日初在庫が1500を切る日。 但し、この日付が土・日・祝日の場合は、1つ手前の営業日。 ・数量:発売開始から64日目の日初在庫数の絶対値。 書き出したい形式は、↓のようなイメージです。 A列 B列 C列 D列 品名 記号 日付 数量 関数でできますでしょうか? それともマクロになるのでしょうか?? 教えて(助けて)頂けると、本当に嬉しいです。 分かりにくい説明&リストで恐縮ですが、よろしくお願いします。
- 締切済み
- オフィス系ソフト
- AccessのデータをExcelに貼り付け
AccessのデータをフィルターしてExcelに貼り付けるには、AccessとExcelのどちらのVBAを使えば良いでしょうか。 前提:Accessに10フィールド100行くらいのデータがあり、Excelに氏名と日付を入力する欄がある。 処理:AccessのデータをExcelに入力した氏名と日付でフィルター(AND検索)→フィルターしたままExcelに貼り付け→そのデータをExcelの関数とVBAで処理(複雑な関数なのでAccessで処理できない)
- 締切済み
- Access(アクセス)
- エクセルの表作成(関数)について2
先ほども、表作成について質問させていただき、大変ありがとうございました。 再度、エクセルにて、添付画像のような表を作りたいと思っています。 A列に日付、B列に時間数1、C列に時間数2、D列に累計です。 D列に累計を出したいのですが、B列とC列のどちらかか、片方に時間数を入力した時のみ、D列に累計が表示されるにはどうしたら良いのでしょうか。 時間数の入力のない欄は、空白となります。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- ACCESSで計算をさせたい。
お世話になっています。 早速ですが、ACCESS2003でテーブルに入力した数字がエクセルのように結果を出し残すことはできるのでしょうか? テーブルでは計算ができないのでクエリでやるとしたらどのようにしたらいいでしょうか? 数量(A1)×単価(B1)=金額(C1)というC1の計算結果もレコードに保存できるものでしょうか? フォームではもちろん入力した数字を計算させることはできるのですが、その結果をレコードに残して行きたいと思っています。 どうかよろしくお願い申し上げます。
- ベストアンサー
- オフィス系ソフト
- ピボットテーブルの仕方
お世話になりますよろしくお願いします。 ピボットテーブルなかなかできませんよろしくお願いします。 1行目に日にち 2行目に曜日 3行目に何をしたか A列にコードナンバー B列に氏名 AH列に区分 8/1 8/2 8/3 8/4 ・・・区分 1 Aさん 1 2 1 3 ・・・ A 2 Bさん 2 1 3 3 ・・・ B 3 Cさん 3 1 0 0 ・・・ A 4 Dさん 1.1 1 1 9 ・・・ C 5 Eさん 2.1 0 8 2.2 ・・・ A : : : : : : : 226 8 0 0 1 0 227 8.1 0 0 0 0 0 228 8.2 0 0 0 0 0 229 8.3 0 0 0 0 0 230 9 0 0 0 A 0 218から230まではカウントイフを使っています。 お聞きしたいのは 区分Aのひとが8/1に1を取った数を調べたいと思っています。 同様に区分Bの人が8/1に2・・3・・4と 日付ごとに出したいと思っています。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- エクセル2000でこんなことはできますか?【初歩的な質問ですみません。】
Sheet1の入力 (1) B4に5000が入力されています。 (2) B7から2006/10/6、B8に2006/10/5、B9に2006/10/4・・・のようにB506まで日付の新しい順に並んでいるものとします。 B7 2006/10/6 B8 2006/10/5 B9 2006/10/4 (3) C7からは4桁の任意の数がC506まで並んでいるものとします。 C7 7685 C8 2394 C9 1542 ・ ・ C506 6473 Sheet2の入力 (1) A列にはA2から1~9999まで入力されているものとします。 A2 1 A3 2 A4 3 ・ ・ ・ A10000 9999 (2) B列には日付、C列には任意の数が入力されているものとします。 B C 2 2006/6/8 120 3 2006/1/24 457 ・ ・ 10000 2005/12/3 6750 (3) D列には日付、E列にも任意の数が同様に入力されているものとします。 【Sheet1に次のような作業列を関数で作りたいと思いますができるのでしょうか。】 Sheet1のB4に入力されている数をSheet2のA列から抽出しその行すべてをSheet1のB5から右側に表示する。 まだ先は続きますが、さしあたり上記の疑問につきましてお分かりの方がいらっしゃいましたら、ご教示をお願いします。
- ベストアンサー
- オフィス系ソフト
- マクロの条件別分岐について
集計表のマクロを作成しています。 その際に条件によって、使用するマクロを使い分けたいと思っていますが上手くいきません。 次のように、E列に倉庫コード・G列に数量が表示されている書式を使用しています。 (例) (E列)(G列) 1 22B 0 2 31A 1 3 54A 0 4 456 40 5 65C 41 6 32B 60 7 33A 40 ※1行目から300行目まで文字が投入される可能性があります。 そして、次の条件によって、使用するマクロを分岐したいと思っています。 「1」.E列で文字列"B"が含まれている かつ その行のG列の数量が1以上 の組み合わせがある 「2」.E列で文字列"B"が含まれていない かつ その行のG列の数量が1以上 の組み合わせがある 「1」「2」2つの条件に当てはまる場合は「a」の処理 「1」の条件にのみ当てはまる場合は「b」の処理 「2」の条件にのみ当てはまる場合は「c」の処理 (「1」「2」のどちらにも当てはまらない場合は無いので省略) ちなみに処理の内容は次のとおり 「a」:A・B2つのピボットテーブルを作成する 「b」:Bの1つのピボットテーブルを作成する 「c」:Aの1つのピボットテーブルを作成する 例の場合の処理は次のようになります。 ●1行目はセル(E1)は"B"が含まれているが、セル(G1)の数量が 1以上ではないので、「1」にも「2」にも当てはまらない。 ●2・4・5・7行目はE列に"B"が含まれていなくて、G列が 1以上なので「2」の条件 ●3行目はE列に"B"が含まれていないものの、G列の数量が 0なので「1」にも「2」にも当てはまらない。 ●6行目はE列に"B"が含まれていてセル(G6)の数量が1以上 なので「1」の条件 よって「1」「2」のそれぞれにあてはまる行があるので「a」の処理を行う。 セル範囲(E1:G300)の全ての行に関して上記の「1」「2」の条件に当てはまるか検索して、それぞれ当てはまった条件によって「a」「b」「c」の処理を行うようにしたいです。 (例)の場合だったら 6行目まで検索した時点で「a」の処理が決定します。 Select Case のマクロを使用したら良いと思ったが、どのようにマクロを記述したらよいのか解らないので教えていただけると助かります。 イメージとしては Select Case (1から300行目で「1」と「2」の条件に当てはまる行がある場合) 処理「a」を行う。 Select Case (1から300行目で「1」の条件に当てはまる行はあるが「2」の条件にあてはまる行はない場合) 処理「b」を行う。 Select Case (1から300行目で「2」の条件に当てはまる行はあるが「1」の条件にあてはまる行はない場合) 処理「c」を行う。 というところまではわかりますが、括弧の中の記述方法が分かりません。あるいは別の処理があれば教えていただけると助かります。
- ベストアンサー
- オフィス系ソフト