- ベストアンサー
エクセルで履歴を毎回残していきたいのですが・・・
タイトルの通りですが、エクセルで毎回履歴を残していきたいのです。 簡単に説明いたしますと、毎回の出資金額に対して、収支を特定のシートに別シートからの関数で確認するシートがあるのですが これの結果をまた別のシートで毎回履歴として残していきたいわけです。 以下のようなシート1があったとします。 A B C D E 1行目 50 7000 2行目 20000 3行目 13000 上のシートにおいて、A1は回数だとします。 E1は出資金額、E2は獲得金額、E3はE2-E1で計算された結果だとします これを、シート2で 支出 収入 収支 50 7000 20000 13000 51 52 53 ↓ と、いうような感じで残していきたいわけです。 シート1ではA1の回数は毎回、1回ずつ自動で加算されていくものとします。 E列の金額は次回データが入力されるまでは現数値がそのまま残るか、または空白状態になると思います。 このような場合にシート2で設定すべき関数、または方法がありましたら、どなたかご存知の方ご教示よろしくお願いいたします^^;
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは、今後の活用のためにも、ボタンの作成の仕方だけ紹介しておきます。新しいエクセルブックで、 上のバーから「表示」から「ツールバー」から「フォーム」をクリックします。 フォームのツールボックスが表示されますので、ボタンを選択して、シート上に、適当な大きさで作成します。 マクロの登録のウイザードが表示されますので、新規作成押すと、 VBエディターが開いて、 Sub ボタン1_Click() End Sub が自動で表示されます。その間に、以下をコピィ&ペーストして、 GYOU = Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Row Sheets("Sheet2").Cells(GYOU, 2).Value = Range("E1").Value Sheets("Sheet2").Cells(GYOU, 3).Value = Range("E2").Value Sheets("Sheet2").Cells(GYOU, 4).Value = Range("E3").Value ×で閉じる。 E1:E3に適当に、数字入れて、ボタン押してみてください。 今後もがんばってみてください。
その他の回答 (4)
- okormazd
- ベストアンサー率50% (1224/2412)
一応、質問の趣旨は実現しましたが、こまかいことは気に入るように修正してください。 sheet1はロックをかけたほうがよい。 Sheet1のworksheetに貼り付ける。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False r = Target.Row c = Target.Column r01 = 1 c01 = 5 r02 = 2 c02 = 5 If r >= r01 And r <= r02 And c >= c01 And c <= c02 Then sethistry End If Application.EnableEvents = True End Sub bookの標準モジュールに貼り付ける。 Public r, c Sub sethistry() Set wb = Workbooks(ThisWorkbook.Name) Set sh1 = wb.Sheets(1) Set sh2 = wb.Sheets(2) With sh1 r1 = 1 c1 = 5 hn = Cells(r1, 1) hn = hn + 1 .Cells(r1, 1) = hn sisyutu = .Cells(r1, c1) syunyu = .Cells(r1 + 1, c1) syusi = syunyu - sisyutu .Cells(r1 + 2, c1) = syusi With sh2 r2 = hn + 1 c2 = 1 .Cells(r2, c2) = hn .Cells(r2, c2 + 1) = sisyutu .Cells(r2, c2 + 2) = syunyu .Cells(r2, c2 + 3) = syusi End With End With End Sub
お礼
okormazd様、2回もご回答いただきましてありがとうございます^^ いただいた方法なのですが、私全くマクロやVBAなどを触ったことがない為に、敷居が高い方法のようです^^; せっかくお考えいただいた方法ではあるのですが、今の私には活用できそうもありません。。。 関数では難しいということがわかりましたので、マクロを基礎からある程度覚えてから、いただいた方法を試してみたいと思います^^
- hallo-2007
- ベストアンサー率41% (888/2115)
何か、先ほど回答した内容と同じような気がします。 以下のスレ参考にしてください。 マクロボタンの作成の仕方など、わからなければ別途質問してください。 以下、参考マクロ(VBA) Sub ボタン3_Click() GYOU = Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Row Sheets("Sheet2").Cells(GYOU, 2).Value = Range("E1").Value Sheets("Sheet2").Cells(GYOU, 3).Value = Range("E2").Value Sheets("Sheet2").Cells(GYOU, 4).Value = Range("E3").Value End Sub
お礼
hallo-2007様、ご回答ありがとうございます^^ 同じような質問はよくあるみたいですね^^; 十分検索してから質問すればよかったのですが・・・ マクロボタンの作成の仕方以前にマクロは全く触ったことないものですから、私にとってはかなり敷居の高い方法のようです^^; 一度基礎からマクロを覚えてから、再度ご提示の方法含めてやってみたいと思います。
- okormazd
- ベストアンサー率50% (1224/2412)
関数では無理だろう、思いつかない。 VBAならできるが。 シート1は、 変更するデータは、「E1は出資金額、E2は獲得金額」だけか。 質問にあるようにレコードが1個だけなのか。
- DIooggooID
- ベストアンサー率27% (1730/6405)
ご質問の内容を見る限り、・・・ シート2 の支出欄は、E1 を参照し、収入欄は、E2 を、収支欄は、E3 を、それぞれ単純に参照すれば良いように思えます。 なお、単純に参照しているだけにすると、シート1 を変更するたびに、シート2 の内容もすべて更新されてしまいます。 これを防ぐために、シート2 の項目のうち変更させたく無い部分に関しては、更新させたくない部分を選択し、<コピー> --> <形式を選択して貼り付け> で、<値> を選びます。 これで、この処理をした部分については、シート1 を変更しても、内容が更新されなくなります。
お礼
DIooggooID様、ご回答ありがとうございます。 ご提示の方法は私も考えはしたのですが やはり全自動でできる方法がないかと、知恵を借りようかと思い質問させていただきました^^; でも、ほかに方法がなければこの方法でやってみようと思います^^
お礼
hallo-2007様、早速の補足でのご回答感謝いたします^^ マクロは全く初経験ですが、少なくともボタンの作り方だけは何とかわかりました^^; ご提示の式を応用できるようになれば、使えそうな気がしてきましたので、なんとか基礎から本などでスキルアップに努めます^^;