質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

859閲覧

もし、作業した年月日が今の年月日の1か月前と同じであるならば"〇"がつくマクロを苦みたい

ypk

総合スコア83

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/10/10 07:03

こんにちは。
現在VBAのマクロを学習しているものです。

現在、下記のようなことを実現しようとしていますが思うようにいかないためこの場にて質問をします。
どうぞよろしくお願いいたします。

##実現したいこと

イメージ説明

「実行ボタン」を押下すると「対応済みかどうか」の列(=D列)に"〇"が表示されるようにしたい。そのための第一歩として、実行ボタンを押下するとD2に「〇」を表示させたい。

##困っていること

現在のマクロで実行ボタンを押下しても、特に何も表示されません、、、、
A2には前月(9月)の日付が入っているため、想定通りであるならば動くはずなのですが、、、、

どこが間違っているのか、ご教授いただけますと幸いです。
どうぞよろしくお願いいたします。

##現在の私のマクロ

Sub 対応完了ボタン() If Month(A2) = Month(Now()) - 1 Then Worksheets("Sheet1").Cells(2, 4).Value = "〇" End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/10/10 07:12

一ヶ月前とは、30日前?31日前?日が一致しないとダメ?どれでしょう
ypk

2020/10/10 07:14

ご指摘ありがとうございます。 日付というのは9/1~9/30までを想定しています
meg_

2020/10/10 08:19

質問のコードは動きましたか?
guest

回答2

0

ベストアンサー

まず他の回答者様が書かれている通り

Month("A2")

だと参照ではなくなるので

Month(Range("A2").Value)

と書きましょう

直したのが下の書き方

VBA

1Sub 対応完了ボタン() 2 If Month(Range("A2").Value) = Month(Now()) - 1 Then 3 Worksheets("Sheet1").Cells(2, 4).Value = "〇" 4 End If 5End Sub

で実行するときちんと動きます
質問者様のシートを拝見すると["A2"]セルは#2020/09/10#で月は[9]
Month(Now()) - 1 で実行時点で10月なので値は[9]
あとは["Sheet1"]シートの2行名4列に○を設定する。

動いてはいるのですが、表記ゆれがある為うまく動かない時があります。
例としては「ボタンが設置されているのが["Sheet1"]シートではない場合」
書き方を統一して「ボタンが設置してあるシートに対して」として書き直します。

VBA

1Sub 対応完了ボタン() 2 If Month(Range("A2").Value) = Month(Now()) - 1 Then 3 Cells(2, 4).Value = "〇" 4 End If 5End Sub

すべて省略形で揃えました

また逆にシートを厳密に指定したいのであれば

VBA

1Sub 対応完了ボタン() 2 If Month(Worksheets("Sheet1").Range("A2").Value) = Month(Now()) - 1 Then 3 Worksheets("Sheet1").Cells(2, 4).Value = "〇" 4 End If 5End Sub

となります。

どちらにも利点欠点がありますが、よくここで質問される内容から
後者の書き方をオススメしておきます。

投稿2020/10/10 08:23

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypk

2020/10/10 08:30

ご丁寧にありがとうございます、、、!シートを厳密に指定した方が良いのですね! また、無事に動きました。ありがとうございました
kuma_kuma_

2020/10/10 08:35

> シートを厳密に指定した方が良いのですね! はい。よくここで目にするExcel上の質問で大体のうまくいかない理由が 「シートの指定を厳密に行っていなかった。」のが原因となっています。 基本で教えるなら「省略形」なのですが、後々間違いの元となりますのでこの様な回答とさせていただいています。
guest

0

Month(A2)

その書き方だと「セルのA2」の値という意味になりません。

Option Explicit

Sub 対応完了ボタン()
MsgBox Month(A2)

If Month(Range("A2").Value) = Month(Now()) - 1 Then Worksheets("Sheet1").Cells(2, 4).Value = "〇" End If

End Sub

Msgboxで表示してみたりしてどんな値が入っているか確認してみては?

「セルのA2の値」は、
Range("A2").Value
と書きます。

やってみたら、「12」が返ってくるけど何の値だろう。。。。。

投稿2020/10/10 07:17

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypk

2020/10/10 08:28

ご丁寧にありがとうございます! 無事に動きました、、、!12について、ちょっと自分も確認してみます、、、!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問