[[20180531132533]] 『データが勝手に上書きされてしまう』(3Jpro) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データが勝手に上書きされてしまう』(3Jpro)

建設会社で、工事の請負に関する注文書をエクセルで作成しています。
1番左のシート…必要項目を入力する入力シート
左から2番目のシート…空欄の雛形シート
簡単なフローは
1.入力シートに必須項目入力後、ボタンを押す
2.空欄の雛形シートのコピーがシート末尾に作成される
3.入力シートの内容を雛形コピーに代入する
※入力シートのボタンを押すたびに、末尾にシートが増える
と言った具合です。

ここで問題が発生します。

過去に作成したシートも最新の一番右のシートと同じ内容になってしまいます。
過去のシートが最新のシートの影響を受けないようにするには、どうすればいいでしょうか?
ぜひお知恵をお貸しください。

以下至極簡単ですがソースです(変更×=雛形シート)


Sub 注文書作成()
'
' 注文書作成 Macro
'作成するボタンを押したら差動する

'

    Sheets("(変更×)").Select
    '
    '原本をコピーする
    Sheets("(変更×)").Copy after:=Sheets(Sheets.Count)
    '
    'シートの名前を拾う
    ActiveSheet.Name = Sheets("入力シート").Range("C9")
    '
    'シート見出しの色を変える
    Sheets(Sheets.Count).Tab.ColorIndex = xlNone
    '
    '入力シートの内容を注文書にコピー
    Range("F5:H5").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R6C3"
    Range("C16:H17").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R4C3"
    Range("C19:H20").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R5C3"
    Range("C21").Select
    ActiveWindow.SmallScroll Down:=3
    Range("D23:F24").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R6C3"
    Range("D25:F26").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R7C3"
    Range("D27").Select
    ActiveWindow.SmallScroll Down:=3
    Range("F29:G29").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R8C3"
    Range("F30:G30").Select
    ActiveWindow.SmallScroll Down:=-21
    Range("I7:L7").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R3C3"
    '    
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


上書きではなくて、他のセルを参照する数式を埋めているので、元の値が変わると、式を貼ったセルも一緒に変わるのですが…。

以下のように、値をコピーするように書き換えてはいかがですか?

    Range("F5:H5").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R6C3"
    Range("C16:H17").Select
    ActiveCell.FormulaR1C1 = "=入力シート!R4C3"

    Dim wk As Worksheet
    Set wk = Sheets("入力シート")

    wk.Range("C6:E6").Copy Range("F5")
    wk.Range("C4:H4").Copy Range("C16")
(???) 2018/05/31(木) 14:20

???さま
ご返信いただきありがとうございました。
マクロはあまり触ったことがなかったため、このような方法があるとは驚きです。
ワークシートの変数の型があるんですね!
本当に助かりました、ありがとうございます。
(3jpro) 2018/05/31(木) 15:34

 >過去のシートが最新のシートの影響を受けないようにするには、どうすればいいでしょうか?
数式を消して値のみにしたらいいと思います。

具体的には、
手動なら、
セル全体をコピー
で、同じ位置に値のみ貼り付け

VBAで言ったら

With worksheets(worksheets.count).usedrange

    .value = .value
end with

みたいなことを、
入力が終ったらしておくと次の入力からは影響が無くなる。

まぁ、僕ならログはログで残しておいて、
雛型が参照するデータ行を切り替えて表示を変えるかな。

(まっつわん) 2018/05/31(木) 15:39


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.