• 締切済み
  • 困ってます

VBA 年の下二けたを表示させる Format

VBA(version7.1)で年の下二けたを表示させたいと思っています。 Format関数では両者とも5,  date関数はyear関数を使うと1905と表示 right関数を使うと20と意図通り表示します。 このような結果になるのはなぜでしょうか。 詳しい方よろしくお願いします。 Sub test() Cells(1, 1) = Format(Year(Date), "yy") Cells(2, 1) = Format(Year(Now), "yy") Cells(1, 2) = Right(Year(Date), 2) Cells(2, 2) = Right(Year(Now), 2) Cells(1, 3) = Year(Date) Cells(2, 3) = Year(Now) End Sub 実行結果 5_20_1905/7/12 5_20_2020

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数45
  • ありがとう数0

みんなの回答

  • 回答No.4

適当なセルに日付を入力し、表示を日付から標準に変えてみれば意味が分かるでしょう。 日付の正体は連続した整数値(シリアル値)です。 1が1日分に相当するので、+1すれば翌日になり、-1すれば前日になります。 応用すれば、1時間は1/24です。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • エクセル VBAラベル 表示?

    宜しくお願いいたします。 エクセル2000にて Private Sub UserForm_Initialize() Dim TYU As Integer Dim TYUB As Integer For TYU = 3 To 100 If Worksheets("発注履歴").Cells(TYU, 1) = "" Then TYUB = Right(Worksheets("発注履歴").Cells(TYU - 1, 1).Value, 3) Label1.Caption = Format(Date, "yy") & TYUB + 1 Exit For End If Next TYU End sub 上記のようにコードを書き込みました。 ワークシート発注履歴("A3")には注文番号090001が 入力されております。 次回発注時、入力フォームを開いたときに ラベル1に090002を表示しようとしたのですが 092と表示されてしまい 2 のまえの00を表示できません。 どの様に修正すれば宜しいでしょうか?

  • vba 「02」を返したいのですが

    Sub test() Debug.Print Month(Date) End Sub のようなコードの時に 月の表記を02のように2桁で返すにはどうすればいいですか? Debug.Print Format(Month(Date), "mm") これだと、なぜか「01」が返ります。 「02」を返したいのですが、どうすればいいでしょうか?

  • access 自動採番 年が変わるごとに0001に戻る仕組み。

    宜しくお願いします。 使用環境:access(2002-2007) 前回の続きでもありますが、自動で番号を採番する仕組みを作りました。 (一応、前回分も・・)http://oshiete1.goo.ne.jp/qa5742518.html 「10AA0001」から始まり、あとは後ろの数字が0002,0003~と増えていく仕様で出来ました。 最初の「10」というのは2010年のうしろ二桁の「10」です。(date関数) (相談) これを2011年になったら、後ろの数字を0001に自動的にセットし直す仕様にしたいのです、 そこから0002,0003~と増えるようにして、また年が変わるごとに0001にセットされるような仕組みにしたいです。 検索サイトで調べるとやり方が出てくるのですが、 まだVBAの理解力がないので、まったくもってわかりません。 たぶんIfで示されるDcount関数に関係があるのかなー、という気はします。 (前置きの部分なので) 僕にはちょっとレベルが高いかも知れませんが、理解できるよう努力します。 以下に、構文を書きます。 また来年になるまで「実際、変わるか検証ができない」というのもアレなので、 テスト環境ではnow関数を使い「hhnn」でやってます。 「分」が変わるごとに0001に戻れば自分なりにOKだと思っています。 (now関数で連番動作することは確認できました) ・・・・・・・・・ '------------------------------------------------------------ ' Form_BeforeInsert ' '------------------------------------------------------------ Private Sub Form_BeforeInsert(Cancel As Integer) On Error GoTo Form_BeforeInsert_Err If (DCount("見積り番号", "案件") = 0) Then 見積り番号 = "00AA0001" Exit Sub End If 見積り番号 = Right(Format(Date, "yyyy", 2), 2) & Format(DMax("Right(見積り番号,4)", "案件") + 1, "AA" & "0000") Form_BeforeInsert_Exit: Exit Sub Form_BeforeInsert_Err: MsgBox Error$ Resume Form_BeforeInsert_Exit End Sub ・・・・・・・・・ ○ now関数の場合 ※一文のみ抜粋 ・・・・・ 見積り番号 = Right(Format(Now, "hhnn", 2), 2) & Format(DMax("Right(見積り番号,4)", "案件") + 1, "AA" & "0000") ・・・・・ 教えてください、宜しくお願いします。

  • 回答No.3
  • imogasi
  • ベストアンサー率27% (4575/16384)

