• 締切済み

日付が新しい数値を参照する。

いつもお世話になっております。 さて質問ですが、下に例を作成してみました。 現在は、B1に下のような式が入っています。 =IF(A1>0,A1*108,0) A1に数値を入れB1に答えが出るといった感じ、これが365日入力しています    A  | B  | -------------------    3  | 318 | 式の中にある108という数値は「ふるい」の係数で、ふるいには一体型と分離型があり一体型の場合は108、分離型の場合は99と係数があります。 ふるいをして残った量(セルA1)に、一体型を使用した場合は108、分離型を使用した場合は99という風に計算しています。 そして、この係数は2週間に一度、校正をし厚生値が変わる度打ち変えています。 で、質問は 1)別のシートに校正値というシートを作り、そこに日付、一体型、分離型という見出しを作り校正する度に入力すればB1の数値が日付の新しいものを参照する。    日付  | 一体型|分離型| ------------------------------ 1|2007/08/01 | 106|     | 2|2007/08/01 |   |  96 | 例えば、こういった感じで   A  | B | C | ------------------------ 1| 分離型| 3 | 318| A1は入力規則で選ぶようにして、B1に数値を入力するとA1を参照し、別シートの校正値から日付の新しい分離型を選び計算する。 2)B1の数値は校正値が新しいものを参照するが、一度計算されたものは校正値が新しくなっても書き換えられない。 こういうものは作成可能ですか? わかりにくい質問文ですが、ご教授願います。

みんなの回答

回答No.2

一度計算されたものは校正値が新しくなっても書き換えられない。 がネックになります。再計算するものと再計算しないものが同居するのですから。 日付の新しいものを参照する、に関しては MAX関数で日付の大きなものを探し MATCH関数で大きな日付が表の何行目か探し 行と列をINDEX関数で値を取り出す ということでいけると思います。校正値シート10行目までデータがあるとして B列を求める場合 =INDEX(A1:C10,MATCH(MAX(A1:A10),A1:A10,0),2) C列を求める場合 =INDEX(A1:C10,MATCH(MAX(A1:A10),A1:A10,0),3) でいかがでしょうか。 同じ日付が複数あると求める結果と異なります、時刻も入力される等で対応してください。 一度計算されたものは校正値が新しくなっても書き換えられない。 のは計算式ではなく[値]ですので、コピー貼り付けで計算式を値にしてもらうしか浮かびません。 マクロで組むことは可能です。

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.1

「一度計算されたものは校正値が新しくなっても書き換えられない。」というのでしたらVBAしかないと思います。 A列とB列にデータが入力された直後に次の(1)~(3)の一連の処理をVBA(末尾に記載)に自動的にさせれば可能です。但し、データ入力シートの全セルを選択し、書式(O)→セル(E)→保護→ロック(L)のチェックを予め一度だけ外しておく必要があります。 ☆VBAに行わせる一連の処理 (1)C列に計算結果値を代入する (2)計算値をセットされたC列のセルに対し書式(O)→セル(E)→保護→ロック(L)を掛ける (3) ツール(T)→保護(P)→シートの保護(P) ※ainouracho様、(1)にてC列に計算値をセットした際D列かどこかに、その時の係数値の書き込みの必要はありませんか。 ☆VBAのコピペ VBAを、シート名タグを右クリック→コードの表示(V)で表示されるコードエリアに貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim kata As String ActiveSheet.Protect Contents:=False clm = Target.Column Select Case clm Case 1 'B列、A列の順に入力された場合 kata = Target If Target.Offset(0, 1) <> "" Then Select Case kata Case "一体型" Target.Offset(0, 2).Value = Worksheets("校正値").Range("B2") * Target.Offset(0, 1) Case "分離型" Target.Offset(0, 2).Value = Worksheets("校正値").Range("C3") * Target.Offset(0, 1) End Select Target.Offset(0, 2).Locked = True ActiveSheet.Protect Contents:=True End If Case 2 'A列、B列の順に入力された場合 kata = Target.Offset(0, -1) Select Case kata Case "一体型" Target.Offset(0, 1).Value = Worksheets("校正値").Range("B2") * Target Case "分離型" Target.Offset(0, 1).Value = Worksheets("校正値").Range("C3") * Target End Select Target.Offset(0, 1).Locked = True ActiveSheet.Protect Contents:=True End Select End Sub

