【VBA】別シートの数値を演算し、文章を出力
- uniteen
- 2015年7月20日
- 読了時間: 2分
こんにちわ。
三連休です。
マジで暑い。
【文章の作成マクロ】
といっても、別にたいそうなことでもないです。
マクロ側に文章を登録し、別のシートの数値を文章の中に組み込み、
文章を再構成するということです。
今回は、
「今日の天気は、【曇り】です。」
の【】内を日によって変えたいと思います。
①文章について
書き方は、素の文章(関数や変数が入っていない、純粋な文章を
" "つきで書く
ex) "今日の天気は、 " "です。"
②変えたい文章
変数にして、マクロが計算できるようにします。その後、&を挟んで①とがっちゃんこします。
Dim Weather
"今日の天気は " & Weather & "です。"
③別のシートの情報を読み取らせる
別のシートには、天気の情報が載っているとします。
と、ここでお遊びですが前回の記事の復習がてら自動で天気を
日ごとにランダム生成するマクロを作りましょう。
1~31ごとにランダムに【晴れ】【曇り】【雨】を代入します。

Sub AddWeatherData()
Dim i
Dim rdm
For i = 1 To Cells(Rows.Count, 16).End(xlUp).Row
rdm = Int(Rnd * 3)
If rdm = 0 Then
Range("Q" & i) = "晴れ"
ElseIf rdm = 1 Then
Range("Q" & i) = "雨"
ElseIf rdm = 2 Then
Range("Q" & i) = "曇り"
End If
Next i
End Sub
と、サンプルの表ができたので、さっそく別シートからデータをひっぱりましょう。
Sub WeatherReport()
Dim Weather
Dim today As Long
Set sheet = ThisWorkbook.Worksheets("data")
today = Format(Now, "d")
For i = 1 To sheet.Cells(Rows.Count, 16).End(xlUp).Row
If sheet.Cells(i, 16) = today Then
Weather = sheet.Cells(i, 17)
Exit For
End If
Next i
Cells(29, 8) = "今日の天気は 、" & Weather & "です。"
End Sub

横のdataタブから、今日の日付と同じ番号を引っ張り、
対応する天気をWheatherに代入しています。
注意ですが、
If sheet.Cells(i, 16) = Format(Now, "d")
としても、エラーになります。数字はあっていても書式が違うと判定されてしまうよう
ですので、最初に別の変数でLong宣言をしておきましょう。
こんな感じで、日本語に変数を加えて適宜文章を出力できます。
csvの読み込みができるようになると、たぶんもっと楽になりますね。
では。
Comments