サンプルコード |
---|
Function Datearrange(シリアル値) Dim stry As String Dim strm As String Dim strd As String stry = Format(シリアル値, "ggge年") strm = Format(シリアル値, "m月") strd = Format(シリアル値, "d日") If Len(stry) < 5 Then stry = Left(stry, 2) & _ Chr(32) & Right(stry, 2) End If If Len(strm) < 3 Then strm = Chr(32) & strm End If If Len(strd) < 3 Then strd = Chr(32) & strd End If Datearrange = stry & strm & strd End Function少しコードの使い方は違いますが、「年月日桁揃え」マクロ同様、年、月、日が一桁の場合は半角スペースを追加して表示桁をそろえます。 通常の関数の組み合わせだけでも何とか出来そうな感じですが、条件分岐や文字列抽出をひたすら繰り返す必要があるので、だらだら長くなってしまいそうです。その場限りなら良いのですが(ほんとはその場限りでも長い数式を組むのは面倒くさい)、私の場合、使いまわす必要があったので、ユーザー定義関数を作ることになりました。 引数としてシリアル値を指定します。 シリアル値を求める数式やセルへの参照でも良いでしょう。 シリアル値から和暦を求め、元号*年が5文字より少なければ数値の前にスペース(Chr(32))を挿入します。 月、日も同様の処理をしています。 最後に関数自身に処理結果を和暦元号固定長文字列として渡します。 |
サンプルコード |
---|
Function DatearrangeSG(西暦年, 月, 日) Dim mydate As String Dim strySG As String Dim strmSG As String Dim strdSG As String mydate = 西暦年 & "/" & 月 & "/" & 日 strySG = Format(mydate, "ggge年") strmSG = Format(mydate, "m月") strdSG = Format(mydate, "d日") If Len(strySG) < 5 Then strySG = Left(strySG, 2) & _ Chr(32) & Right(strySG, 2) End If If Len(strmSG) < 3 Then strmSG = Chr(32) & strmSG End If If Len(strdSG) < 3 Then strdSG = Chr(32) & strdSG End If DatearrangeSG = strySG & strmSG & strdSG End FunctionDatearrangeユーザー定義関数は引数としてシリアル値を使用しました。 しかしながら、ダイレクトに引数としてシリアル値を入力する人はまずいないでしょう。 すでに日付のリストが出来てしまっているならDatearrangeユーザー定義関数の引数として日付の入ったセルを参照させるのが一番手っ取り早いでしょう。 しかしそうでない場合、つまり、これからリストを作成しなければならない場合はシリアル値を引数として与えるのに =Datearrange(Date(1995,10,12))のようにDate関数を利用して日付の入力を解りやすくするはずです。 どうせDate関数を使うのなら、最初から引数として年月日指定してしまえば良いというわけです。 引数として入力した西暦年、月、日から日付を表す文字列を作り、あとは、Datearrangeとほぼ同じ処理です。 |
サンプルコード |
---|
Private Sub Worksheet_Change(ByVal Target As Range) Dim checkf As Boolean checkf = Target.Formula Like "=*Datearrange*" If checkf = True Then Target.Font.Name = "MS ゴシック" End If End Sub上記イベントマクロはシートオブジェクトへ記載してください。 Datearrange、DatearrangeSGのどちらにも対応しています。 |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||