• 締切済み

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

みんなの回答

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.4

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

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

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

  • f272
  • ベストアンサー率46% (7992/17078)
回答No.2

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

  • kkkkkm
  • ベストアンサー率65% (1597/2433)
回答No.1

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

  • Excelで年月日データから下二桁だけを取り出したい。

    Excelで年月日データから下二桁だけを取り出したい。 お世話になります。 Excel2000を使用中です。 まあ、この質問に関してはあんまりバージョンは関係ないと思いますが。 セル(例としてA1)に日付データが入っています。 このセルから西暦年の下二桁だけ取り出したいです。 Year関数を使って =year(A1) とすると西暦年4桁が得られます。 4桁では困るのです。2桁にしたい。 どうしたらよいでしょう? 多分、Text関数を使うと思うのだけれどうまくいかない。 注意 Year関数で得られた結果から2000を減算するのはNG 事情があってセルの書式変更はできない。よってセルの書式を使う方法はNG よろしくおねがいします。

  • エクセル 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を表示できません。 どの様に修正すれば宜しいでしょうか?

  • エクセルで上2桁をカットして表示するには

    エクセルの数値の表示で 上何桁かをカットして表示する方法はありますでしょうか? 例えば 123456 を 3456 と表示させるようなものです。 書式設定でも関数を使ってでも、どのような方法でもかまいません。 ただ、関数のRIGHTを使って逆から桁を数える方法ではないものが知りたいので、よろしくお願いします。

  • 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") ・・・・・ 教えてください、宜しくお願いします。

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

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

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

    エクセルのマクロを使い 名前の決まっている特定のシートを 新規ブックにして名前をつけて保存をしたいのです. 色々参考にして以下のようなマクロを書いたのですが これだと元々のファイル名が変わって保存されてしまいました。 どなたかお知恵をお貸しください。 今作ったマクロ 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 よろしくお願いします

  • 明日の日にちを表示するときは

    下記のように1日後の日付を常に表示するときは どこを変えればいいのでしょうか? <TD>※明日は<script language="JavaScript"> <!-- // 訪問日表示 now = new Date(); year = now.getYear(); if (year < 2000) year = year + 1900; month = now.getMonth()+1; day = now.getDate(); wk = new Array("日","月","火","水","木","金","土"); document.write("有効期限:"+year+"年"+month+"月"+day+"日"); // --> </script>

  • Exccel2000VBAにて年号を下2桁で表示する。

    表題のとおりなのですが、どうにかして「2005」を「05」のように表示したいのですが、良い方法はありませんでしょうか? year(date)にしてしまうと、どうしても4桁になってしまうし整数型なので「05」という表記にできません。 できれば文字列としてstring型の変数に収納できればと考えています。 最終的に日付から「05/06 JUN-JUN」のように表示したいです。(月は当月-1の数値)月については12個しかないのでElseIF文で今月が7月だったら「"/06/ JUN-JUN"」と表記されるようにしました。この表記の前に2桁の年を入れたいです。 無理なようならVBAを05年で固定し、来年はまた来年用に書き換えるとか考えてますが、自動で年毎に対応できたら良いと考えてます。 よろしくお願いいたします。

  • 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 出るエラーは「コンパイルエラー:プロジェクトまたはライブラリが見つかりません」です。 簡単なことなのかも知れませんが、これでは他の方に使って頂けなくて困っています。 お知恵をお貸し下さい。