関連するQ&A

  • 日付が新しい数値を参照する。

    いつもお世話になっております。 さて質問ですが、下に例を作成してみました。 現在は、B1に下のような式が入っています。 =IF(A1>0,(25-(A1*4.9404)*5)/40,0) A1に数値を入れB1に答えが出るといった感じ、これが365日入力しています    A  | B  | ------------------- 1| 0.3527 | 0.41 | 式の中にある4.9404という数値は薬品の校正値で2週間に一度、校正値が変わる度打ち変えています。 で、質問は 1)別のシートに校正値というセルを作り、そこに入力すればB1の数値が日付の新しいものを参照する。    日付  | 校正値 | ------------------------------ 1|2007/08/01 | 4.9459 | 2|2007/08/17 | 4.9423 | 2)B1の数値は校正値が新しいものを参照するが、一度計算されたものは校正値が新しくなっても書き換えられない。 こういうものは作成可能ですか? ご教授願います。

  • エクセルで日付が数値に変わってしまいます・・・

    エクセルで、関数CONCATENATEを使い別のシートから入力内容を貼り付けます。 例えば、CONCATENATE(SHEET2!A1,SHEET2!A2)とした場合、 SHEET2 A1 に(申請日)A2に日付(2007/08/21)が入っていると関数によって表示されるのは (申請日39315)と、2007/08/21が5桁の数値になってしまいます。これを日付表示させることはできるでしょうか?

  • Excel IF関数での循環参照回避方法

    IF関数を使用し、計算式を作成したいのですが循環参照になってしまい困っています。 (計算式内容) A1:2010.01(日付を入力) E1:A1同様の形式で日付を入力 E2:数値を入力 A2に、=IF(A1=E1,E2,A2) A1とE1の日付が同じならば、E2の数値を表示し、異なる場合は現在A2に表示されている数値を表示したいのですが、循環参照させずに計算式を作成する事は可能でしょうか?

  • セルに入力した数値をもとに参照するセルを決めるには

    数式で、セルに入力された数値をもとに参照するセルを決定する方法が知りたいです。 セルに入力された数値をもとに参照するセルを決定したり Sheet1のセルA1に「300」と入力したら、 Sheet2のA列から「300」を検出し、C4の位置にある「バナナ」を Sheet1のセルB2に反映させるにはどうしたらよいでしょうか? イメージ画像添付しました。 Sheet2のA列は順不同で、並び替えることができません。 エクセル2010を使用しています。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします

  • 2つのセルを一つに・・しかし、日付のセルが数値に変わってしまう

    セルには     A        B      1 2005年5月   修正あり  と入力されています。 C1に、AとBに入っている文字をつなぎ合わせ、更に結合した部分を:で区切ろうと思い、C1セルに「A1&":"&B1」と入れました。 すると、C1に 36647:修正あり と出てしまいました。 日付が数値に切り替わっちゃったのですが、日付は日付で数値に切り替わらないようにする方法はありますか? 500行ぐらいあるので・・お願いします。

  • エクセルでセル参照後数値で張り付けて保存

    いつも大変お世話になっております。 以前より画像の添付がうまくいかないので「お絵かき添付」にしましたがうまく表示されるか自信が無いので、出来るだけ文字で表現(質問)させていただきます。 試験結果を入力するシートがあり行方向に色んな特性データが入力されていきます。 B列にLOT No、E列とF列には別シートの毎回同じセルを使用する計算表の計算結果のセルの値を引っ張てきたいのです。 B列のLOT Noと計算シートに入力されたLOT Noが同じなら入力表のE列の最下行(最新データのセル)に計算結果のセルの値を参照させたいのです。 そこで入力表のE列にLOTが同じなら「=計算表のC35」(違えば空白)として下にコピーを取って、保存前にマクロでシート全体をコピし数値で貼り付けたら、と思ったのですがシート全体を数値化するとE列の参照の式も空白に変わってしまう事に気付きました。 また、試しにやってみたら非常に時間がかかって使えないことが判明しました。 E列、F列に参照で入力された値は保存前に数値化しないと次のLOTの計算結果の時には空白になってしまいます。 当方の実力ではここまで。 分かりにくいかもしれませんが何とかよろしくお願い致します。 別シートのいくつかの計算結果の平均や最大値等を入力表に転記していて失敗したのでその再発防止対策です。

  • エクセルで参照する別シート名をセルに入力したい

    エクセルで参照する別シート名をセルに入力したいです。 (1) sheet2とsheet3にそれぞれA1:B10の表があります。    A列には氏名がB列には数値が入力してあります。    (同じ表で月度が違います。) (2) vlookup関数を使ってsheet1のA列に氏名を入力して対応する数値を    B列に求めたいです。 (3) この時、sheet1のC1に「sheet2」「sheet3」と入力することで    参照するシートを変えたいのですが、方法が解りません。 そもそも可能かどうかも解らず、悩んでいます。 ご教授お願いいたします。   

  • エクセル2007のシート内にあるセルAから数値を参照したいのですが、参

    エクセル2007のシート内にあるセルAから数値を参照したいのですが、参照を反映するセルBの中にはテキストが入っております。1セルのテキストとテキストの間に数値を参照反映するにはどのようにしたら良いでしょうか? セルA 3000 セルB テキスト (参照した数値を入れたい) テキスト

  • DB抽出の日付が参照できない

    DB抽出データをエクセルに出力して仕事用に参照しています。 エクセルA列1に任意の日付を入力して、仕入れの集計をしてるのですが、参照してくれません。(一致しない?) 抽出されたエクセル日付列のデータ書式定義をみると、 「ユーザー定義dd-mmm-yyyy」となっており、 データは、 (例) 日付列 2008/6/10 6:53:41 と時間まで入っていました。 DBに書き込まれた時間だと思いますが。。。? A1に任意入力「6/10」して、日付列と一致した場合に、 仕入れ数を合計したいのですが、 条件を B1=A1 B1=DAY(A1) B1=MONTH(A1)・・・ などいろいろ試みたのですが、抽出してくれませんTT 日単位でいいのですが、時間まで一致しないとだめなのでしょうか? スキル足りません・・・お力を

  • Excelの条件付き書式、直接入力と参照した数値は違う?

    Excelの条件付き書式、直接入力と参照した数値は違う? Sheet1のA1セルの数値を Sheet2のA1セルが「=IF(Sheet1!A1="","",Sheet1!A1)」という数式で参照しています。 数値に、「%以上」という文字列を追加したいので、 Sheet2のA1セルの書式設定を、ユーザー定義で「0"%""以""上"」としています。 Sheet1のA1セルに数値を入力 → Sheet2のA1セルが参照 → ユーザー定義で「○%以上」と表示させる。 ・・・ここまでは簡単にできました。 さらに、数値が表示されたときにセルの色を赤くしようと、 条件付き書式で、 「セルの値が 次の値以上 0」 と設定したのですが、入力が無くても赤いままになってしまいます。 設定を、 「セルの値が 次の値以上 ="0"」とか、 「セルの値が 次の値より大きい 0」とか、 いろいろとやってみましたがどうしてもうまくいきません。 参照ではなく、セルに直接入力するのであればこれでうまくいっていましたので、簡単に出来るものだと思っていたのですが、 これはたぶん、私が根本的なことをわかっていないのだと思います。 ご教授頂けましたら助かります。

専門家に質問してみよう