以下のプログラムは、1年間の価格合計を求めるプログラムです。
これを実行するとうまくいくこともありますが、エラーが起きることもあります。
どうやら下記コードが原因のようなのですが、間違いがわかりません。
Target.Offset(0, 1).Value = run * (13 - month)
どこが間違っているのでしょうか。
また最終的に、A行かB行のどちらかが更新されたときにこのプログラムを
実行させたいのですが、方法がわかりません。
無知な質問ではありますが、どなたか教えてください。
---------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim month As Integer
Dim run As Integer
If Intersect(Target, Range("A25:A35")) Is Nothing Then
Exit Sub
Else
If Target.Offset(0, -2).Value <> "" Then
month = Target.Offset(0, -2).Value
month = month - 3
If month = -2 Then
month = 10
ElseIf month = -1 Then
month = 11
ElseIf month = 0 Then
month = 12
End If
run = Target.Offset(0, 0).Value
Target.Offset(0, 1).Value = run * (13 - month)
End If
End If
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
そのコードは例ですか?
>これを実行するとうまくいくこともありますが、エラーが起きることもあります。
そんな事はありません。実行時は必ずエラーです。
A列から (0, -2)オフセットできません。
>、A行かB行のどちらかが更新されたときに..
A:B列だと解釈して処理する『サンプル』としては以下
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rs As Range
Dim r As Range
On Error GoTo errHndlr
Set rs = Intersect(Target, Range("A1:B100"))
If Not rs Is Nothing Then
Application.EnableEvents = False
'Deleteなどの複数セル処理を禁止するなら _
rs.Countを調べてIf分岐。
For Each r In rs
'同じ処理をするならCase分岐不要。
Select Case r.Column
Case 1
'A列の処理をここに書く。
Case 2
'B列の処理をここに書く。
End Select
Next
End If
errHndlr:
Application.EnableEvents = True
Set rs = Nothing
If Err.Number <> 0 Then
MsgBox Err.Number & "::" & Err.Description
End If
End Sub
No.1
- 回答日時:
エクセルVBAであれば、(他の言語は別と思うが)月数だけを採り上げて計算するのでなく、
下記のように実際の日を作って、関数を利用するほうが良いと思う(理由は経験からです。どちらでも正しく思考して、コードを
書けば問題ないが、数直線的思考をする、エクセルの日付シリアル値は考えやすく誤りがないと思う)
例データ
A列 B列=3ヶ月前の月数字
2011/9/16
2011/10/2 7
2011/11/3 8
2011/12/4 9
2012/1/510
のように日は適当な日(日は指定ないときも構成的に1日にするとか)にして、エクセルの日付シリアル値にして、月数字から3を引いて
Month(x) - 3
その月でまた日付シリアル値をだし、その日付シリアル値の月数字を Month(・・・)で出す。
Sub test01()
For i = 1 To 5
x = Cells(i, "a")
Cells(i, "B") = Month(DateSerial(Year(x), Month(x) - 3, Day(x)))
Next i
End Sub
これは十分テストされたマイクロソフトのエキスパートが考えた仕組みにのッかっているので安心だ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
alert()が実行できない
-
if(1){...}とはどういうことで...
-
PowerPointで時計表示
-
VB.Net Imagelistにイメージを...
-
C#コンストラクタが2回動く
-
C#でボタン名を変更しても動く
-
VBA SORT Applyでエラー
-
javascriptの効かないサーバー...
-
ローカルのレジストリを読みたい
-
ファイルサイズの取得
-
javascriptからサーバサイドの...
-
「終了していない文字列型の定...
-
ページを一回だけリロードさせ...
-
htmlのfileタグに自動で値を入...
-
jsファイルを閲覧者がダウンロ...
-
CGIとJavascriptの違いについて
-
ページ遷移時にアコーディオン...
-
「記事の折りたたみ・展開」に...
-
Illustrator でjavascriptによ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
PowerPointで時計表示
-
C#でボタン名を変更しても動く
-
デザイン時のVisible=Falseは実...
-
初心者です。gulpでコンパイル...
-
jQuery ui Datepicker 明日以降...
-
VBA SORT Applyでエラー
-
〔Excel:VBA〕マクロの実行が異...
-
innerHTMLなどの反映タイミング
-
1つのVBAコードをすべてのコア...
-
リクエスト結果が一瞬しか表示...
-
VBA ステータスバー DoEvents
-
VB.netでタイマーがスタートし...
-
javascriptで最初のところに戻...
-
Excelのマクロ一括実行ができな...
-
既存のwebサイトで、ローカルの...
-
JavaScriptでショートカットキ...
-
ラベルの色がかわってくれない
-
eval()の危険性の具体例を教え...
おすすめ情報