• ベストアンサー

新旧の数値の比較

あるセルの数値を変更たとき、変更前の値との新旧の差を他のセルに表示させるるのはどうしたらいいでしょうか。お教え下さい。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.8

#3-7、cjです。#7お礼欄への返信です。 > 何度もお尋ねし、その都度丁寧にご回答頂き恐縮です。 いえいえ。私とて何んでも出来る訳じゃないですし、教わって学んだことを礎に、 質問者さんと協力して問題解決に参加したくてここにいるのですから、 同じ方向を向いているつもりでいます。お気になさらず。 > 右の大きいウィンドウはグレーで、左の「プロジェクト」ウインドウには「VBAProject(ブック名.xls)」が出ますが、そこをダブルクリックすると「プロジェクトがロックされてます」と表示されます。 > 右クリックで「VBAProjectのプロパティ」を調べようとしても同様です。 > ロック解除できればご指示どおりに先に進めると思うのですが・・・。 今回添付した画像のようなメッセージで合ってますかね? この場合、考えられる原因として最も有力なのは、 対象のブックに[ブックの共有]が設定されているケースです。 [複数のユーザーによる同時編集と、ブックの結合を許可する] にチェックが入っていたら、チェックを外し(共有を解除し)、 (通常は自動的に上書き保存されるので上書き保存された排他ブックを) 一旦閉じます。 再度ブックを開けばロック解除された状態でVBAProjectを編集できるようになりますので、 #6または#7の手順でコードを貼り付けてください。 対象ブックの拡張子が".xls"とのお話なので、コードの貼付けが済んだら、 そのまま一旦上書き保存し、続けて、 [ブックの共有]や[ブックの保護]の設定を元通りに戻します。 次にブックを開いた時から機能するようになりますから、 続けて動作確認したい場合は、再度、閉じて開いてください。 念の為、、、。 実際に動作確認をしてみた感触として、もしも不採用にしたいという場合も、 導入の際の手順同様、コードを削除するようにすれば、元通りになりますので、 心配は要りません。 ただ、共有を解除する際には、変更履歴が破棄されますので、 共有環境上の他者によるブック操作を制限する等して 間違いが起こらないように用意してから導入の作業にあたるよう注意してください。 /// 気が付き難いハードルではあるものの、 もっと早く気が付いても良さそうだったのに、手間掛けちゃったみたいですみません。 また動作上の疑問などもあるでしょうから、どうぞ遠慮なく。

goonaosan
質問者

お礼

大変丁寧にご教示頂き感謝に堪えません。 ご指示の方法に従い、なんとか目的が果たせました。貼り付ける列等についてはコピーする括弧内数値を書き換えるなどして修正させて頂くことにします。 用いたことのなかった「マクロ」というものの雰囲気だけは理解できました。お礼申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.7

#3-6、cjです。#6お礼欄への返信です。 VBAの編集画面を開くところまでは出来ているみたいなので、 あともう少しです。 VBAの編集画面を開いたら、 添付画像で説明している手順(1)から(3)を確認してください。 私が赤い文字で説明を書いている場所にあるのが、 ThisWorkbookモジュールのコードを貼り付けるウィンドウです。 うまく伝わるといいのですけれど、解らなかったら訊きかえしてくださいね。

goonaosan
質問者

お礼

何度もお尋ねし、その都度丁寧にご回答頂き恐縮です。 右の大きいウィンドウはグレーで、左の「プロジェクト」ウインドウには「VBAProject(ブック名.xls)」が出ますが、そこをダブルクリックすると「プロジェクトがロックされてます」と表示されます。 右クリックで「VBAProjectのプロパティ」を調べようとしても同様です。 ロック解除できればご指示どおりに先に進めると思うのですが・・・。 BASICは三十数年前(まだOSも使わない頃)に簡単なソフトを組むのに使った覚えもあるのですが、ソフトが出回りだした以後は全くご無沙汰で、すっかり全て忘れてしまいました。エクセルについても基本的な操作もおろそかになっており、真にお世話をお掛け致します。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.6

#3-5です。#5補足欄拝見しました。 > 当方の場合、前日より前のデータを残す必要は全くないため、その保存を常に上書きで行えばよいのかなと思いました。 > ただし、保存のために独立のシートを作るより、同じシートの不要な列に前日分が自動コピーされている方が簡便なようにも思えます。 > 今のシートは縦に複数の表(データの内容は異なるが形式は同一)が並ぶ縦長のもので、 > M列より右は空白なのので、その範囲が使えればと思っています。 > 具体的にはA~L列の部分をそっくりM列より右方にコピー(上書き)したうえで、 > その部分の数値が固定されれば、目的が果たせるかと思います。 > そのような方法があれば改めて教示頂ければ幸甚です。 (<改行加えました) よく解ります。優れたご判断だと思います。 なるべく簡単に導入出来て、且、メンテナンスし易い方法を、と考えた結果、   一日の最初にブックを開いた時にだけ、A:L列をそっくりコピーして、   O列より右に(値と書式だけ)貼り付ける ようなマクロを紹介することにしました。 当初のご質問にある "変更前の値との新旧の差を他のセルに表示させる"方法としては、 例えば、A2の値についての前日との差を求める数式として   =A2-O2 のように何処かのセルに設定しておけば、 常にお求めの数値を表示させておくことが出来ます。 尚、前回紹介したマクロは不要になりますので破棄してください。 導入手順■ ■添付画像(1)■対象ブックの[ウィンドウを元のサイズに戻す]ボタンをクリック ■添付画像(2)■対象ブックのタイトルバーを右クリック ■添付画像(3)■表示されたポップアップにて[コードの表示]をクリック  Visual Basic Editor(VBAの編集画面)が表示されるので、 ■子ウィンドウの中で一番大きく、真っ新なウィンドウ(=ThisWorkbook モジュール)に  以下の記述(この行から‐この行まで)をコピーして、  過不足なく貼り付け。 ' ' =============== ThisWorkbook モジュール =============== この行から ' ' /// A:L列のデータを前日のデータとして ' ' /// O列より右に確保します。 ' ' /// N1セルに更新した日付を記録し、 ' ' /// ブックを開いた日付とN1セルの日付に相違があれば、 ' ' /// 前日データをコピペします。 ' ' /// 一日の最初にこのブックを開いた時にだけ、 ' ' /// 自動的に前日データを更新します。/// Re8806664_6 Private Sub Workbook_Open() ' ←↓ブックを開いた時に自動で処理するマクロです。   With Sheets("Sheet1") ' ★シート名を指定してください。"シート名"のように"の間にシート名です。     ' ' N1セルの更新日が当日であれば、処理する必要がないので何もせず終了します。     If .Range("N1").Value = Format(Date, "yy/m/d") Then Exit Sub     ' ' ここから下は、当日の朝、最初にブックを開いた時にだけ実行されます。     ' ' 貼付け先を一旦クリアします。     .Range("O:X").Clear     ' ' 昨日までのデータをコピーします。     .Range("A:L").Copy     ' ' 昨日までのデータをO列より右に、値のみ貼付けします。     .Range("O1").PasteSpecial Paste:=xlPasteValues     ' ' 昨日までのデータをO列より右に、書式のみ貼付けします。     .Range("O1").PasteSpecial Paste:=xlPasteFormats     ' ' N1セルの更新日を更新します。     .Range("N1").Value = Format(Date, "yy/m/d")     .Range("N2").Value = "↑ 更新日"     ' ' 選択中の範囲をA1セルに設定し直します。     .Range("A1").Select   End With   ' ' コピーモードを解除します。   Application.CutCopyMode = 0 End Sub ' ' =============== この行まで ■Alt + F11 キーでExcel画面に戻る。 ▼マクロ無効ブック(拡張子が.xlsx)である場合は、  マクロ有効ブック(拡張子が.xlsm)として新規に[名前を付けて保存]する。 ▲元々マクロ有効ブック(拡張子が.xlsm)であった場合は上書き保存する。 導入手順■以上。 VBAの記述中、Sheet1の部分は処理対象のシート名に書き換えておいて下さい。 セル範囲の参照、N1、O:X、A:L、O1、N2、A1、については、 Excek数式でのセル参照と要領は同じですから、 もしもシートレイアウトを変更される場合は、こちらのセル参照も書換えて下さい。 数式での参照と違ってVBAでは、自動的に参照先を変更してくれるような機能はありませんので。 シート名、セル範囲の参照、ともに、"ダブルクオート"で挟んだ書式になるよう注意して下さい。 動作確認の為、一旦ブックを閉じて、 再度(拡張子が.xlsmの)ブックを開いてみてください。 N1に当日の日付、O列より右にA:L列のデータの複製が展開されていれば、 問題なく動作していることになります。 前日データの複製は自動で作成されますが、 上書き保存はしていませんので、必要な時に上書き保存してあげて下さい。 一日の最初にブックを開いた時の状態として、 ブックを開いただけのつもりでも未保存のデータ(N列より右)があることになります。 マクロの内容としては、初級の前段で覚えるようなものですから、 メンテナンスに迷ったとしても相談にのってくれる人は多数いる筈です。 無理矢理シートの保護を設定でもしない限り、滅多なことではエラーにならないように かいてあります。 その他、疑問が残っているようでしたら遠慮なくお訊ねください。

