- ベストアンサー
エクセル
同一セル内に何度も数字を入れていき、その合計を出す方法はありますか?例えば、A1に3回に分けて1・2・3と入れれば同じA1に6となるようにしたいのですがどうすればいいのでしょう?
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
B列を選択するとINPUTボックスで数量を入力する のはどうでしょうか。 入力した数字(数量)は累積されるようにしています。 クリアはINPUTボックスをキャンセルしてDELキーで 消してください。 「ツール」→「マクロ」→「Visual Basic Editor」 「表示」→「コード」 ↓ 下記のコードをコピーして貼り付けてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) '***** 特定セルを選択するとイベントを実行する ***** Dim tate As Long Dim yoko As Long Dim 数量 As Long Dim 判定 As Integer tate = ActiveCell.Row yoko = ActiveCell.Column If yoko = 2 Then On Error GoTo skip01 数量 = InputBox("数量を入力してください。") 判定 = MsgBox("数量 = " & 数量 & " で間違いありませんか?", vbYesNo + vbInformation) If 判定 = vbYes Then Cells(tate, 2) = Cells(tate, 2) + 数量 End If End If skip01: End Sub
その他の回答 (8)
- hallo-2007
- ベストアンサー率41% (888/2115)
私の想像ですが、今は、 A列に、商品名が6500品目すでに、入力されていて、日々、販売数などを追加されている のでは? 日々の追加している入力の件数がわかりませんが、一般的取り組みで云えば 入力シート A B C D E F 日付 商品コード 担当者コード 販売数量 商品名 担当者名 商品マスターシート A B C 商品コード 商品名で 総台数 6500品目を登録 担当者マスターシート A B 担当者コード 担当者名 担当者を登録 日々の入力は、入力シートでB、C、Dに数字を入力 VBAで、B列に商品コード入力すると、当日の日付と商品名が自動で入り、セルが自動で右にひとつ移動 担当者コードコードを入力すると、担当者名が自動で入り、右へひとつ移動、数量を入れると、セルがひとつ下がり、B列へ移動 するVBAでも考えます。 商品マスターの総台数は、関数で集計します。 一案ですが、エクセルは、最大行数が65000件ほどですので、1年もたたずに、最大行数を超えるようであれば、別方法を考えます。 テンキーで、数字を順に打ち込めば、日々の入力が完了します。
- mitarashi
- ベストアンサー率59% (574/965)
#2です #3&7の方も書かれていますが、6500行の中から目的の商品の行を選び出すのはどうやっているのでしょうか。足し算よりも、こちらの手間の方がかかると思いますが、いかが? #3の方のご指摘にあるように、誤った入力が後から特定・修正できない事は致命的だと思います。 6500種類×電卓で計算するのもまだるっこしい様な件数のデータが発生するなら、Excelではなくて、データベースを検討された方が良いのではないでしょうか。 運用状況を明示していただければ、小生の様なExcel,Accessにちょっと詳しいという人間でなく、「仕事」に詳しい方のアドバイスが得られるかもしれません。
お礼
何度も御丁寧に有難う御座います。具体的にmitarashiさんならどうされますか?
- hallo-2007
- ベストアンサー率41% (888/2115)
No3です。 >A列に商品名、B列に数量を入れていくのですが、行的には6500程あります。しかも、商品1を複数名が数量を記入しているので何度も同じ商品の数量を足さないといけません この辺りから問題解決しませんか? 1、担当者がデータ入力して、データで商品名と数量が取得できないか。(多分、OA機器の活用においてもっとも基本となる形式です。) 最初からデータにして、データ活用(再入力は発生させない)これでミスがなくなります。 2、6500行とは、商品数が6500品ということでしょうか。 もし、データを縦方向に日付、担当者、品名、数量と入力した場合に、1日では何行くらいになるのでしょうか? 3、担当者の人数は、何名くらいですか?もし、B列に、総数量、C列より右側に、担当者を並べて入力した場合を想定しています。 全体の構成の中で、基本に戻った入力方法を検討してみてはいかがですか。
お礼
何度も御丁寧に有難う御座います。商品数が6500種類あります。データ入力人数は2人です。アナログな会社な為、困っています。具体的にhallo-2007さんならどうされますか?
- mitarashi
- ベストアンサー率59% (574/965)
#2です。 >有難うございます。これは2003では使えますか? 2003ならおそらく使えると思いますが、当方で検証する環境がありませんので、試用してみて下さい。 ついでに#2のコードに対して、補足説明をさせていただきます。 >困難な課題です Application.EnableEvents = False を入れる事で、マクロで値を変える事が更にイベントを発生させるのを防止します。 >セルを戻して...手間ではありませんか これは、Range("a1").Selectを生かせば、A1セルに戻すのはマクロがやってくれます。 >出来る意味がわかりません 同感です。質問者様、どの様な用途か、メリットがあるのか教えていただけると幸いです。 #2の例では、Sheet2のA1をデータの一時保管場所に使用しています。従って、値をクリアするには、Sheet1のA1と、Sheet2のA1の両方をクリアする必要があります。A1セルのそばにコマンドボタンを設置して、値クリアマクロを登録する様な方法をとらないと、面倒ですね。
お礼
分かり易く説明して頂き有難う御座いました。実際使う時にはこのマクロだと都合が悪かったです・・・・先に説明してなかったですが、簡単に説明させて頂くと、A列に商品名、B列に数量を入れていくのですが、行的には6500程あります。しかも、商品1を複数名が数量を記入しているので何度も同じ商品の数量を足さないといけません。しかも不定期なのでいちいち電卓をたたいている暇もありません。何とかなりませんか?要するに、例えばB列がすべて電卓機能になってればいいんですが・・・・(足し算)お願いします。
- kuma3f
- ベストアンサー率63% (28/44)
次のような方法はいかがでしょうか。 見かけ上はA1に合計の値が表示されます。 「ツール」→「オプション」→「編集」で 「入力後にセルを移動する」にチェックを入れる 方向は「下」にする 「OK」をクリック ↓ 「ツール」→「マクロ」→「Visual Basic Editor」 「表示」→「コード」 ↓ 下記のコードをコピーして貼り付けてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) '***** 特定セルを選択するとイベントを実行する ***** Dim tate As Integer Dim yoko As Integer tate = ActiveCell.Row yoko = ActiveCell.Column If tate = 2 Then If yoko = 1 Then 'A2を選択するとA1を足し算する If Cells(1, 1) = "" Then 'A1にスペースを入れたらクリア Cells(2, 1) = "" End If Cells(1, 1) = Cells(2, 1) + Cells(1, 1) Cells(2, 1) = Cells(1, 1) End If End If End Sub Visual Basic Editorを×で閉じます。 A1に数字を入れEnterキーを押すとセルがA2に移動するので A2が選択されたらA1が足し算され合計が表示されます。 A2は累積で使用しています。 クリアする場合はA1をDelキーで消すとクリアされます。
お礼
分かり易く説明して頂き有難う御座いました。実際使う時にはこのマクロだと都合が悪かったです・・・・先に説明してなかったですが、簡単に説明させて頂くと、A列に商品名、B列に数量を入れていくのですが、行的には6500程あります。しかも、商品1を複数名が数量を記入しているので何度も同じ商品の数量を足さないといけません。しかも不定期なのでいちいち電卓をたたいている暇もありません。何とかなりませんか?要するに、例えばB列がすべて電卓機能になってればいいんですが・・・・(足し算)お願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
先にアドバイスあるように困難な上、出来る意味がわかりません。 A1に1といれて、Enterおすとセルが下に下がると思います。 わざわざ、A1にセルを戻して、2と入れていくのは、手間ではありませんか。 更に、途中で間違った数字をいれたか、どうかの確認もできません。 私だったら=1+2+3とでも入れそうです。
お礼
先に説明してなかったですが、簡単に説明させて頂くと、A列に商品名、B列に数量を入れていくのですが、行的には6500程あります。しかも、商品1を複数名が数量を記入しているので何度も同じ商品の数量を足さないといけません。しかも不定期なのでいちいち電卓をたたいている暇もありません。何とかなりませんか?要するに、例えばB列がすべて電卓機能になってればいいんですが・・・・(足し算)お願いします。=1+2+3では時間がかかります。数字のみを入れていければよりいいのですが・・・hallo-2007さんが思われている様に、途中で間違った時に後から見直せれば最高ですが・・・何かいい方法ないでしょうか?
- mitarashi
- ベストアンサー率59% (574/965)
どういう用途かわかりかねますが作成してみました。Excel2000用のコードです。特定シートの、A1セルだけを対象にしています。 Sheet1,Sheet2が、存在している事を前提にしています。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Not (Intersect(Target, Range("a1")) Is Nothing) Then Range("a1").Value = Range("a1").Value + Sheets("Sheet2").Range("a1").Value Sheets("Sheet2").Range("a1").Value = Range("a1").Value 'ここのコメントマークを外すとA1セルの選択が固定されます。 'Range("a1").Select End If Application.EnableEvents = True End Sub マクロの登録の仕方を念のために説明すると(Sheet1に対して登録する場合です) ALT+F11を押すと、VBEditor画面に切り替わります。画面左に、プロジェクト VBA projectというフレーム?が表示されていてその中に、Sheet1(Sheet1)とあるので、そこにマウスカーソルを当てて右クリックし、「コードの表示」を実行すると、広いフレームにカーソルが移動しますので、下記のコードを貼り付けてください。
お礼
有難うございます。これは2003では使えますか?
- 134
- ベストアンサー率27% (162/600)
残念ながら、きわめて困難な課題です。 A1セルに、1を入れます。 → 値は1に 次いで、2を入れます。 → 値は1+2=3に 3を入れます。 → 値は3+3=6に マクロのチェンジで、入力したときに即時計算は、可能ですが、計算した結果により、セル値を変更され、再びマクロがスタートし、無限ループに陥ります。 別のシステムを考えることをお薦めします。
お礼
お忙しい中、有難う御座いました。かなり難しい事と思いましたがやはり難しい課題です・・・・
お礼
とても丁寧に回答してくださって有難う御座いました。勉強になりました。