![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
初心者のため、伝わるかわかりませんが、
次のような動作を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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの複数条件下での標...
-
SUMIFとCOUNTIFを合わせたよう...
-
スプレッドシート、Excelでの数...
-
EXCEL 経過年数の平均を求めた...
-
【スプレッドシート】指定の日...
-
エクセルで年月の合計の関数を...
-
エクセルで角度の計算できますか?
-
SUMIF関数について
-
excelでの文字を隠す方法
-
エクセルにて「週」から日付を...
-
エクセルで「ぶら下げ」書式を...
-
EXCEL 年月表示をするVBAを教...
-
ある一定時間を超えた場合の超...
-
エクセル シフト表 6連続勤...
-
エクセルで、一つのセルに二つ...
-
SUMIF関数の結果が0になってし...
-
スケジュール表の画像を作成したい
-
エクセル くじ引きの口数が別々...
-
エクセルで複数条件に合うセル...
-
エクセルで灯油の配送予定日を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
ある一定時間を超えた場合の超...
-
エクセルで年月の合計の関数を...
-
【スプレッドシート】指定の日...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで日付を数字+アルフ...
-
Excelにいついて質問です。
-
エクセルにて「週」から日付を...
-
Excelの表以外が暗い?
-
エクセルで「ぶら下げ」書式を...
-
エクセルで角度の計算できますか?
-
隣のセルに入力したら自動的に...
-
エクセルで、一つのセルに二つ...
-
EXCEL 年月表示をするVBAを教...
-
excelでの文字を隠す方法
-
エクセル2003 MONTH関数で
-
Excel:月またぎを含む日数の差...
-
SUMIF関数の結果が0になってし...
-
エクセル シフト表 6連続勤...
おすすめ情報