• ベストアンサー

エクセルでセル内容を変更したら指定セルが転記される

いつもお世話になております。 添付のような月々の出納の集計表で、C3(当該月)セルの月が変わったら、集計行(45行目)のE列、H列、J列の値を集計シートの当該月の行に転記したいのですが。 月の合計はSUM()で入っていますので値で貼りつける必要があります。 尚、シートは手入力セル以外は保護がかかっています。(念のため)

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.4

> C3は手入力です。 転記のタイミングをこの時にするとすればC3のシートのシートモジュールに以下のコードを > シートは手入力セル以外は保護がかかっています C3のシートにはVBAで書き込まないのでC3のシートの保護は解除していません。 集計シート(集計表)に保護がかかっていたらで保護解除と保護してますが、かかってなけれはその部分は外してください。 列や行の指定部分は適宜変更してください。集計表の.Cells(52, "C")は2020年1月の列と行、それとC3のシートのE,H,Jの6 Private Sub Worksheet_Change(ByVal Target As Range) Dim FRange As Range, mRng As Range If Target.Address <> Range("C3").Address Then Exit Sub End If With Sheets("集計表") .Unprotect Set FRange = .Range(.Cells(52, "C"), .Cells(Rows.Count, "C").End(xlUp)).Find(What:=Range("C3").Text, LookIn:=xlValues) If Not FRange Is Nothing Then Set mRng = .Range(.Cells(FRange.Row, "D"), .Cells(FRange.Row, "F")) If WorksheetFunction.CountBlank(mRng) <> mRng.Count Then If MsgBox(FRange.Text & "には既にデータがあります。上書きしますか?", vbYesNo + vbInformation) = vbNo Then Exit Sub End If End If .Cells(FRange.Row, "D").Value = Cells(6, "E").Value .Cells(FRange.Row, "E").Value = Cells(6, "H").Value .Cells(FRange.Row, "F").Value = Cells(6, "J").Value Else MsgBox Range("C3").Text & "はありません。", vbCritical End If .Protect MsgBox FRange.Text & "にデータを書き込みました。", vbInformation End With End Sub

akira0723
質問者

お礼

毎度お手数をおかけしております。 今回も質問に抜けがあり2度お手数をおかけしてしまい申し訳ありません。 質問レベル(抜け)は知識レベルの低さに比例しているということで「乞う容赦!」です。 さて、夕食後すぐに試行してみました。 当方の質問が的を得たのか???? kkkkkmさんの推理力、想像力がすごいのか!(当然こっちですが) 一発で期待通りの結果が得られました。 紙と電卓を使っている人に成り代わり厚く御礼申し上げます。

akira0723
質問者

補足

今回もご回答ありがとうございます。 先ずは前回のご回答(Bookの1枚のシートだけの保存)の状況報告。 顧客様の希望で月替わり(7月1日)からの使用可能(実施)となりました。 毎日の作業が、ワードへの手動転記からマクロボタンのワンクリックにできたので担当者が非常に喜んでおります。 今回は他部署の人が紙と電卓で作業していたのでエクセルで集計できるようにしてあげようとしたのですが、ついつい色んな機能(グラフ化や自動削除、等)やっているうちに過去の月々の推移をグラフ化してやろうとしたのですが。 NETで調べてChange イベントというのがあると分かったのでが、参考例の改良、試行錯誤では歯が立たずで、質問させていただきました。

その他の回答 (3)

回答No.3

こんにちは、 画像を拝見すると消去ボタンらしきシェープがあるように思います。 既にVBA(マクロ)で入力セルをクリアーなどの処理を行っているのではないでしょうか? であれば、比較的容易になさりたい事は実現できると思います。 保護についても、VBAで処理可能に変更する事も出来るかと、、 そのExcel Bookはご自身で作成されたモノでしょうか?社内の方でしょうか? VBA導入済みならば、作成された方、もしくは、知識をお持ちの方に 機能を追加してもらうのが早いですね。 ご自身でシート保護を解除したり、Ctrl+F11でVBEを開き、プロジェクトを開けるなら、 VBAを組むことも出来るかと思います。 >集計行(45行目)のE列、H列、J列 画像と一致せず、シート、各配置がいまいち不明確なので 取り敢えず ここまでとします。

akira0723
質問者

お礼

ご回答ありがとうございます。 ご指摘の通り何となくやることは分かるのですが、基本的な知識がないので実際には自作できないレベルです。 この表は当方が作成し、いくつかのマクロも設定してあるのですが、マクロの記録とNETの知識を組み合わせただけで自作は出来ないレベルです。 今回はChangeイベントというのを使うことまで分かったのですが、NETの参考例の改良ではお手上げ状態です。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

良ければ、下記について、補足して。 うるさいとと思うなら無視して。 ーー 月が替わると、別シートに繰り越すのかどうかはっきりさせるべきだ。 次の月も続けて入力するようでもあるが。 普通はテンプレートの仕組みなどで、別シートにするのでは。 ーー 保護を掛けてあるというが、どの程度の範囲なのか。 本例は、実際は出納帳ではなく、別の帳票で、会社がいじくかることを禁じたい 、ましてVBAなど使わせたくないのではないのか? 会社の帳票などを秘密にして、出せないのは判るが、それで脱落する事項も多い。初心者はその辺無頓着が多い。 ーー 画像を張り付けるという安易な方法でなく(最近画像だけというのが多い)、文章で、したいことを説明すべきだ。 ーー また回答には、VBAを使いたいのだが、勉強しているのかな? 1.B列は月が替わっても同一シートに1日1行?を加えていくのか? 2.B列の日付の月が変わったら(注1)、その直前行の、支払い額(E列?)の数字を集計シートの最終行(注2)の次の行にセルの値を持ってくる。 入金額や月末残高もそれと同じことをする。それらは明細シートのどの列? ーー 注1 C列に入力があったら前行と比べて、付が変わったか調べる 注2 集計シートの最終行の次行は、End(xlUp).Row+1の行で割り出せる。 注1,2はVBAならたやすい。

akira0723
質問者

お礼

ご回答ありがとうございます。 参考になりました。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.1

「セルの月が変わったら」のエクセル上でのイベントを何にするのか分かりませんがそのタイミングで 集計行が月合計の行でそこが45行として、後は行がわからないので適当です。 Sub Test() Dim FRange As Range Set FRange = Range(Cells(52, "C"), Cells(Rows.Count, "C").End(xlUp)).Find(What:=Range("C42").Text, LookIn:=xlValues) If Not FRange Is Nothing Then Cells(FRange.Row, "D").Value = Cells(45, "E").Value Cells(FRange.Row, "E").Value = Cells(45, "H").Value Cells(FRange.Row, "F").Value = Cells(45, "J").Value Else MsgBox Range("C42").Text & "はありません。", vbCritical End If End Sub

akira0723
質問者

補足

早々のご回答恐縮です。 直ぐに検証したいのですが夜になってしまいます。 重ねて申し訳ない事に質問に抜けが有ります。 C3は手入力です。下部のセルの日が自動で変わる為に2020/6で入力します。 更に集計は別シート(集計表)にしたく。

関連するQ&A

専門家に質問してみよう