• ベストアンサー

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

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

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答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/17068)
回答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
  • ベストアンサー率65% (1618/2457)
回答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

  • セルの転記

    EXCELで「累積」というシートのD列で何か値が入っている一番下の行にあるH列のセルに入っている値を「パラ」というシートのC2に転記したいです。 マクロの記載を教えて下さい。 よろしくお願い致します。

  • エクセルで別Bookのシートの指定セルの値を転記

    書式の決まった「申請書」の指定セルの値を別のBookの「申請書リスト」シートに引っ張りたいのですが、例えば申請書のG6に品名が入っているので、申請書リストのD列に品名を入力したらその申請書の決まったセルをリストの品名の横(行)に順番に転記。 申請書のシートは複数開いている状態もありなので、品名を入れたら当該申請書シートの目的のセルをリストに自動転記したいのです。 同じ品名のシートが複数同時に開いていることは無いです。

  • エクセルマクロで指定したセルの値を表示変更し転記

    エクセルマクロで指定したセルの値を表示変更して指定したセルに転記したい セルA列に書式が標準で 20101117と入っています。 これをB列にセルの値も表示も共に11/27としたいです。 (セルの値は2010/11/17でセルの表示は11/27ではまずいです。) A列にデーターがあるまで繰り返したいです。 行数は作業毎で常に違います。 以下の記述では出来ませんでした。 よろしくお願いします。 Sub 日付() 行 = 2 Do If Cells(行, 1).Value = "" Then Exit Do Cells(行, 2).Value = Mid(行, 1,5,2) &"/"& RIGHT(行, 1,2) 行 = 行 + 1 Loop End Sub

  • 別シートの行を選択し対象列を転記するマクロ

    シート2のA~F列までデータがあります。 行数は10,000行です。(月ごとに100行くらい追加されます。) A列は項目がNO.で半角数字が連番で入力されてます。 セルA2→1 セルA3→2 セルA4→3 . . . セルA10000→9999 セルA10001→10000 という感じです。 シート1の セルI9に番号を入力すると シート2のその番号の行のB~F列の値を シート1のJ9~N9列に転記したいです。 例えば シート1のセルI9に100と入力したら、 シート2のA列が100と入力されているセルはA101ですから 101行目となります。101行目の各列の値を転記します。 ↓ シート1のセルJ9にシート2のセルB101の値を転記 シート1のセルK9にシート2のセルC101の値を転記 シート1のセルL9にシート2のセルD101の値を転記 シート1のセルM9にシート2のセルE101の値を転記 シート1のセルN9にシート2のセルF101の値を転記 シート1もシート2もセルの書式設定は標準。 B,E,F列は半角英数字の組み合わせで C,D列は半角数字のみです。 たまにF列に空白がある行があります。 B,F列は数字のみの場合もあります。 B,C,D,F列は数字のみの場合 「数値が文字列として入力されています」 となっています。 マクロで行いたいのですが記述そのものを教えてください。

  • EXCELでシート名をセルの内容で指定出来るか

    検索してみましたが、探し方が悪いのか該当する質問がないようなので、質問させていただきます。 EXCELで複数のシートにあるデータを使用して集計表を作成するときの質問です。 使用する人がEXCELに慣れていない方のため、汎用性を持たせたいのですが、以下のような方法は出来るのでしょうか。 集計元シート(複数)> '1','2','3'…のように連番のシート名 集計先シート>'集計' 1.'集計'シートのセル A列 にシート名を入力します。 2.'集計'シートのセル B列 にそれぞれのシートの合計部分のセルNo(Ex.B11)を指定します こうしたとき、2.のB列 は [ B1 = '1'!B11 ]のようになりますが、この '1' の部分で '集計'シートの A1 の値を反映したいのです。 こうすると、シートが増えたとしても、上の式をコピーすれば(ドラッグでのコピー)式のシート名を変更する必要がないと思うのですが…。 ですが、思いつく方法を試してみてもどうもうまくはいきません。 本当にこういった方法は出来るのか、出来るのならその方法をご教授いただければありがたいです。 説明ベタで申し訳ありません。 これが出来るといろいろなものがうまくいくので、ぜひよろしくお願い致します。 (VBAはなるべく使わない方向でお願いします)

  • エクセルのマクロで転記

    シート1とシート2があり、 シート1の20Aから39Lまでのセルの中に情報を書き込んでいます。 シート1の20Lから39LのL行で、数値が入っているセルがあれば、その行のA、B、I、L列と、J2、A7を取り出し、シート2の2行目から下に転記していくのですが、 シート2のA列にはシート1のJ2を、B列にはシート1のA7を、C列以降は、シート1のA、B、I、Lを入れるようにします。 また同じ条件がシート1で発生すれば、シート2の3行目以降に転記していく感じです。 どのようにすればいいでしょうか。

  • エクセルでK列の最終行のセル値を指定のセルに・・・

    いつもお世話になっております。 5月に下記のコードを教えてもらい、簡単な改良や条件を追加しながら複数のシートに展開中なのですが新しいパターンが出たのでHELPです。 K列の最終行の値を同じ表のH6のセルに転記してそれを使って出た計算結果(セルH7)の値をH列の最終行のセルに転記したいのですが。 (具体的な列とセルはシートで変わる可能性があります) 下記のコードは別のシート(計算表)の特定(結果)のセルの値を指定した列に転記するコードでこれで何とかしようとしましたが歯が立たず。 なにとぞよろしくお願いいたします。 Option Explicit Sub Sample3()   Dim MyRange As Range  With ThisWorkbook   Set MyRange = _    .Sheets("入力表").Cells(Rows.Count, 5).End(xlUp)   MyRange.Offset(1, 0).Value = .Sheets("計算表").Range("J15").Value   MyRange.Offset(1, 1).Value = .Sheets("計算表").Range("J20").Value  End With End Sub

  • エクセルで結合セルの内容を解除した各セルに転記する

    いつも大変お世話になっております。 過去にも同じ要求があり、何度か手作業で対処してきたのですが、今回は表が大きいので何とかならないかと。 具体的には特定の列(例えばA列)が3行から6行の接合セルになっている表で、A列の結合を解除したときにA1:A5、A6:A7と言った不規則に結合されている行の結合セルの内容を、結合を解除したときに各セルに転記したいのですが関数では無理なようで、当方のVBAの知識では解決できないのでどなたかお助けください。 尚、シート全体の結合セルを対象にするとまずいので、解除対象の列は指定した列のみで動くことが必要です。 複数列の結合列の解除の場合は、複数回に分けての実行もOKです。

  • 複数シートからのセルの抽出

    複数シートからのデータの抽出をしたいのですが、教えてください。 [処理] あるEecelBookに含まれる全てのsheetに対して、シートの1行目とA列のあるセルの値が1995または1996である場合はその当該行をコピーし、新しく作ったsheetに集計する。 説明が下手で住みませんが、よろしくお願いします。

  • エクセル 固定されたセルを列が変更されるセルに貼り付ける

    エクセルで月の売上を年の売上表に転記したいと思っています。 シート1のA1に入っている月の売上の値をシート2のA1に貼り付け、 翌月にシート1のA1に更新された値(翌月の売上)をシート2のB1に貼り付けという様に、シート1の固定されたセルを(値は変更)シート2の列が変更されるセル(行は固定)に値を貼り付ける方法を教えてください。 シート1のA1からシート2のC1に貼り付け・・・と上記を繰り返し12回貼り付けが終わった時点でシート2のA1:L1を空白にし、次回貼り付けられるセルがシート2のA1に戻るようにしたいです。 ちなみにコマンドボタンにマクロを登録し使おうと思います。 どなたかご教示お願いします。 できたらそのまま使えるマクロを作っていただけると嬉しいです。 当方初心者です。 宜しくお願いします。

専門家に質問してみよう