goonaosan
質問者

お礼

大変丁寧なご教示を賜り心から有り難く思っております。 当方マクロの使用経験がないのでVBAの編集画面の基礎操作の部分から分かりませんので、再々度質問させて頂きます。 ご指示に基づき「コードの表示」をクリックすることでVBAの編集画面が開くのですが、『■子ウィンドウの中で一番大きく、真っ新なウィンドウ(=ThisWorkbook モジュール)』に該当する子ウインドウが表示されていません。 大きなグレーのウインドウが1つ表示されており、上方の「表示」タブをクリックすると「ローカルウィンドウ」「ウオッチウインドウ」等いくつかの種類のウインドウが下の方に表示させられますが、そのいずれもご指示の“■子ウインドウの中で一番大きく真っ新なウインドウ”には該当しないように思えます。 全くの初心者の質問で恐縮ですが、当該の“子ウインドウ”の表示のさせ方をお教えくだされば幸いです。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

#3-4、cjです。#3お礼欄拝見しました。 > 実はあるセルのデータを日々上書きにより変更を行っているわけですが、後になって前日のデータと比較を行いたいときが往々にしてあり、そのセルの旧データがどこかに表示されていればいいなと思ったので質問させて頂きました。 そういうことでしたらば、"あるセルの数値を変更したとき"という考え方ではなくて、 1営業日毎の日計を出す、という概念を導入した方が良さそうです。 普通は、営業日の最後にブックを閉じる前、 場合によっては、営業日の最初にブックを開いた時、に、 当日(前日)のデータを 日計履歴として、専用のシートまたはブックに 順次、旧いものが下新しいものが上に来るように記録していけば、 様々な分析が可能にもなりますし、お望みの前日との比較についても、 シート上の数式ひとつ(あるいは目視だけ)で可能になります。 この場合は、マクロだけではなくて、 シートまたはブックを新たに用意することにもなりますから、 そちらで可否を検討して貰って必要なら、再レスします。 或いは、同一のシートで、使うことが無いと断言できる列、があるなら、 シートやブックを追加せずとも適用可能ですが、 どこの列?なのか明示的な指定があれば着手できます。 先のマクロよりは単機能でシンプルなものになりますし、 システムとして発展性を残すことにもなります。 余裕があれば検討してみてください。 返答があれば着手しますので。

goonaosan
質問者

補足

