質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.54%

  • Excel

    1896questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

Google SpreadSheetで式を値に変更する関数はありますか?

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,286

genie

score 1

スプレッドシート(excel)の関数についてです。

スプレッドシートでタスク管理表を作っています。
その際にプルダウンメニューで「Doing」「Done」の枠を設けました。
Doingにしたら隣の列にその時刻が開始時刻として表示され、
Doneにしたらその時刻が終了時刻として開始時刻の隣に表示されるようにしたいです。

IF関数を使って試してみて、
Doingにしたらその時刻が表示される
Doneにしたらその時刻が表示される
ようにはできました。

しかし、IF関数を使ってるため
どちらかを表示したらどちらかがFALSEになってしまいます。
これを両方表示させたままにしておきたいです。

やり方があるならなんでも教えて欲しいです。

一応自分の仮説では、
式が入力された瞬間に値に変更される関数などがあれば解決するな、と思っていますが正しいでしょうか?

回答よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

A列に入力時刻、B列にDoing/Done、C列に開始時刻、D列に終了時刻を記載するものとします。

この時、B列の状態によって表示内容を変化させたいのはC列とD列ですので、式はC列とD列のセルに記述することになります。

判断条件は、こう考えるとわかりやすいかもしれません。

C列はB列が"Doing"の時にA列の値を表示したい。
また"Done"になっても消したくない(表示したい)。

D列はB列が"Done"の時にA列の値を表示したい。

これを式にすると、例えば2行目なら

C2セル
=if(B2="Doing",A2,If(B2="Done",A2,""))

D2セル
=if(B2="Done",A2,"")


のようになります。

C2セルの式はもう少しスマートに、
=if(OR(B2="Doing",B2="Done"),A2,"")
と記述しても同じ結果が得られます。

お試しください。

追記

参考までにVBAで処理する場合のサンプルです。

対象シートのシートモジュールとして以下のような処理を記述すれば、B列の変更時にA列の値をC/D列に写すことができます。

'シート内に変更があった場合のイベント
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lRow As Long
    'B列を変更した場合
    If Target.Column = 2 Then
        '対象行取得
        lRow = Target.Row
        '変更後のB列の値
        Select Case Target.Value
        Case "Doing"
            'A列の値をC列に設定
            Cells(lRow, 3).Value = Cells(lRow, 1)
        Case "Done"
            'A列の値をD列に設定
            Cells(lRow, 4).Value = Cells(lRow, 1)
        End Select
    End If
End Sub

今回はVBAでの質問ではありませんでしたし、環境によってはマクロは私用したくない場合もあるかと思いますが、興味があればお試しください。

※ExcelではなくGoogleSpreadSheetなのでVBAは使用できませんでした。すみません。m(_ _)m

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/02 12:29

    ありがとうございます!試してみます!!

    キャンセル

  • 2017/02/03 14:37

    回答ありがとうございます!
    遅ればせながら試してみました。
    すると、Doneにした時にDoingの入力時刻もDoneにした時の時間に変更されてしましました。
    これを改善する術はあるでしょうか。

    キャンセル

  • 2017/02/08 15:23 編集

    回答遅くなりすみません、インフルエンザで臥せっていましたm(__)m

    >Doneにした時にDoingの入力時刻もDoneにした時の時間に変更されてしましました。
    つまり状態(DoneやDoing)が変化していく際、時刻セルも都度変化していく。
    状態の変化に連動して開始時刻・終了時刻も変動したいが、一度書いた時刻は変動したくない。
    ということですね。
    なるほど、それでタイトルの「式を値に」ということでしたか。

    式の結果は、その式を入力したセルに返されます。
    例えばA1セルに「B2セルの内容を値として出力する式」を記述したとして、A1セルにB2セルの内容が出力されたとします。
    この時、A1セルの内容は「B2セルの内容を値として出力する式」ですか?それともB2セルの値ですか?B2セルの値だとしたらいつ時点のB2セルの値ですか?
    ・・という具合に矛盾した話になりますよね。

    結論を言うと「計算結果を値として出力する関数」や「一度評価したら値に置き換わるような関数」は存在しません。

    式で対応しようと思うなら、どこかに求める値を持っておくか、計算で導けるようになっていなければなりません。
    時刻セルの値が上書かれた時点で、元の時刻の情報はどこにも残っていないので参照しようがないのです。
    時刻セルの内容が変更されるまえに「コピー」⇒「値として貼り付け」を行っていれば別ですが、これを手作業で行うのでは自分で時刻セルから開始時刻にコピペするのと大差ないものになってしまいます。

    なので実現するならマクロを使わなければならないと思います。

    キャンセル

  • 2017/02/10 16:24

    丁寧な回答ありがとうございます。
    自分の中でもそういう結論に達しました。

    幸い日付や時刻を入力するショートカットキーがあったので
    それで最小の手間で済ませることにしました。

    わかりやすくご指導いただきありがとうございました!

    キャンセル

  • 2017/02/10 17:23 編集

    参考までにVBAで処理する場合のサンプルコードを回答に追記させていただきました。
    興味があればお試しください。

    キャンセル

  • 2017/02/10 17:54

    そもそもExcelではなくSpreadSheetでしたね。。
    VBAは使用できませんでした・・すみませんm(_ _)m

    キャンセル

同じタグがついた質問を見る

  • Excel

    1896questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。