• ベストアンサー

月の最終日を取得する(月は変数が入る)

Public Const 今年度 = "2008" Public 月 As Long Sub test() 月 = 3 MsgBox CDate(今年度 & "/" & 月 & "/31 ") End Sub なら3月の最終日を無理やり表示させられますが 4月なら30日、5月なら31日と変数を代入した場合もその月の最終日を表示させるにはどうすればいいのでしょうか? ・月は他のプロシージャーで代入しています。(今月と言う意味ではないです。) ・月はLong型よりdate型のほうがいいのでしょうか? ・たくさんのプロシージャーに今年度 を代入している為Public Constで宣言しています。ただこれのデータ型はどうなのでしょうか? ・エクセル2003です。 よろしくお願い致します。

noname#150498
noname#150498

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

>月はLong型よりdate型のほうがいいのでしょうか? >Public Constで宣言しています。ただこれのデータ型は? 両方とも、Integerです。 年月日に変換した結果は、Date型になります。 サンプルをアップ。 '----------------------------------------- Public Const 今年度 As Integer = 2008 Public 月 As Integer '------------------------------------------ Sub Test()  Dim myDate As Date  月 = 2  myDate = DateSerial(今年度, 月 + 1, 0)  MsgBox myDate End Sub '-------------------------------------------    

noname#150498
質問者

お礼

Integer型にしてみました。ご回答ありがとうございます。

その他の回答 (4)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.5

もうすでに回答は出ているけど誰も説明していないのでw もうお分かりかと思いますが、月の最終日を求めるにはその翌日の1日から1引いて求めるってことですよね。

noname#150498
質問者

お礼

質問する前にもっと頭をやわらかくして考えるべきでしたね! ご回答ありがとうございます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

色々考えられますが、元のコードを生かして Public Const 今年度 As Integer = 2008 Public 月 As Integer Sub test() 月 = 3 月 = 月 + 1 Mod 12 MsgBox CDate(今年度 & "/" & 月 & "/1") - 1 End Sub >ただこれのデータ型はどうなのでしょうか? 一旦文字列の連結によって文字型にしますから、型はあまり気にする必要はないように思います。整数型でよいでしょう

noname#150498
質問者

お礼

いろいろなやり方があることに感心します! ご回答ありがとうございます。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

Public Const 今年度 = "2008" Public 月 As Integer Sub test() 月 = 3 MsgBox DateSerial(今年度, 月 + 1, 0) End Sub ではいかがでしょう?

noname#150498
質問者

お礼

できました! ご回答ありがとうございます。

回答No.1

VBAは苦手なので、次の回答があるまでのつなぎですm(_ _)m Public Const 今年度 = "2008" Public 月 As Byte Sub test() Dim a 月 = 1 a = Cells(1, 1).Value Cells(1, 1).Formula = "=DATE(" & 今年度 & "," & 月 + 1 & ",0)" MsgBox Cells(1, 1).Value Cells(1, 1).Value = a End Sub 参考まで

