• ベストアンサー

エクセル関数で

初歩的な質問で 申し訳ないですが。 シート 3枚に データーを入力して その計を 別シートに表示したいのですが、その時表示したいシートは日付で管理したいのです。  IF(TODAY()=A3,シート1!$O$2+シート2!$O$2+シート3!$O$2,IF(A3<100000,"")) の数式を立てたのですが、 この数式だと日付が変わるとそのセルは 表示が出なくなります。日付が変わっても そのシートの計算された数字はそのまま残るようにするにはどうしたら良いでしょうか? 無理なのかな? 教えて下さい。 A3以降A列には毎日の日付を入力してあります。    

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.6

#1です。 データの持ち方そのものを考え直した方が良いように思いますが、、、 計算元になるセル「O2」が毎日変わるのに値を保持するのは関数では不可能だと思います。 結果を値に置き換えるしかないでしょう。 自動化の方法は色々ありますが、一例です。 メニューの ツール- マクロ - VisualBasicEditor でVBE画面を開き VBE画面のメニューで 挿入- 標準モジュール として下記をコピペします。 Sub Test()  ActiveCell.Formula = "=SUM('Sheet1:Sheet3'!O2)"  ActiveCell.Value = ActiveCell.Value End Sub 使用例は 合計  Sheet1  Sheet2  Sheet3 のようにシートが並んでいるとして、「合計」シートのセルを選択し、 ツール-マクロ-マクロから実行します。 合計するのはシート名が Sheet1で始まり Sheet3で終わる間の各シートのセル「O2」です。 試すならテスト環境で。

mitigusa
質問者

お礼

丁寧な 説明ありがとうございました。 不慣れなため マクロ VB 大変です。 回答を参考に がんばって 希望のエクセル表を作成いたします。まだ、ちょっと手直ししたい所が有りますが自力でがんばって見ます。 本も3500円で購入してきました。 また、行き詰ったら 質問するかも知れませんが その時は よろしくお願いします。 

その他の回答 (7)

  • jindon
  • ベストアンサー率43% (50/116)
回答No.8

#7 jindonです。 codeに一箇所ミスタイプがありました。 以下に変えてください。 なお、合計はA列の本日日付のB列(日付の隣のセル)に表示されます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim x, y, z With Target If .Column <> 1 Or .Row <= 1 Or .Count > 1 Then Exit Sub Application.EnableEvents = False Application.ScreenUpdating = False If .Value = Date Then x = Sheets("sheet1").Range("O2").Value y = Sheets("sheet2").Range("O2").Value z = Sheets("sheet3").Range("O2").Value .Offset(, 1).Value = x + y + z End If Application.EnableEvents = True Application.ScreenUpdating = True End With End Sub 6行目のFalseがfaseになっていました。

mitigusa
質問者

お礼

丁寧に ご説明して頂ありがとうございます。 VBAですね。難しくて 避けていました。 他の方の お礼でも書きましたが、 VBAも含めて 少しは勉強して 自分のものにしたいと思います。 このたびは 修正まで 解答していただき ありがとうございました。 また、煮詰まったとき相談の質問をするかも知れませんが その時はまた ご指導よろしくお願いします。  

  • jindon
  • ベストアンサー率43% (50/116)
回答No.7

関数では無理かな? 思い切ってVBAでは? 下のコードをコピーして 合計を記入するシート見出しを右クリック -> コードの表示 -> 右空白部に貼り付け -> エクセル画面に戻る A2から下方に本日日付を入力すると合計された「値」が入力されます。(数式ではないので以後変化しない) Private Sub Worksheet_Change(ByVal Target As Range) Dim x, y, z With Target If .Column <> 1 Or .Row <= 1 Or .Count > 1 Then Exit Sub Application.EnableEvents = False Application.ScreenUpdating = fase If .Value = Date Then x = Sheets("sheet1").Range("O2").Value y = Sheets("sheet2").Range("O2").Value z = Sheets("sheet3").Range("O2").Value .Offset(, 1).Value = x + y + z End If Application.EnableEvents = True Application.ScreenUpdating = True End With End Sub

  • gicchon
  • ベストアンサー率34% (25/72)
回答No.5

補足を考慮すると、結論はこうです。 式は変更しないのに、式の元になるデータが変わると再計算されるので、クリアすると消えるのは当たり前です。(クリアされた値で再計算されるからです) ですから、クリアする前に計算結果の値を手で入力しなおす必要があります。クリア処理をマクロで行っているなら、計算結果で塗り替えれば良いと思います。

mitigusa
質問者

お礼

ご解答 ありがとうございます。 やはり エクセル関数の範疇で無理ですか。 「クリア処理をマクロで行っているなら、計算結果で塗り替えれば良いと思います。」と有りますが マクロは全く解りません。もう少し詳しく解説して頂けるとありがたいのですが、計算結果で塗り替え? クリア処理もマクロでしていません 単純に範囲指定して、クリアーしてます。

noname#11629
noname#11629
回答No.4

ツール→オプション→計算方法タブで、計算方法が 「自動」のところにオプションボタンのチェックが入っていれば、問題はないはずですが。

mitigusa
質問者

お礼

回答 ありがとう御座います。 質問の仕方が 悪くて申し訳有りません 補足説明しましたので、この事を考慮に入れてよろしくお願いします。 コピペで申し訳有りません。

  • buobuo
  • ベストアンサー率0% (0/1)
回答No.3

TODAY()>=A3、つまり IF(TODAY()>=A3,シート1!$O$2+シート2!$O$2+シート3!$O$2,IF(A3<100000,"")) で、大丈夫では? この条件意味は、 TODAY()=A3 → 今日がA3の日付だったら TODAY()>=A3 → 今日の日付がA3以前だったら です。

mitigusa
質問者

お礼

回答 ありがとう御座います。 質問の仕方が 悪くて申し訳有りません 補足説明しましたので、この事を考慮に入れてよろしくお願いします。 コピペで申し訳有りません。m(__)m

  • gicchon
  • ベストアンサー率34% (25/72)
回答No.2

これはどうですか? IF(A3<=TODAY(),シート1!$O$2+シート2!$O$2+シート3!$O$2,"")

mitigusa
質問者

お礼

回答 ありがとう御座います。 質問の仕方が 悪くて申し訳有りません 補足説明しましたので、この事を考慮に入れてよろしくお願いします。 

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

ご質問そのものが良く解りません。 シート1~シート3のセルO2を絶対指定($O$2)してますよね? 絶えずここの合計を出したいなら日付とどんな関係があるのか解りません。 シート1~シート3の$O$2は毎日変わるので、合計した結果を履歴として残しておきたいって事?

mitigusa
質問者

補足

早々回答ありがとう御座います。質問の仕方が悪いですね。 回答の通りシート1~3の$0$2は毎日変ります。 入力したシート毎のデーターは毎日クリアーします。合計がOSのセルです。 この合計した結果の履歴を残して日付毎に管理したいのです。 絶対参照にしたのは 数式のコピをしたかったので絶対参照してます。 次のIF以下データーの無い時は 空白にしたくて適当に数値を入れてます。 9/19 書いた関数   9/20 書いた関数  9/21 書いた関数 この様な表を作ると 20日成れば 19日の結果の履歴が消えてしまうので、一旦、結果が反映された物はそのまま 消えないようにしたいのです。 こんな説明で 解りますか?

