• ベストアンサー

新旧の数値の比較

cj_moverの回答

  • 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つ表示されており、上方の「表示」タブをクリックすると「ローカルウィンドウ」「ウオッチウインドウ」等いくつかの種類のウインドウが下の方に表示させられますが、そのいずれもご指示の“■子ウインドウの中で一番大きく真っ新なウインドウ”には該当しないように思えます。 全くの初心者の質問で恐縮ですが、当該の“子ウインドウ”の表示のさせ方をお教えくだされば幸いです。

関連する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と表示して、プラスならそのまま数値を表示させることは可能でしょうか??