
添付図、納入日から本日8/6迄の月数を表示します。
Cells(1,1)に日付が入力されている時はCells(6,9)に月数が計算され表示されますが
Cells(1,1)をDeleteして空欄にすると「実行時エラー'13'型が一致しません」とエラーになってしまいます。以下のコードをどのように修正したらいいでしょうか宜しく御願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 行 As Long
行 = Cells(Rows.Count, 1).End(xlUp).Row
Cells(6, 9) = (Date - Cells(行, 1)) / 30
End Sub

No.1ベストアンサー
- 回答日時:
質問の中の Cells(1,1) は、Cells(11,1) ですよね。
で、Cells(11,1)を空欄にしたときにどういう処理をしたいの?
そこが書かれてないわけですが…
単純に、Cells(11,1)以下が空欄の状態だと
「行」取得すると入力のある「10」が返ると思うので、
以下の内容では、
① 行が11より小さければ"Error"表示。
② ①に該当しなければ計算結果表示。
としています。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 行 As Long
行 = Cells(Rows.Count, 1).End(xlUp).Row
If 行 < 11 Then
Cells(6, 9) = "Error"
Else
Cells(6, 9) = (Date - Cells(行, 1)) / 30
End If
End Sub
余談
経過月は、Int等で切捨てたりしなくていいのかな?
早速の回答有難う御座います。
すいませんCells(1,1) は、Cells(11,1) です間違えました。
Cells(11,1)が空欄の時はCells(6, 9)を空欄にしたいのです。
いただいたコードで出来ました。
No.5
- 回答日時:
コメント拝見しました。
すでに修正部分の回答は上がってますが…。
① 行が11より小さければ"Error"表示。
この部分の説明から
『"Error"じゃなくて、何も表示したくないんだ』
ってことであれば、
"Error" → ""
にすればいいんだな、という発想に繋げられるようにしましょう。
他人の作ったマクロの加工って、こういう発想から手を入れて覚えられることも多いので。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 行 As Long
行 = Cells(Rows.Count, 1).End(xlUp).Row
If 行 < 11 Then
Cells(6, 9) = "" '←No.1からはココだけを修正
Else
Cells(6, 9) = (Date - Cells(行, 1)) / 30
End If
End Sub
No.4の方の回答だと、日付入力がない場合、
Date - "納入日"
というように 日付 から 「納入日」という文字列を引こうとするので、エラーでマクロが中断するでしょう。
No.4
- 回答日時:
>>Cells(11,1)が空欄の時はCells(6, 9)を空欄にしたいのです。
Cells(6, 9) = (Date - Cells(行, 1)) / 30
を以下に修正
if Cells(行, 1)="" or Cells(行, 1)=" " then
Cells(6, 9)=""
else
Cells(6, 9) = (Date - Cells(行, 1)) / 30
Endif
No.3
- 回答日時:
こんにちは
処理としてはさほど複雑ではないと思いますが、いろいろ考えるべきことがありそうですね。
● 既にNo1様のご指摘にもありますが、計算できない場合にどうするのか。
(例えば、全部空欄だったり、日付以外の値を(誤って)入力した場合など)
● ご提示の計算ではひと月を30日としているようですが、例えば、A列の値が2/1で、今日が3/1の場合、0.9ヶ月(少数以下1桁として)となりますが、果たしてそれで良いのか。
(3/1、2/1の間は30日ないけれど、普通は1か月と見做すので‥)
● 入力欄(?)はA11:A20のように見受けられますが、ご提示のコードではA30セルに何か入力しても反応してしまいますが・・
● ご提示では入力最大行の値を採用していますが、もしかすると、入力値の最新日付(=最大値)を使用するという可能性はないのかなどと勝手に想像してしまったりします。
・・・などなど。
その他にも、CHangeイベントで処理をする場合の注意点として、マクロからシートの値を変えてもイベントが発生します。
ですので、処理の内容によってはエンドレスになってしまう可能性がありますので、注意が必要になります。
対策として、イベント発生を一時停止させるなどの処置が必要な場合があります。
(ご提示の内容の場合は、計算結果は変わらないので、2回同じ計算をする程度ですけれど・・)
ちなみに、関数式で処理する方向で、勝手な推測を元に考えてみたものが以下です。
(勝手な推測なので、質問者様の意図通りかどうかは不明です)
ご提示のレイアウトで、I6セルに以下の式を設定し、セルの書式設定を数値で、少数以下1桁にすることで表示できると思います。
=IF(ISNUMBER(INDEX(A:A,AGGREGATE(14,6,ROW(A11:A20)/(A11:A20<>""),1))),DATEDIF(INDEX(A:A,AGGREGATE(14,6,ROW(A11:A20)/(A11:A20<>""),1)),TODAY(),"M")+ROUND((DAY(TODAY())-DAY(INDEX(A:A,AGGREGATE(14,6,ROW(A11:A20)/(A11:A20<>""),1))))/30,1),"計算不能")
No.2
- 回答日時:
Cellsは行・列ですよ、Cells(1,11)は1行11列です。
結局、納入日が無い場合に経過月をドー表示したいのか?です。
どー表示したいのですか?
本日日付から空白nullを引き算なんか出来ないからエラーになるのです。
回答有難う御座います。
すいませんCells(1,1) は、Cells(11,1) です間違えました。
Cells(11,1)が空欄の時はCells(6, 9)を空欄にしたいのです。
10行目が選択されてエラーになるのはわかっていたのですがその対処法がわかりませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlをバージョンアップしたら...
-
perl ver5.24.0 x68版で、requi...
-
メールアドレスについて
-
python 3を使えるようになりたい
-
script headers って?
-
例外処理のフローチャートの記...
-
URI.pmの使い方を教えてくださ...
-
「デバイスは PRN を初期化でき...
-
なぜか実行されません
-
dieによる終了コード(ステータ...
-
ホームページのカウンタ表示に...
-
送信先のメールアドレスが存在...
-
UNIX SUN Solarisで時間の演算
-
LCD ディスプレイを Raspberry ...
-
Excel制御
-
Perlでの改造方法
-
英文でperlの文法などを説明し...
-
モジュールについて教えて下さい。
-
サーバー上にnkfがなくて困って...
-
JAVAを実行できるHTTPクライアント
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSがコンパイルエラーになりま...
-
教えて下さい。
-
perlをバージョンアップしたら...
-
erf(x)とerfc(x)のカタカナ読み...
-
VBからブラウザの表示状態(リ...
-
WebClientの文字列送信にてエラー
-
エラー画面の制御?
-
エクセルで指定した行範囲を別...
-
Pythonプログラミングでエラー
-
powershellで引数受け取り時に...
-
w3cの検証エラー?
-
POSTで送信するとエラーになる
-
script headers って?
-
Excelマクロでセルに値が入力さ...
-
ホームページがgoogle検索結果...
-
perl ver5.24.0 x68版で、requi...
-
pingサーバーに更新pingを送信...
-
sprintfで0ならスペースにしたい
-
プログラミング?を作りたいです
-
%stderr%の値が何をさしているのか
おすすめ情報