Excel小僧:「令和4年」を自動更新 [コンピューター]
"今年"セルに西暦年(例:2022)が入力されていて、値が更新されたら、別のセルに「令和4年」(4は全角)と表示させる方法です。
最初、表示形式を
myString1 = Chr(34) & "令和" & Chr(34) & "@" & Chr(34) & "年"
Range(myRangeName2(i)).NumberFormatLocal = myString1
として、値「4」を代入したのですが、循環参照が発生して「令和令和4年年」となってしまう問題が発生しました。
そこで、表示形式を「@」とし、値「令和4年」を代入する様に変更しました。
以下、"今年"セルが変更されたら起動されるVBAマクロです。
Sub myFTrYrReiwa1()
'【機能】西暦年(半角)を元号年(令和、全角)にする(一覧シート)
'【変数】
Dim Year1 As Integer ' 元号年(令和)
Dim Year2 As String ' 元号年(令和、全角)
Dim myRangeName1 As String ' Range名(元号年3)
Dim myRangeName2(11) As Variant ' Range名
Dim myString1 As String
Dim i, j As Integer
'【実行コード】
Year1 = Range("今年").Value - 2018 ' 元号年(令和)
Year2 = StrConv(Year1 & "", vbWide) & "" ' 元号年(令和、全角)
'
myRangeName1 = "元号年3"
Range(myRangeName1).NumberFormatLocal = "@" ' 表示形式
Range(myRangeName1).Errors.Item(xlNumberAsText).Ignore = False ' エラーチェック表示(数値が文字列として保存)
Range(myRangeName1) = Year2 ' 全角の元号年を代入
Range(myRangeName1).Errors.Item(xlNumberAsText).Ignore = True ' エラーチェック非表示(数値が文字列として保存)
' 1 - 12月のタイトル
For i = 0 To 11
j = i + 1
myRangeName2(i) = "_" & j & "月top"
' クリア
Range(myRangeName2(i)).NumberFormatLocal = "@"
Range(myRangeName2(i)) = ""
' エラーチェック表示(数値が文字列として保存)
Range(myRangeName2(i)).Errors.Item(xlNumberAsText).Ignore = False
' 各月のタイトルを設定
' 表示形式
' myString1 = Chr(34) & "令和" & Chr(34) & "@" & Chr(34) & "年" & StrConv(j, vbWide) & "月 明細書" & Chr(34)
' Range(myRangeName2(i)).NumberFormatLocal = myString1
Range(myRangeName2(i)) = "令和" & Year2 & "年" & StrConv(j, vbWide) & "月 明細書"
' エラーチェック非表示(数値が文字列として保存)
Range(myRangeName2(i)).Errors.Item(xlNumberAsText).Ignore = True
Next i
End Sub
最初、表示形式を
myString1 = Chr(34) & "令和" & Chr(34) & "@" & Chr(34) & "年"
Range(myRangeName2(i)).NumberFormatLocal = myString1
として、値「4」を代入したのですが、循環参照が発生して「令和令和4年年」となってしまう問題が発生しました。
そこで、表示形式を「@」とし、値「令和4年」を代入する様に変更しました。
以下、"今年"セルが変更されたら起動されるVBAマクロです。
Sub myFTrYrReiwa1()
'【機能】西暦年(半角)を元号年(令和、全角)にする(一覧シート)
'【変数】
Dim Year1 As Integer ' 元号年(令和)
Dim Year2 As String ' 元号年(令和、全角)
Dim myRangeName1 As String ' Range名(元号年3)
Dim myRangeName2(11) As Variant ' Range名
Dim myString1 As String
Dim i, j As Integer
'【実行コード】
Year1 = Range("今年").Value - 2018 ' 元号年(令和)
Year2 = StrConv(Year1 & "", vbWide) & "" ' 元号年(令和、全角)
'
myRangeName1 = "元号年3"
Range(myRangeName1).NumberFormatLocal = "@" ' 表示形式
Range(myRangeName1).Errors.Item(xlNumberAsText).Ignore = False ' エラーチェック表示(数値が文字列として保存)
Range(myRangeName1) = Year2 ' 全角の元号年を代入
Range(myRangeName1).Errors.Item(xlNumberAsText).Ignore = True ' エラーチェック非表示(数値が文字列として保存)
' 1 - 12月のタイトル
For i = 0 To 11
j = i + 1
myRangeName2(i) = "_" & j & "月top"
' クリア
Range(myRangeName2(i)).NumberFormatLocal = "@"
Range(myRangeName2(i)) = ""
' エラーチェック表示(数値が文字列として保存)
Range(myRangeName2(i)).Errors.Item(xlNumberAsText).Ignore = False
' 各月のタイトルを設定
' 表示形式
' myString1 = Chr(34) & "令和" & Chr(34) & "@" & Chr(34) & "年" & StrConv(j, vbWide) & "月 明細書" & Chr(34)
' Range(myRangeName2(i)).NumberFormatLocal = myString1
Range(myRangeName2(i)) = "令和" & Year2 & "年" & StrConv(j, vbWide) & "月 明細書"
' エラーチェック非表示(数値が文字列として保存)
Range(myRangeName2(i)).Errors.Item(xlNumberAsText).Ignore = True
Next i
End Sub
やばいぜ、ありがとうございます。。
by cheese999 (2023-03-14 04:50)