
初心者のため、伝わるかわかりませんが、
次のような動作をVBAで行えなくて困っています。
・行いたい事 (※前提として"行"ごとに実行します)
J列が"1"だった場合、
L列にJ列が"1"になった日付(yyyy/mm/dd)を入力する
ただし、J列には関数を使用し"1"と表示されているため
セルの値変更ではありません。
・現在のVBA
Private Sub Worksheet_Calculate()
If Target.Row >= 1 And Target.Row <= 100 And Target.Column = 10 Then
With Target.Offset(, 2)
.Value = Now()
.NumberFormatLocal = "yyyy/mm/dd"
End With
End If
End Sub
※J列が関数を使用しているため、Calculateにしています。
2行目の↓の部分でエラーになってしまっています。
> If Target.Row >= 1 And Target.Row <= 100 And Target.Column = 10 Then
どなたかご教授いただけたら助かります。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ANo.4です。
> 最初の説明で一部抜けていたのですが、
> L列(日付代入列)にはすでに関数が入っており、
> これを実行するためには、
> J="1"の場合"L"を一度クリア ⇒ 日付入力
> の手順にすればよいのでしょうか。
今現在は、J列の値が1でL列が空白の場合のみ、L列に日付を入れています。
現在L列に入っている関数が何をする物かわかりませんので、消して良いのかどうかの判断は私ではできません。
ご自分でよく検討してどのような場合なら日付で書き換えてしまって良いのか考え、マクロに反映してください。
そうでなければ、マクロでチェックと日付を入れる列を別な列にして、L列の関数はその列に日付が入っていれば日付を、入っていなければ今までの関数の結果を表示する様にすればよいでしょう、
この回答への補足
度々ありがとうございます。
L列の関数は日付代入の時にはクリアにして良い内容となっています。
別の列へ日付を入れ、それを参照させる方法は思いついていなかったですが
これだとスムーズにできるかもしれません。
No.4
- 回答日時:
こんなのでやりたい事になりませんか?
J列の値が1から変化してもL列の日付は消えませんし、再度1になっても更新しません。
Private Sub Worksheet_Calculate()
For i = 1 To 100
If (Cells(i, "J") = 1) And (Cells(i, "L") = "") Then
Cells(i, "L") = Now()
End If
Next i
End Sub
この回答への補足
ありがとうございます。
これでやりたい事になりましたが、1点問題がありました。
最初の説明で一部抜けていたのですが、
L列(日付代入列)にはすでに関数が入っており、
これを実行するためには、
J="1"の場合"L"を一度クリア ⇒ 日付入力
の手順にすればよいのでしょうか。
試してみましたが、手段が間違っているようでしたので、
もしご存知でしたら、ご教授いただければと思います。
No.3
- 回答日時:
方法1:アナタがやりたかったこと
private sub Worksheet_Calculate()
dim h as range
application.enableevents = false
for each h in range("J1:J100")
if h = 1 then
h.offset(0, 2) = now
else
h.offset(0, 2).clearcontents
end if
next
application.enableevents = true
end sub
方法2:正攻法
通常のエクセルの作り方では,J列に並んだ計算式が実際に計算される前,まずどこか別のセルに「元の値」を手で記入し,それを受けてJ列の該当するセルが1なりナンなりに変わります。
例:
J1に
=H1
であれば,H1が元のセル(H1に記入すると,J1が計算される)です。
例:
J1に
=SUM(E1:H1)
であれば,E1からH1のどれか(一つ又は複数同時に)が編集されると,J列が変わります
例:
J1は
=H1
だけど,そのH1は
=Sheet2!G1
になっているなら,シート2のG1が計算の出発点セルです
calculateイベントではなくchangeイベントを使い,これらの出発点セルに対して,そのセルを変えたらどのJセルが変わるのかに応じて,変わるJ列セルが1になったか否か調べてL列に日付時刻を記入します。
#参考:
言わずもがなですがJ列が「他のセルに手で記入しなくても」勝手に計算が変わる場合は,この方法は利用できません。
2つの方法を教えていただきありがとうございます。
方法1についてですが、こちらではL列に日付を代入できますが
J列が"1"の場合L列すべてが変更されてしまいます。
"行"ごとに実行させる方法があればそちらを試したいと思います。
方法には、おっしゃる通り直接データ変更が必要なため
他の方法がなく、最終手段になった場合はこちらを
参考にさせていただきたいと思います。
No.1
- 回答日時:
Worksheet_Calculateイベントには、Targetという引数はなく、したがって再計算されるRangeの特定はできません。
それを断わりもなく使用するのでエラーになるのです。
Worksheet_Calculateイベントで、再計算の位置で処理を分けたいという質問がよくあります。たいていの場合それはできないという回答のようです。
便宜的に特定のRangeの再計算だけのシートを別に用意して、そのシートを参照させるようにします。そのシートにWorksheet_Calculateイベントを書けば、再計算の位置が特定できたように見えて、処理を分けることができます。
Calculateでは無理だったようですね。
web上で探して見つからなかったのも納得できます。
別シートでの処理を最終手段として参考とさせていただきたいと思います。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで年月の合計の関数を...
-
隣のセルに入力したら自動的に...
-
エクセルで、一つのセルに二つ...
-
SUMIFとCOUNTIFを合わせたよう...
-
ある一定時間を超えた場合の超...
-
エクセルで条件に当てはまる曜...
-
時間帯ごとの集計をしたいがエ...
-
【スプレッドシート】指定の日...
-
Excelの表以外が暗い?
-
SUMIFでの判定条件が異なるため...
-
エクセルで角度の計算できますか?
-
エクセル指定日付の数値を別シ...
-
Excelで複数の条件付書式につい...
-
ある数値から始まるものをカウ...
-
エクセル2010で合計5000に近い...
-
エクセルでの複数条件下での標...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
ある一定時間を超えた場合の超...
-
エクセルで年月の合計の関数を...
-
エクセルでの複数条件下での標...
-
隣のセルに入力したら自動的に...
-
【スプレッドシート】指定の日...
-
エクセルで角度の計算できますか?
-
Excelの表以外が暗い?
-
複数連続した列幅や行高を一発...
-
エクセルで「ぶら下げ」書式を...
-
エクセルにて「週」から日付を...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで、一つのセルに二つ...
-
Excel:月またぎを含む日数の差...
-
時間帯ごとの集計をしたいがエ...
-
ある数値から始まるものをカウ...
-
excelでの文字を隠す方法
-
EXCEL 年月表示をするVBAを教...
-
エクセル2010で合計5000に近い...
-
エクセル 重複行色付(VBA)に...
おすすめ情報