noname#150498
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • excel/vba/public変数

    excel VBAで下記のようなコードを書きました。 他のプロシージャでも共通の変数を使用したいと思っています。 その為、public変数を宣言して使用したいと設定しましたが。 うまくいきません。 testmainを実行し、iに何も入っていないことを確認しました。 その後『1』を代入し、testmainは終了します。 testsubをその後実行し、iに先ほど代入された値を確認しようとしても何も代入されていない状態です。 全プロシージャでその変数を使用したいと思っているのですが、 何か方法、もしくはこのような使用方法ではないのでしょうか? public変数を使用してもプロシージャが終了すれば変数はクリアされるのでしょうか? 構造化の方法の問題上参照渡しや、戻り値など、指定する方が複雑になっていきます。 ご指導よろしくおねがいします。 Public i As Variant Sub testmain() MsgBox test i = 1 End Sub Sub testsub() MsgBox i End Sub

  • プロシージャーの外で宣言した変数の値の破棄の仕

    プロシージャーの外で宣言した変数の値の破棄の仕方について教えてください。 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i End Sub ++++++++++++++++++ を実行すると、どんどん値が増えていきますが、 回避するには、 ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i i = 0 End Sub ++++++++++++++++++ とするしかないのでしょうか? ++++++++++++++++++ Dim i As Long Sub test() i = i + 10 MsgBox i Set i = Nothing End Sub ++++++++++++++++++ としたら、エラーになりました。

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • 定数と変数、どちらを使った方がいいか?

    vbaの勉強中なので教えてください。 Sub 定数を使った場合() Const moji = "あああ" MsgBox moji End Sub Sub 変数を使った場合() Dim moji As String moji = "あああ" MsgBox moji End Sub 二つのサンプルは答えは一緒なのですが プログラムを作るにおいてどちらを使った方が良いのでしょうか? このサンプルならどっちでもいいのでしょうか?

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • access vbaで、変数を含んだプロシージャ

    access vbaで、変数を含んだプロシージャを実行したい。 【やりたい事】 下記の矢印の部分で「msg1」「msg2」「msg3」を実行したい。 Public Sub test() For i = 1 To 3 msg & i ←ここを、どのように記述すればいいのでしょうか? Next End Sub Public Sub msg1() MsgBox "ok1" End Sub Public Sub msg2() MsgBox "ok2" End Sub PublicSub msg3() MsgBox "ok3" End Sub よろしくお願いします。

  • エクセルでpublic変数が使えない!

    突然、私のパソコンで、エクセルのpublic変数が使えなくなりました。なぜか、public変数そのものが機能しなくなったみたいです。たとえば、 public a as integer と宣言し、aの値を別のbookに渡して使おうとします。ユーザフォームにCommandButton1を貼り付けて、クリックし、次のイベントプロシージャを実行させ、デバックモードのウォッチ式で、aの値を追跡すると、”あるセルの値”は一旦、aに代入されるのですが、End Subのところで、値が<対象範囲外>、型がemptyとなってしまうのです。 Private Sub CommandButton1_Click() a = ”あるセルの値” End Sub 何か設定が変わってしまったのでしょうか? それまで使っていた、プログラムが使えなくなって困っています。 どなたか、回答よろしくおねがいします。

  • 【Excell VBA】ユーザーフォーム上のスプレッドシートのセルを選択したときのイベント

    Excell VBA にて、 ユーザーフォーム(userForm1)に、スプレッドシートを 1)その他のコントロール 2)Microsoft Spreadsheetを追加 によって追加して、 そのspreadSheet1上のsheet1の任意のセル(D:*)をクリックしたとき、その行のD1:D5k一連の値を変数に代入したいのですが、 まず手始めとして、そのセルを選択したときにイベントを発生させたい。  該当のセルを選択してプロシージャを追加すると Private Sub Spreadsheet1_BeforeContextMenu( _ ByVal x As Long, _ ByVal y As Long, _ ByVal Menu As OWC11.ByRef, _ ByVal Cancel As OWC11.ByRef _ ) となります。 比較のため Private Sub Spreadsheet1_SelectionChange(ByVal Target As Range)   If Target.Address() = "$A$1" Then     MsgBox "このセルはA1です。"   End If End Sub だと、 Error・・・「コンパイル エラー: プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。」 ・・・どうすればよいのでしょう。 最終的には、「その行のいくつかの値を変数に代入したい」のですが

  • 別のSubで宣言されている変数を別のSubで参照

    よろしくお願いいたします。 環境:Excel2003 以下のようなイメージで別Sub内で宣言された変数を同じ変数名で別のSub内で参照したいです。 Sub hoge() nn As Integer nn = 1 End Sub Sub hogehoge() MsgBox (nn) End Sub Sub hogehogehoge() Call hoge Call hogehoge End Sub エラーが発生する為、typeについて検索をかけてみました所、以下のような変数参照方法は出てきましたが、別のSubで宣言されている変数を同じ変数名で別のSub内で参照する方法はないでしょうか? Type PData    hoge As String    hogehoge As Long End Type Sub Sample1()    Dim Pppp(5) As PData End Sub よろしくお願いいたします。

  • 20060224をyyyy年mm月dd日にしたい

    こんばんは。教えてください。。 Sub テスト() Dim mystr As String mystr = "20060224" mystr = Format(mystr, "yyyy年mm月dd日") MsgBox mystr End Sub これを実行するとオーバーフローします。 結果としては、「2006年02月24日」と表示させたいです。 mystr = Format(CDate(mystr), "yyyy年mm月dd日") にすると、型が一致しませんになります。 ご回答よろしくお願いします。

専門家に質問してみよう