関連するQ&A

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセルの関数でどうしても解らないことがあります。

    エクセルの関数でどうしても解らないことがあります。 例えば   A   B   C  D  E 1 2 3 4 5 このセルでA列に文字を入力した時、E列にその入力した日を表示させる関数で困っています。今は=+IF(A1="","",TODAY())をE1に入力しているのですが、翌日になると1日プラスされた日付に変更されています。 ツールの計算方法を自動にしているのですが、同じシート内に他の計算式を入力しているので手動に変更できません。翌日になっても日付が変更されない方法は無いでしょうか?詳しい方宜しく願います。

  • エクセルの関数について

    Sheet1  |**********| Sheet2       A       B 1|2005/01/20|ABC| 2|2005/03/15|DEF| 3|2005/04/20|XXX| わかりずらくてごめんなさい。エクセル初心者です。 関数のことで質問させてください。 Sheet2の「B」の列に「ABC」の語を含んでいた場合、Sheet1の「********」のセルに「A」の列の日付に半年をプラスした日付を表示させたいのです。 もし含んでいない場合は、表示しなくてもいいのですが、この場合どのように数式を作っていいのかわかりません。 ちなみに自分で作った数式は =if(sheet2!B1=”ABC”,date(year(sheet2!A1)+0,month(sheet2!A1)+6,day(sheet2!A1)+0),””)でした。 しかし、これでは「B2」や「B3」に「ABC」が入った場合には適用されません。 頭が痛くなってきたので質問させていただくことにしました。 よろしくお願いいたします。

  • エクセル 関数の結果が日付になるようにする方法

    エクセル2003を使用しています。 現在、シートAのセルT20に、1月16日と入力すると シートBのセルA5に、自動的に1月16日と表示されるようになっています。 (シートBのA5の数式は、 =シートA!T20 です。) この場合、シートAのセルT20が空白の場合、 シートBのセルA5は、1月0日 と表示されます。 シートAで空白の場合は、シートBでも空白にしたいので、 シートBのセルA5の数式を =シートA!T20&IF(シートA!T20="","",) としました。 すると、結果が、40559 となってしまいます。 セルの表示形式を日付にしても、どうしても数字になってしまいます。 どうすればよいか教えてください。 よろしくお願いいたします。

  • エクセル関数を使いこの様なことができますか?

    こんにちは エクセルのあるセルに数式(又は関数)を入力し、別のセルに数字を入力したら、セルの塗りつぶしの色が設定しておいた色に変わるようなことはできないでしょうか? (例えば、C1には当初は何も入力されておらず、そのC1にある数字を入力するとA1のセルの色が赤に変わるようなことを考えています。なお、色を変えたいセル自身には数字が入力されている場合といない場合と二通りあるため、いずれの場合も対応できるようにしたいのです。 つまり、初期状態では、A列(色を変えたいセル列)には数字が入ったセル、入っていないセルが混在しており、C列(ここに数字が入力されるたびにA列の対応する行のセルの色を変えたい)には何も入力されていない。この状態で、任意のC列のあるセルに数字を入力すると同じ行にあるA列のセルの色を変えたい、ということをしたいのです。) 具体的にA列にどの様な数式を入力すればよいかを教えて下さい。 (或いは、そのようなことをするための式(関数)はA,C以外の列のセルに入れる必要があるかもしれませんが(例えばB列)、それでもかまいません) よろしくお願いします。

  • エクセルの関数の式について教えてください

    数式を教えていただけないでしょうか? 言葉だけでの説明では難しいのですが、 TODAY関数で日にちが変わるごとに、c2セルに日計、c3セルに月計、c4セルに年計を入力して、 日計を入れると自動的に月計、年計も合計され、月が変わって日計と月計が0になっても、年計のc4のセルは数字が残り、前月までの合計が出されるような式はないでしょうか? 言葉だけでの説明でわかりづらいと思いますが、よろしくお願い致します。

  • Excelの関数『IF』にて・・・

    EXCELにて、関数IFを使って一覧表から 自動入力をしたいと考えています。 例えば、以下のようにしてセル『C1』の数字に 応じて、自動を試みたい時 =IF($C$1>80,"=A1",IF($C$1>70,"=B1","=C1")) =A1,=B1,=C1 の場所を文字列としてしか読み取ってくれません =A1,=B1,=C1では無く=A1,=B1,=C1のセルに入力されてる 数式(他のセルの値)を、表示したいんですが どのようにすれば可能でしょうか? 何度やっても「=A1」と、そのまま文字列として出て来ちゃいます。

  • エクセル(Excel2003)のIF関数で再び質問です

    他の近い質問と回答を拝見して作ってみましたが、数式が間違っているようでエラーが出てしまうので教えてください。 度々の初歩的質問ですみません… SHEET2のセルA1に、SHEET1のセルA1が 1だったら1、 2だったら0.8 3だったら0.6 4だったら0.2 5だったら0 それ以外は- を表示させたいです。 =IF(SHEET1!P28=5,0,(SHEET1!D28=4,02,(SHEET1!D28=3,0.6,(SHEET1!D28=2,0.8,(SHEET1!D28=1,5,"-"))))) と入れましたが、入力した数式は正しくありません と出てしまいました。 どなたか添削していただけませんでしょうか。 Excel2003を使用しております。 よろしくお願い致します。

  • EXCELの関数を教えてください。

    シート1 A列には1と2 B列には名前 C列には備考1(入力のあるセルもあればないセルもあり)が入力されたシートがあるとします。行は無限です。 シート2への表示を A列に1が入力されていた時のみC列の備考欄に入力されている文字をかえし、空白の場合は空白にしたいのです。 A列に2が入力されている場合は全部が空白です。 IFとISBANKの組み合わせみたいな感じなんですがよく分かりません。宜しくお願いします。

  • Excel2003でif関数を使うとSUM関数で反映されません

    A1セルに金額を入力すると、B1に1と表示させる為に=IF(A1,"1","")といった数式を入れております。 さらにC1にBセルの合計値を表示させる為に=SUM(B1)C2には=SUM(B1:B2)と入力しているのですが、B列のセルにIF関数を使った数字『1』が表示されてもC列セルに反映されないので困っています。 ここで質問ですが、A列セルに金額が入力されるとB列セルに数字『1』が表示され、更にC列セルにB列セルの合計値が表示される様な関数等はありますでしょうか?解り難い説明ですいません。 因みにA、B、C列共に1~31までのセルがあります。

専門家に質問してみよう