エクセルの日付の、日付・時刻シリアル値という仕組みを、 VBAをやるぐらいになれば、勉強してからやるべきだと思う。 それとRightやLeft関数は、本来は文字列を対象にする関数で、Excelが気を利かして変換して処理してくれるので、注意のこと。 Googleで「日付シリアル値とは」でしょうかいすれば、記事がたくさん出るから、2,3読んでみて、本質問のことを考えること。

共感・感謝の気持ちを伝えよう!

  • 回答No.2
  • f272
  • ベストアンサー率45% (5272/11637)

Year(Date)は2020という数値になって,それは1905年7月12日を意味します。したがってFormat(Year(Date), "yy")にすれば05という数値になって「Format関数では両者とも5」ですね。 1900年1月1日=1 1900年1月2日=2 1900年1月3日=3 ...途中省略 1905年7月11日=2019 1905年7月12日=2020

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • kkkkkm
  • ベストアンサー率58% (955/1621)

Formatの"yy"の場合第一引数はシリアル値なのでYear(Date)は2020となりシリアル値0が1900/1/0なのでシリアル値2020は1905年になりyは5となります。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 日付表示

    NT4.0 IIS4 ASPスクリプト5.6からWin2000 IIS5 ASPスクリプト5.6にハードと共にバージョンアップしました。 旧マシンの時は日付表示の年が2桁だったのに今回は4桁表示されます。 2桁にしたいのですがどうしたら良いか分かりません。 地域オプションの日付の短い形式をyy/mm/ddにしてもかわりません。次に下記のようにスクリプトを記述してもかわりません。 <% yymmdd = date() response.write Formatdatetime(yymmdd,2) %> 今は下記の様な記述で一部逃げているのですが、印刷等を含めてかなりのスクリプト修正が必要となってしまいます。 旧マシンの様にdateがデフォルトで6桁表示になるやり方を教えて下さい。よろしくお願いします。 yymmdd = (mid(Year(Now()),3,2) & "/" & Right("00" & Month(Now()), 2) & "/" & Right("00" & Day(Now()), 2)) response.write yymmdd

  • FORMAT関数で値が変わる

    こんにちは、 Win98でExcel2000のVBAを使用してマクロを組んでいるのですが、FORMAT関数を使っている部分で予想外の結果がでています。 以下、プログラムです。 Private Sub Test() Dim AAA as String AAA = "6P" AAA = FORMAT(AAA,"000") MsgBox AAA End Sub MsgBoxの表示が"06P"になるはずだと思っていたのですが、 なぜが"001"になってしまいます。 他の質問などを見てみると"E"や"D"などでも表示が変わるというものを見ました。"P"も同じようなものなのでしょうか、また"06P"と表示させるにはどうしたらよいでしょうか? どなたかご存知の方がいらっしゃったっらご回答お願い致します。

  • VBAでFormat がうまく使えない

    たびたびお世話になっています。 今回はVBAでの基本的な関数であろうFormat関数について質問させて頂きます。 現在 WindowsME / EXCEL2002 でマクロ・VBAを使用した日報を製作しています。 その中で、設定欄で入力した日付をソース内でFormat関数で形式を変えて表示させようとしているのですが、EXCEL97の環境に持っていくとエラーが出て使用できません。 EXCEL97で使えないのかと思いましたが、同じ環境(同じPC・同じEXCEL)で新規ファイルを作成し、同じ表記をすると普通にFormat関数が使用できます。 これはいったい何がまずくてエラーが出てしまうのでしょうか。 一応ソースは以下の通りです。 Private Sub cmd_run_Click() Dim strMonth As String Dim intOkCancel As Integer '' 処理実行確認 strMonth = Worksheets("設定").Range("C12").Value strMonth = Format(strMonth, "yyyy年m月") intOkCancel = MsgBox(strMonth & "の日報集計を開始します。よろしいですか?", vbOKCancel, "集計開始") If intOkCancel = vbCancel Then MsgBox "集計を中止します", vbOKOnly, "集計中止" Exit Do End If ''集計 Call S_Run End Sub 出るエラーは「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」です。 簡単なことなのかも知れませんが、これでは他の方に使って頂けなくて困っています。 お知恵をお貸し下さい。

  • vbaで今年があと残り何日かを求めたいのですが

    vbaで今年があと残り何日かを求めたいのですが Sub test() Debug.Print Year(Date) & "/12/31" - Date End Sub これだと、型が一致しませんになります。 なぜエラーになるのでしょうか? その原因がわかれば解決できそうな気が・・・

  • エクセルマクロで 新規ブックにシートをコピーして保存

    エクセルのマクロを使い 名前の決まっている特定のシートを 新規ブックにして名前をつけて保存をしたいのです. 色々参考にして以下のようなマクロを書いたのですが これだと元々のファイル名が変わって保存されてしまいました。 どなたかお知恵をお貸しください。 今作ったマクロ Sub p() Worksheets("印刷用日誌").Copy MsgBox Year(Now) & "-" & Format(Now(), "yy-mm") & "-" & Range("k7") On Error Resume Next Application.DisplayAlerts = False ThisWorkbook.SaveAs Year(Now) & "-" & Format(Month(Now), "00") & "-" & Format(Day(Now), "00") Application.DisplayAlerts = True On Error GoTo 0 End Sub よろしくお願いします

  • エクセルVBAで日付計算

    Sub test01() x = Date - 38383 '2005/01/31から今日まで何日 x = Format(x, "##") '数字であらわす MsgBox x & "日です。" End Sub 試行錯誤の結果、上記コードで特定の日から今日まで何日かわかるようになりましたが、とても不細工なコードだと思います。 もっとすんなりもとめるにはどうすればよいでしょうか?

  • VBAで出した数字の分表示について

    Public Sub Jikoku() Range("A1").Value = Format(Now(), "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "Jikoku" End Sub このVBAをつかって時間を出してセルの書式設定で mm表示で時間だけ表示しようとすると 例えば9:32:26だとしても01と表示されてしまいます。 mm:ssだと32:26と出るのですが、分だけだとうまくいきません。 原因が分かる方いらっしゃいますでしょうか? 原因かどうかわかりませんが年数表示が1900年となってしまいます。 PCの設定は2014年なのですが、、

  • VBAコードでイミディエイトウィンドウを表示する方

    VBAコードでイミディエイトウィンドウを表示する方法はありますか? 例えば、 Sub test() Debug.Print Now End Sub を実行したときに イミディエイトウィンドウが表示されていなければ結果がわかりませんよね。 Ctrl+Gでイミディエイトウィンドウを表示出来る事は知っていますが サブプロシージャーと実行とともに、 イミディエイトウィンドウをVBAで表示する方法を教えてください。 Sub test() Debug.Print Now イミディエイトウィンドウを表示 End Sub のようにしたいです。 ご回答よろしくお願いします。

  • vba 明日の6時まで、あと何時間何分あるか

    vba 今の時間から明日の6時まで、あと何時間何分あるかを取得したいのですが うまくいきません。 Sub a() Const 予定 As Date = "06:00:00" '明日の6時 MsgBox "明日の6時まであと" & Format(Now - 予定, "hh:mm") & "あります" End Sub これだと、今の時刻(21:51)で実行すると15:51が返ります。 でも明日の6時まで15時間51分もないです。 何がまちがってますか?

  • Excel ファイル名のあとに年月を付けて保存

    Excel でファイル名のあとに年月(YYMM表示のTEXT)を付けて Sheets.Copy を試みましたら、書き加えられた年月の最初の 0 が外れてしまいます。 ・・・ 0707 と書き加えるつもりが 707 になります。 Sub SCopy() Dim fn As String fn = Format(Range("E20").Value)  Sheets.Copy ActiveWorkbook.SaveAs Filename:="C:\My Documents\FNTest" & fn End Sub "E20"には、毎月中旬以降は翌月表示にする関数 =TEXT(DATE(YEAR(NOW()),MONTH(NOW())+1,DAY(NOW())-10),"YYMM") の返り値が 0707 と表示されています。 これを値のみコピーした 0707 に変えても同じ、'0707 としても同じで、707 としか入りません。 "E20"の書式を「文字」にしても同じです。 参りました。チェックの方法を教えて下さい。よろしくお願いします。