• 締切済み

Excelの条件式について

 現在Excelで、条件に合うセルはデータを更新し、条件に合わないセルはその既存の値を保持するという条件式をずっと考えていますが、どうしてもやり方がわかりません。  どなたかご教授していただける方いましたらよろしくお願いします。 if(式、真の場合(=更新データ)、偽の場合(=今そのセルにあるデータを保持)) の偽の場合がどのように指定すればよいかわからないということです。

みんなの回答

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.4

#1 Cupperです。 回答が少し曖昧でしたね。反省しています。 できないものはハッキリと不可能と書くべきでした。 Excelには 「値の書き変えたり、保持する関数・数式」 はありません。 参照する先のデータが毎回変更され以前のデータは失われるのであれば 得られた値を手動でコピーしておくか、VBAで記述し保持・コピーする以外に方法はありません。 関数式だけで実現することは 【不可能】 です。 納得していただけたでしょうか。 コピー範囲が広く手動で行なうのは煩雑と言うのであれば、コピーの手順を記録マクロにしては如何でしょう。 記録マクロであればVBAに詳しくない方でも容易にマクロ登録することができますよ。 あるいは、そのようなマクロを含むワークシートの作成を専門の業者に依頼しては如何でしょう。

uia_lv
質問者

お礼

 どうもありがとうございました。VBAを多少勉強してマクロでやってみようと思います。

noname#79209
noname#79209
回答No.3

エクセルのワークシート関数には、セルを更新する機能はありりません。 どのような表を作ろうとしているのか解りませんが、 もしかしたら、以下のような事を考えておられるのでしょうか? A列が日付のセルで、A3から縦に今月の日が昨日の分まで入っている。 そこで、昨日の分の下のセルが空白なら、そこへ今日の日付を入れる(書き込む)。 もしそうなら、不可能です。 書き込みでなく、表示させるかさせないかなら可能です。 A1に「2007/5」と入力。 A3に「=IF(TODAY()>=DATE(YEAR($A$1),MONTH($A$1),ROW()-2),DATE(YEAR($A$1),MONTH($A$1),ROW()-2),0)」 A4に「=IF(AND(TODAY()>=A3+1,A3>0),A3+1,0)」 これをA5からA30にコピー。 A31に「=IF(AND(TODAY()>=A30+1,A30>0,DAY(A30+1)>28),A30+1,0)」 これをA32とA33にコピー。 A3からA33を選択し、表示書式に「yyyy/m/d;;」を設定。

uia_lv
質問者

補足

私のエクセルファイルの状態を書いてみます。 ・ソースのワークシート(このワークシートはマクロを含み、この機能を用いてそのワークシートのデータを更新すると、データがその日のものになり、日付が入力してあるセルも更新した日になる。) ・作業ワークシート このワークシートの概要は下のようになっています。   A   B   C 1 5/22 5/23 5/24 2 関数 関数 関数 3 関数 関数 関数            条件                       真         偽 関数=if(関数のある列の先頭の日付=ソースシートの日付,ソースデータ,***)  つまり、マクロによりソースワークシートでデータが更新され、そのワークシートに記載された日付が更新されると、自動的に作業ワークシートではソースワークシートの日付と一致した列にはデータが入力されるという仕組みです。しかしこれだと日付が一致しない場合、例えば、ソースワークシートのデータを更新して5/23になると、前日5/22のときに真となってA列に入力されたデータは、次の日「偽」になり、条件式***というものが何かしら入力されてしまいます。  そこでこの***に「何もしない」いわゆるデータを保持という命令がないかを探していたのです。  前日のものを更新する前にコピーして値として同じセルに貼り付ければ問題ないといえば問題ないのですが、何しろ範囲が多すぎて1日ごとにコピーすることが大変でしたので何かいい方法はないかと、質問させてもらいました。  恥ずかしいながらマクロを含むシートはDLしたもので、私が書いたものではありません。また自分でVBAを組むことが出来ないため、なんとか関数で出来ないものかと思っています。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

参考にしてください。 A B C D E 1 =IF(A3=2,"OK","NG") 2 =IF(A4=2,"OK","NG") 3 =IF(A5=2,"OK","NG") 5 =IF(A6=2,"OK","NG") 6 =IF(A7=2,"OK","NG") 1 =IF(A6=2,"OK","NG") 結果 1 NG 2 OK 3 NG 5 NG 6 NG 1 NG     =IF(A4=2,"OK","") とした場合(以下省略) 結果           1 2 OK 3 5 6 1 となります。

uia_lv
質問者

補足

回答ありがとうございます。 A列に当たるデータが常に別のどこかに存在すればいいのですが私の場合存在しません。あるとき(具体的に日付)が一致したときにそこにソースからデータが入るような関数を設置しているのです。 つまり、日付が違えば以後そこにあるデータは更新されることはありません。 また、Nayutaさんの方法ですと条件に合わない場合、条件式を書いたセルに空白の文字が更新されてしまい、もとあったそこのデータが失われます。 説明不足だったようで申し訳ございません。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

条件式と言うのはVBAの事でしょうか。 Excelはすでに入力されている数値を関数で変更することはできませんので、関数ではなくVBAで設定する必要があります。 残念ながら自分はVBAには詳しくないため他の方からの回答を参考にしてください。 関数式で行なおうと言うのであれば、別にデータが入力されている一覧表を作成し その表を参照する条件を設定することで実現できます。

uia_lv
質問者

補足

回答ありがとうございます。 VBAではありません。関数だけでの定義です。 自己参照以外でやる方法を探しています。

関連するQ&A