
目次
試験日まで残日数を赤字でカウントする|VBA (完成図)
これなら合格間違いなし!のはず!
試験日まで残日数を赤字でカウントする|VBA
試験日まで残日数を赤字でカウントするエクセルです。
試験日までの日付を縦列に並べて、試験まであと〇〇日です。のようなエクセルを自分で作って学習時間の進捗管理をしたい。
誰もが一度はやった事がありそうなエクセルの使い方です。大体みなさんは下記のような図を作って土曜日曜は赤字にしたりして、なるべく見やすいようにすると思います。
であるなら・・・あと〇〇日ですの残日数も赤字にしようとすると、あれ・・・なかなかできないぞ・・・となるはずです。
それもそのはず、エクセルは計算式ではじき出した数字には色を付けられません。
エクセルのセルの中で 数字だけに色をつけたい 場合、
通常の数式(="文字列"&数字&"文字列"
)では無理 です。
エクセルの数式は、部分的なフォント装飾(太字・色変更)に対応していないためです。
したがって残日数を赤字でハッキリするには、残念な事にVBAマクロというめんどくさい事をしなければなりません・・・。
せっかく気合をいれたく、エクセルまでこさえたのに肝心なところがなんともすぐできないのはもどかしい・・・・。
どうせなら赤字にしてより緊張感を持って臨みたいものです。ですので今回はサンプルを出しますのでコピペして赤字にするマクロを紹介します。
これで気合を入れてください。
Bファイルの特定のセルの値を判別するマクロを作る
まずはマクロを作ります。メニューの「開発」タブから「マクロ」を押下します。
ボタンを押下すると「マクロ」という小窓が出てきます。
ここに自分でマクロ名を入力します。今回は「太字カウント」と入力しました。
入力すると「作成」ボタンが黒字になるのでそこを押下します。
Sub 太字カウント()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") 'シート名を合わせてね
Dim examDate As Date
examDate = ws.Range("B18").Value
Dim i As Long
Dim currentRow As Long
Dim currentDate As Date
Dim daysLeft As Long
Dim numLen As Long
currentRow = 3 ' B3から開始
Do While ws.Range("B" & currentRow).Value <> ""
currentDate = ws.Range("B" & currentRow).Value
daysLeft = examDate - currentDate
If daysLeft >= 0 Then
ws.Range("E" & currentRow).Value = "試験まであと " & daysLeft & " 日です"
numLen = Len(CStr(daysLeft))
With ws.Range("E" & currentRow).Characters(8, numLen).Font
.Bold = True
.Color = RGB(255, 0, 0) ' 赤
End With
Else
ws.Range("E" & currentRow).Value = "試験は終了しました"
End If
currentRow = currentRow + 1
Loop
End Sub
と書き込みです(書くのが面倒ならコードをコピペしてください)。
ここで注意があります。各マーカーの所はご自身の環境により書き直さねばなりません。
赤マーカーの所は「Sheet1」もしくはご自身のシート名を入力。
青マーカーの所は試験日が書いてあるセルを入力。
黄色マーカーの所はカウントする最初の日付が書いてあるセルの行番号を入力(サンプルのように3行目なら3)
これでセーブして、実行すれば完成図のように残日数は赤字となります。
マクロを保存するには必ず拡張子を.xlsmにして保存しなければならない
エクセルは必ずマクロ有効ファイルの拡張子.xlsmで保存してください。
そうしないとマクロが保存されません。やり方は「名前を付けて保存」を選択して、下のファイルの種類を「マクロ有効ブック(.xlsm)」にして保存です。
するとファイル名は 「~~,xlsm」になります。

まとめ
いかがだったでしょうか。
残数のカウントはすぐに誰でもできるのですが、その残数を赤字にしたいだけなのに そうする為にはVBAを使わないといけないという
なんともかゆい所に手が届かないのがエクセルです。
しかし、こんな事をするためにwebであれこれサンプルを探すのも大変苦労しますので、ぜひ当ページでササっとコピペしていただければ幸いです。