重ねて丁重なご教示有り難く思っています。 確かに過去(前日)のデータを異なるシートなどとして自動保存しておけばよいわけですね。当方の場合、前日より前のデータを残す必要は全くないため、その保存を常に上書きで行えばよいのかなと思いました。 ただし、保存のために独立のシートを作るより、同じシートの不要な列に前日分が自動コピーされている方が簡便なようにも思えます。今のシートは縦に複数の表(データの内容は異なるが形式は同一)が並ぶ縦長のもので、M列より右は空白なのので、その範囲が使えればと思っています。 具体的にはA~L列の部分をそっくりM列より右方にコピー(上書き)したうえで、その部分の数値が固定されれば、目的が果たせるかと思います。 そのような方法があれば改めて教示頂ければ幸甚です。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#3、cjです。 > 導入手順■ > ■処理対象シ-トのシートタブを右クリック に続けて、一行 ■表示されたポップアップにて[コードの表示]をクリック 抜けていました。失礼しました。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。 VBA(マクロ)でやるしかないです。 導入手順■ ■処理対象シ-トのシートタブを右クリック Visuak Basic Editor(VBAの編集画面)が表示されるので、 ■子ウィンドウの中で一番大きく、真っ新なウィンドウに  以下の記述(この行から‐この行まで)をコピーして、  過不足なく貼り付け。 ' ' この行から Private Sub Worksheet_Change(ByVal Target As Range) ' 8806664   If Target.Count > 1 Then Exit Sub   ' ' 例えば、処理対象を"A1:A30"に指定する場合★運用に合わせて適宜修正   If Intersect(Range("A1:A30"), Target) Is Nothing Then Exit Sub Dim buf   buf = Target.Value   With Application     .EnableEvents = False     On Error Resume Next     .Undo     ' ' 例えば、変更前後の差を処理対象の1列右(, 1)に指定する場合★運用に合わせて適宜修正     Target.Offset(, 1).Value = buf - Target.Value     Target.Value = buf     .EnableEvents = True   End With End Sub ' ' この行まで ■Alt + F11 キーでExcel画面に戻る。 ▼マクロ無効ブック(拡張子が.xlsx)である場合は、  マクロ有効ブック(拡張子が.xlsm)として新規に[名前を付けて保存]する。 ▲元々マクロ有効ブック(拡張子が.xlsm)であった場合は上書き保存する。 導入手順■以上。 差の数値の表示方法については、Excelのメニューから、 [セルの書式設定][表示形式]をお好みで設定してみて下さい。 以上のマクロは、手作業で単セルの値を入力または確定した時に動作します。 #経験的にこの手の課題はWebクエリやRSSの値変動を追跡するニーズである場合が多いのですが、 > あるセルの数値を変更たとき と書いてあって、  あるセルの数値 が 変更 された とき とは書いてない、ということから類推して、 上述の通り、手作業での値変更に関する課題であろうと判断してお応えしています。 もしも、WebクエリやRSS絡みの課題でしたら、 要点を整理して、必要十分な説明を施すようにして、 再度、別の質問として建て直してください。 ★印の行、2ヶ所は、そちらで運用に合わせて書き換えてください。 うまく行かない、とか、解らない点があれば、補足欄に詳しく書いてみて下さい。 以上です。

goonaosan
質問者

お礼

丁寧なご回答に感謝します。当方エクセルは基礎的な知識のみで使っている初心者で、マクロを用いる必要性が今まではなかったのですが、やはりいつまでも使わずにいるわけにはいきませんね。直ちにやれるかかどうかは分かりませんが、試させて頂きます。 実はあるセルのデータを日々上書きにより変更を行っているわけですが、後になって前日のデータと比較を行いたいときが往々にしてあり、そのセルの旧データがどこかに表示されていればいいなと思ったので質問させて頂きました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

変更履歴で代用できませんかね。 Excel2010の場合、校閲→変更履歴の記録→変更履歴の表示 と展開して設定すると、変更したセルにマウスカーソルを合わせると変更履歴が表示されます。 また、変更後に保存していれば、「変更履歴の表示」画面での「新しいシートに変更箇所一覧を作成する」にチェックを付けると新しいシートが作成され、そこに変更履歴が記録されます。

goonaosan
質問者

お礼

変更履歴は表示させることはできるわけですね。ただ、変更前の数値を同じシートの別のセルに自動でコピーするという機能があれば便利だなと思った次第です。早々のご返答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • kadakun
  • ベストアンサー率29% (356/1200)
回答No.1

「あるセルの数値を変更たとき・・・」 と言う事はたとえば、A1に10と入っているのを100に変えたとき、差の90をC1セルに表示させるって事ですよね? 普通に考えればわかりますが、そのままでは無理です。 何故なら、比較する数字が上書きされてしまうのですから、引っ張ってこれません。 なので、A1の数字をどこかにコピーして、上書きした数字と比較させて別セルにその結果を出すしか無いでしょう。(マクロでやるとか) しかし、同セル上で何度もやるとかセル値が固定しない場合は、無理なんじゃ無いかな?

goonaosan
質問者

お礼

そうだろうなとは思っていました。早速のご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel 2003で計算された数値と比較

    Excel 2003の表計算で計算された数値と基準になる数値(予めセルに入力)を比較させて、その数値の差を+-付き数値で表示させる事は可能でしょうか?可能ならばその表示方法(計算式等)を教えて下さい。よろしくお願い致します。初心者につきイメージしたままを文章にした為、説明が下手ですがよろしくお願いします。

  • エクセルにてセルへ数値を入力時、事前に入力していた値との差を別のセルに表示させたいです。

    エクセルにてA1のセルに数値を入力した場合(事前に入力していた値-入力値)の差を隣のセル(B1)に表示し、再びA1に入力した数値の差をそのまた隣のセル(C1)に表示、再びA1に入力した数値の差をそのまた隣のセル(D1)に表示、再び… と繰返し入力した数値の差を右列へ順番に表示させていきたいのですが、どなたか方法を教えて下さい。 又、入力した時点の日付けも、差を表示させた下のセルに表示させる方法もお願いします。

  • EXCELでの数値の比較

    別々のセル(A1、B1とします)に、それぞれ100と90が入力されていたとして、 A1とB1が同じ数値であるか、もしくはA1とB1+10の値が同じ場合は×、違う場合は○ としたい場合の関数の使い方を教えてください。

  • Excel 数値比較について

    A列に基準値、B列に結果の数値、C列にその差異の数値を表示したい場合は、どんな数式?関数?を利用すればいいですか。 例えば, セルA1に10、B1に8の場合、C1に2という数値を表したい。 セルA1に5、B1に10の場合、C1に-5という数値を表したい。 お願いします。

  • 数値を表示だけ特定の文字列に変換したい。

    Excelにて、セルに数値を入れた際に表示だけ特定の文字列に変換したいです。 例えば 0.5 → ”半分” 1  → ”全部” 0~1までの少数第二位までの数値 → ”ちょっと” という形にしたいです。 ただ、別のセルの計算式で値を使うため、表示だけを変更したいのです。 書式設定でできるのかと思っていましたが、うまくいきませんでした。 どなたか教えて頂けないでしょうか?

  • ある数値を始めて越えた時の値が知りたいです。

    A列に以下のような数値があります。B1セルに、初めて2.00を越えた時の値を表示させたいのですが、 どのような方法があるでしょうか?(下では2.10が欲しい数値です) 2を越える一つ前なら以下の関数で出来ました。 =VLOOKUP(2,A:A,1,TRUE) 1.36 1.48 1.61 1.86 1.97 2.10 2.22 2.35 あと、下の数列のように、上の行に2より大きな数字があると、VLOOKUP関数だけだと一つ前すらも求めることが出来ません。 表示させたいのは、『一つ上のセルが2より小さく、初めて2.00を越えた時の値です。』 4.19 3.39 2.68 2.08 1.65 1.36 1.48 1.61 1.86 1.97 2.10 2.22 2.35 関数だけで駄目であればマクロでも構いません。良い方法が無いでしょうか?

  • ワードで二段で新旧比較をする

    定款の変更などでワードを使って、新旧比較対応書類を作るのですが、 新旧とも、ワードファイルになっているのですが、どうしたらスムーズに作業できるのでしょうか? 書式は、A4を縦二段にして横書き、左が旧定款、右が新定款としたいのです。左右が別々に編集できればいいのですが、そんな方法ありますか?

  • エクセルのデータが数値として認識されません

    他から受け取ったデータが、表示形式を変更しても数値として認識されません。 1.初めてデータを受け取ったとき、計算ができないので確認してみると、たとえば 5 と表示されているセルに =”5”のように数式が設定されていたので、シート全体をコピー→形式を指定して貼り付け →値 の処理をしました。 2.セルの内容は 5 になったのですが、文字がセルの左詰めになっているので、セルの書式設定を数値にしたり、標準にしたり、ユーザー設定がされていないか確認したのですが、状況が変わりません。 3.ひとつのセルをダブルクリックすると、数値に変換され、計算の対象になります。 このような状況です。3.のようにダブルクリックすれば解決はするのですが、データの量がとても多いのですべてをダブルクリックするわけにはいきません。一度で変換する方法を教えてください。 何か最初の処理に問題があったのでしょうか?ものすごく困っています。どうかよろしくお願いします。

  • エクセル 数値を比較して色づけ

    エクセル2000で、時系列が上から下に流れる数値データを入力したのですが、アクティブなセルの数値を常にひとつ上のセルの数値と比較して、小さければ赤で表示するように設定したいと思っています。 条件付書式では各セルごとに設定しなければならず、量が多いので書式をオートフィルするような機能があればと思っています。 どなたかご存知の方いらっしゃいましたらよろしくお願いします。  

  • エクセルでこんなこと出来ますかね?(数値がマイナスなら0と表示して、プラスならそのままの数値を表示)

    エクセルでたとえば セル1の値がマイナスなら0と表示して、プラスならそのまま数値を表示させることは可能でしょうか??

専門家に質問してみよう