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

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

ただいまの
回答率

89.63%

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

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,454

genie

score 5

スプレッドシート(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/10 16:24

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

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

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

    キャンセル

  • 2017/02/10 17:23 編集

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

    キャンセル

  • 2017/02/10 17:54

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

    キャンセル

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

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる