1203425794 Excelで、入力したデータがたまってゆくものを作りたいのですが、どのようにしたら良いでしょうか。

循環参照を使うとできるという話を聞いたことがあるのですが、どのように使ったらよいかわかりませんでした。
できそうに無い場合は、全部をリンクさせてつくろうかなと思っているのですが…。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/02/21 18:19:57
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント77pt

循環参照を使う方法を紹介しますと。

まず、循環参照を使えるようにするために

ツール→オプション→計算方法で反復計算にチェックをいれて反復回数を1回以上にします。

図の場合ですと、月予定のC4せるの数式を

=IF(DAY(Sheet1!$A$6)=A4,Sheet1!$A$7,IF(DAY(Sheet1!$E$6)=A4,Sheet1!$E$7,C4))

にして下に数式をコピーします。

これで、今日の予定シートがSheet1でA6セルとE6セルに日付が入っていればご希望の動作をします。

ただし、

A6セルを=Today()とかにすると、日付が変わった後に勝手に前日の予定を上書きします。

これについてはもう一工夫必要になってくると思います。

id:isaihara

ありがとうございます。やってみたのですが、なぜか0以外表示されませんでした。でも、DAYを取り除いて、最後のC4を" "にするとイメージに近い形で表示されたのですが、これでも問題は無いでしょうか。

2008/02/20 23:23:37

その他の回答2件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント33pt

マクロを使えば簡単に作れます。

図の位置関係でいくと、今日の予定のシートのWorksheet_Changeイベントに次のようなマクロを入れます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 7 And Target.Column = 1 Then
        With Worksheets("Sheet2")
            .Cells(Day(Range("A6").Value) + 3, 3).Value = Range("A7").Value
        End With
    End If
    If Target.Row = 7 And Target.Column = 5 Then
        With Worksheets("Sheet2")
            .Cells(Day(Range("E6").Value) + 3, 3).Value = Range("E7").Value
        End With
    End If
End Sub

A6セルの数式を=today() E6セルの数式を =today()+1 として日付型にして

月の予定をSheet2にしています。

図から想像したサンプルですので、実際の予定表にあわせて変更してください。

id:isaihara

ありがとうございます。早速試してみたいと思います。

まずこの方法で作ってみたいと思います。

マクロを使わないものがあれば一番良いのですが、難しいでしょうか。

2008/02/20 19:20:21
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント77pt

循環参照を使う方法を紹介しますと。

まず、循環参照を使えるようにするために

ツール→オプション→計算方法で反復計算にチェックをいれて反復回数を1回以上にします。

図の場合ですと、月予定のC4せるの数式を

=IF(DAY(Sheet1!$A$6)=A4,Sheet1!$A$7,IF(DAY(Sheet1!$E$6)=A4,Sheet1!$E$7,C4))

にして下に数式をコピーします。

これで、今日の予定シートがSheet1でA6セルとE6セルに日付が入っていればご希望の動作をします。

ただし、

A6セルを=Today()とかにすると、日付が変わった後に勝手に前日の予定を上書きします。

これについてはもう一工夫必要になってくると思います。

id:isaihara

ありがとうございます。やってみたのですが、なぜか0以外表示されませんでした。でも、DAYを取り除いて、最後のC4を" "にするとイメージに近い形で表示されたのですが、これでも問題は無いでしょうか。

2008/02/20 23:23:37
id:SALINGER No.3

回答回数3454ベストアンサー獲得回数969

ポイント33pt

たぶん、今日と次の日の日付の部分が(水)のように曜日が入っていることで日付型になってないからだと思います。

最後のC4部分が循環参照してる部分で、これを" "にすると今日の日付を変えた場合、前の日付の予定が消えることになります。

なぜ循環参照が必要かというのは、前に入力したデータを残すためです。

ワークシート関数を使う方法では、やはり明日の予定を入力しても、日付が明日になった時点で今日のデータが上書きされてしまうことになります。


それで、1のVBAを使った方法に、更にシートがアクティブになったときに月の予定から今日の予定を取得するコードを付け加えるといいと思います。

これで、A6セルに=Today()、E6セルに=Today()+1を入力しておくことで、次の日シートを開いたときに前日入力した明日の予定が今日の予定の欄に入っていてスムーズに入力できることになります。

Private Sub Worksheet_Activate()
    Application.EnableEvents = False
        With Worksheets("Sheet2")
            Range("A7").Value = .Cells(Day(Now) + 3, 3).Value
            Range("E7").Value = .Cells(Day(Now) + 4, 3).Value
        End With
    Application.EnableEvents = True
End Sub
id:isaihara

なるほど、ありがとうございます。

すごく助かりました。

2008/02/21 18:17:57

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません