プロが教える店舗&オフィスのセキュリティ対策術

データを入力した後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。
A7:M27の表に入力したデータと,その番号に対応した2つめの表A30:H39のデータを,同一シート内の履歴(転記先)に転記させたいです。転記後は転記元のデータが転記先の履歴に残っていくようにしたいです(添付写真参照)。

詳しい条件としましては,
・転記元のデータは上限10個の項目を入力することができ,毎回データ数が同じとは限りません。(写真では項目4~9の部分を非表示にしています)
・転記元の上の表については1項目につき2行をセル結合して使用,H列I列に関してはセル結合せずにそれぞれデータ入力しています。
・転記先の履歴では1つの項目についてのデータを全て1行で横並びに表示させたいです。
・入力の最終行に必ずつける「以下余白」の転記は不要です。
・転記元にデータ入力→履歴に転記→転記元データクリアの一連の流れを繰り返しできるようにしたいです。

VBA初心者で本やサイトを参考にしても似た事例が見つけられず,知識も浅いため困っています…。

どなたか教えていただけたらとても助かります。
よろしくお願いします。

「【VBA】データを入力後に,同一シート内」の質問画像

A 回答 (3件)

>A7:M27の表に入力したデータ


画像だとM27でなくL27のように見えます。
どちらが正しいのでしょうか。
いずれにしろ、正確なレイアウトが判らないと回答できません。
    • good
    • 0

画像がよく見えません。


gyao.comへアップされると鮮明な画像が表示されます。
gyao.comへアップされてはいかがでしょうか。
下記はgyao.comへアップしたサンプルです。
画像の内容は本件とは関係ありません。この程度の鮮明な画像になるという例です。
https://gyazo.com/d54a2d86b804590f4d05fc100a862572
    • good
    • 0

こんにちは



添付図がほとんど読めないこともあって、どこにどのように記録したいのかサッパリわかりません。

>本やサイトを参考にしても似た事例が見つけられず~
履歴を残す方法がわかれば、後はできるのかなと想像しました。

以下は、(ひとまず使用していなさそうな)S、T列に記録してゆく例です。
「A7:M27のセル範囲で値を変更したら、そのセル位置と値をS:T列に記録してゆく」
という内容のマクロです。

S列が変更した「セル位置」、T列がその時の「値」をセットにして、下方に記録してゆきます。
上のふたつの情報がわかれば、転記先を質問者様の思う所になるようにすれば、ご質問の内容も実現できるのではないかと想像しました。

※ 変更の対象にしているのは、「手入力やマクロによるセル値の変更」です。
 セルに関数等が設定されていて値が変わったとしても、そちらは対象とはしません。


以下、ご参考までに。
(対象シートの、シートモジュールに以下のマクロを記述します)
「セル位置を記録」「セルの値を記録」のコメントの部分でそれぞれの値を記録しています。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, r As Range

If Intersect(Target, Range("A7:M27")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Set r = Cells(Rows.Count, 19).End(xlUp)
If r <> Empty Then Set r = r.Offset(1)

For Each c In Intersect(Target, Range("A7:M27")).Cells
r.Value = c.Address(0, 0) '←セル位置を記録
r.Offset(, 1).Value = c.Value '←セルの値を記録
Set r = r.Offset(1)
Next c
Application.EnableEvents = True
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!