2016-04-05 4 views
1

セルコンテナの内容を月(Jan-Dec)の名前(1〜12)で表示する方法があるのだろうかと思います。このようにすれば、月の名前をExcelで表示する

With Cells("A1") 
    .NumberFormatLocal = "MMM" 
    .Value = 5 
End With 

Excelは値5を1900年1月5日の日付として読み取り、したがってJanを返します。私が望むのは5月です。

私はセルA1に日付を書きたくないのですが、1つの整数だけです。セルA1が値によって別のセルにコピーされるとき、または読み込まれるとき、私は2012年5月5日であるかのように42129ではなく、コピー/読み取り値が5であることを願っています。

Jan-Decとして値1〜12を表示するのに役立つ書式設定やその他のテクニックのカスタムコードはありますか?どんな助けもありがとう!

+0

なぜ '.Valueの= DateSerialの(2016、5、1)'? – Jeeped

+0

@Jeepedこの方法では、日付がセルに書き込まれるためです。しかし、整数だけをセルに書きたい –

+0

Jeepedの提案を使用して値を変更するにはworksheet_changeイベントを使用することができます。 –

答えて

2

日付と数字のルールを迂回することがミッションクリティカルな場合は、12の条件付き書式設定ルールを作成します。 1から12までの各数字/月の名前に1つずつ割り当てられ、短縮された月を記入するための「リテラル」カスタム書式マスクを提供します。

Sub cf_months() 
    Dim m As Long, cnf As String 
    With Worksheets("Sheet1") 
     With .Range("A1") 
      .FormatConditions.Delete 
      For m = 12 To 1 Step -1 
       cnf = StrConv(Format(DateSerial(2016, m, 1), "mmm"), vbUnicode) 
       cnf = Join(Split(cnf, vbNullChar), Chr(92)) 
       cnf = Chr(91) & Chr(61) & m & Chr(93) & Chr(92) & Left(cnf, Len(cnf) - 1) & Chr(59) & Chr(59) & Chr(59) 
       .FormatConditions.Add Type:=xlExpression, Formula1:=Chr(61) & .Address(0, 0) & Chr(61) & m 
       .FormatConditions(.FormatConditions.Count).NumberFormat = cnf 
       Debug.Print cnf 
      Next m 
     End With 
    End With 
End Sub 

cf_months

+0

forループが12から1ステップの代わりに1から12までの場合は問題ありません-1? –

+0

自分自身を記録してCFルールを作成すると、それらは常にキューの一番下に作成され、次に並べ替えられて新しいルールが先頭にくるようになります。私は並べ替えをしなかったし、通常はコードを必要なものに切り詰めた。私は実際に私がCFマネージャーに12月のキューを作成したときに、Jan-Decキューを維持するためにプロセスを重視し、その順序を逆転させたと思います。条件の重複がないので、重要ではありません。 – Jeeped

関連する問題