[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同一セルに入力して累積表示させたい(複数のセル) マクロ』(勇者おひょい)
お世話になります。
エクセルのセルに数字を入力したあと、もう一度同じセルに数字を入力すると累積されるようにしたいのです。
それを、C5〜P96まですべてそれぞれのセルごとに累積できるようにしたいのですが、何か方法があるのでしょうか。
ご教示よろしくお願いします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
マクロにすれば出来ないことはありませんが、やめたほうがよいと思います。 入力を別のセルにして、表示させたいセルは計算式で求めるなど、やり方を変えることはできませんか? (稲葉) 2017/08/29(火) 16:35
(勇者おひょい) 2017/08/29(火) 16:53
分かりました。 ちょっと作ってみますが、
この >ですが今回の作成に当たり累積する方法が浅はかな自分ではその方法がベストだと思いました。 背景というか、「なぜそのようなやり方で累積しなければいけないのか」を教えて頂けますか?
(稲葉) 2017/08/29(火) 16:56
Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range
If Intersect(Target, Range("C5:P96")) Is Nothing Then Exit Sub
Application.EnableEvents = False For Each R In Intersect(Target, Range("C5:P96")) With Sheets("Sheet2").Range(R.Address) If IsNumeric(R.Value) = True Then .Value = .Value + R.Value R.Value = .Value Else .Value = "" End If End With Next R Application.EnableEvents = True End Sub
しかしながら、このマクロによる解決は、決してお薦めしません。 それは、もし入力ミスがあっても、いつ間違えたのか全く判らないから。同じセルが加算されれば、ミスの検索が容易? いえいえ、全く逆で、ミスの検索が不可能になると思いますよ。
例えば、利用者は入力した値が勝手に変わったら、自分が打ち間違えたと思って、同じ値をまた入力する事でしょう。すると、更に加算されていって、意味不明な値になってしまうでしょう。 誰が間違えたか、元は幾つだったのか、どうやれば判りますか?
(???) 2017/08/29(火) 17:31
(17:46 セル範囲指定を追加)
(17:56 文字列入力された場合は累積リセットするよう処理追加)
そうすると、累計させたいシートは複数・・・? 今回は1ブック1シートを想定して記述いたしましたが、用が足りないかもしれませんね。
事前準備 1)シートを新しく作り「バックアップ」という名前にしてください。 2)コード中、★印のシート名を累計したいシート名に変更してください。 3)Thisworkbookモジュールとシートモジュールにコードが分かれていますので、各々指定の場所に貼り付けてください。
理由を読んだ所感ですが、フォームを利用されたほうがミスが無くていいのかなと。 今回のコードはUnDo(戻る)が使用できません。 C5に1を入力、次に5と入力したが、間違いで、元に戻したいが戻せません。 やってみて難しいことを実感してください。
'ThisWorkbookモジュールに記入
Option Explicit Const pass As String = "1234" Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With Sheets("元シート") '★ .Visible = False Sheets("バックアップ").Visible = False ThisWorkbook.Protect pass, True Application.EnableEvents = False ThisWorkbook.Save Application.EnableEvents = True If MsgBox("作業を続けますか?", vbYesNo) = vbYes Then ThisWorkbook.Unprotect pass .Visible = True .Activate Else ThisWorkbook.Close False End If End With End Sub
Private Sub Workbook_Open() ThisWorkbook.Unprotect pass With Sheets("元シート") '★ .Visible = True .Activate Sheets("バックアップ").Range("C5:P96").Value = .Range("C5:P96").Value Sheets("バックアップ").Visible = False End With End Sub
'累計を行いたいシートのシートモジュールに記入 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim msg As String Set ws = Sheets("バックアップ") If Not Intersect(Target, Range("C5:P96")) Is Nothing Then Select Case True Case Target.CountLarge > 1: msg = "変更は1セルずつ行ってください。変更されたデータを元に戻します。" Case Not IsNumeric(Target.Value): msg = "数値以外が入力されました。数値を入力してください" Case Else: msg = "" End Select Application.EnableEvents = False If msg <> "" Then MsgBox msg Range("C5:P96").Value = ws.Range("C5:P96").Value Else Target.Value = Target.Value + ws.Range(Target.Address).Value ws.Range(Target.Address).Value = Target.Value End If Application.EnableEvents = True End If End Sub (稲葉) 2017/08/29(火) 17:36
1)集計後の結果表 2)入力する項目 3)入力頻度 これらを提示いただければ、一度入力表を作ってみますがどうしますか? [[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』(momo) >>BOT 結果表はこちらのツール(Win10 2016で使えるのかなぁ・・・)で簡単に貼り付け形式に出来ると思います。 (稲葉) 2017/08/29(火) 19:07
1.集計後の結果表とは上記で言う請求書・稟議書・保管料でよろしいのでしょうか?
http://fast-uploader.com/file/7059717274901/ 集計表
http://fast-uploader.com/file/7059717305443/ 請求書
http://fast-uploader.com/file/7059717333827/ 稟議書
http://fast-uploader.com/file/7059717343599/ 保管料
2.入力する項目は 日付・生産者No(氏名が表示される)・市場・品種・数量です。
3.入力頻度は日別で800回程度です。
返信が遅くなり申し訳ありませんでした。
(勇者おひょい) 2017/08/31(木) 15:54
すみませんが、ファイルはダウンロードできません。
(稲葉) 2017/09/01(金) 08:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.