■作成するプログラムの概要
・Excelの「メッセージ表示」シートに「メッセージID」を入力する。
・「メッセージ表示」ボタン押下時、取得した「メッセージID」に紐づくメッセージを「message.csv」ファイルから取得する。
■フローチャート
■プログラム仕様
処理名 | メッセージ表示 |
---|---|
処理概要 | 「メッセージ表示」ボタン押下時、 セルに入力したIDと同じIDをメッセージファイルから取得し、 メッセージを表示する。 |
引数 | なし |
戻り値 | なし |
入力 | 処理内容 | 出力 |
---|---|---|
【主処理】 | ||
– | シート名をセットする。 シート名:メッセージ表示 | – |
– | メッセージファイル(フルパス)をセットする。 パス:D:\macro\メッセージ取得_表示\message.csv | – |
– | ファイルオブジェクトをセットする。 | – |
– | ファイルオープンオブジェクトをセットする。 | – |
– | 連想配列をセットする。 | – |
【csvファイル】 メッセージファイル message.csv (ID,メッセージ) | ■ループ処理:メッセージファイルの最終行まで |1行ずつ読み込む。 |一時配列に、カンマ区切りの要素を格納する。 |連想配列にIDとメッセージを格納する。 ■ | – |
【セル値】 メッセージID | セルに入力したメッセージIDを取得する。 | – |
– | ▼条件分岐 |【IDを入力していない場合】 |入力なしを出力する。・・・① ------ |【IDがファイルに存在する場合】 |対応するメッセージを出力する。・・・② ------ |【IDがファイルに存在しない場合】 |IDなしを出力する。・・・③ ------ |【上記以外】 |ID取得エラーを出力する。・・・④ ▲ | 【セル値】 ①入力なし ②メッセージ ③IDなし ④ID取得エラー |
【例外処理】 | ||
– | エラーメッセージを出力する。 | 【MsgBox】 エラーメッセージ |
【終了処理】 | ||
– | シート名を解放する。 | – |
– | ファイルオブジェクトを解放する。 | – |
– | ファイルオープンオブジェクトを解放する。 | – |
– | 連想配列を解放する。 | – |
■画面レイアウト
①セル(N3)にメッセージIDを入力する。
②「メッセージ表示」ボタン押下時、セル(N6)に対応するメッセージを出力する。
■ファイルレイアウト
・message.csv
00001,こんにちは
00002,ありがとう
00003,さようなら
■サンプルコード
Option Explicit
' シート名の定数
Private Const SHEETNAME_MESSAGE As String = "メッセージ表示"
' メッセージID取得行列の定数
Private Const INPUT_MESSAGE_ID_ROW As Integer = 3
Private Const INPUT_MESSAGE_ID_COL As Integer = 14
' メッセージ表示行列の定数
Private Const OUTPUT_MESSAGE_ID_ROW As Integer = 6
Private Const OUTPUT_MESSAGE_ID_COL As Integer = 14
' メッセージファイルのファイル名とパス
Private Const MESSAGE_FILE_NAME As String = "message.csv"
Private Const MESSAGE_FILE_PATH As String = "D:\macro\メッセージ取得_表示\"
' 処理名 :メッセージ表示
' 処理概要 :「メッセージ表示」ボタン押下時、
' セルに入力したIDと同じIDをメッセージファイルから取得し、
' メッセージを表示する
' 引数 :なし
' 戻り値 :なし
Public Sub btn_click_GetMessageID()
Dim sht_message As Worksheet ' シート格納変数
Dim filename As String ' ファイル名(フルパス)
Dim fso As Object ' ファイルオブジェクト
Dim openfile As Object ' ファイルオープンオブジェクト
Dim strLine As String ' ファイルを1行ごとに格納
Dim msg_dictionary As Object ' 連想配列:メッセージID,メッセージ
Dim tmp_list() As String ' 一時格納配列
Dim input_message As String ' セルから取得したメッセージID
On Error GoTo btn_click_GetMessageID_error
' シート名をセット
Set sht_message = Sheets(SHEETNAME_MESSAGE)
' メッセージファイル(フルパス)をセット
filename = MESSAGE_FILE_PATH & MESSAGE_FILE_NAME
' ファイルオブジェクトをセット
Set fso = CreateObject("Scripting.FileSystemObject")
' ファイルオープンオブジェクトをセット
Set openfile = fso.opentextfile(filename)
' 連想配列をセット
Set msg_dictionary = CreateObject("Scripting.Dictionary")
' メッセージファイルの最終行まで繰り返し
Do Until openfile.AtEndOfStream = True
' 1行ずつ読み込み
strLine = openfile.ReadLine
' 一時配列に、カンマ区切りの要素を格納(0:ID、1:メッセージ)
tmp_list() = Split(strLine, ",")
' 連想配列にIDとメッセージを格納
msg_dictionary.Add tmp_list(0), tmp_list(1)
Loop
' 「メッセージ表示」シートにフォーカス
With sht_message
' 入力したメッセージIDを取得
input_message = _
.Cells(INPUT_MESSAGE_ID_ROW, INPUT_MESSAGE_ID_COL).Value
' IDが入力していない場合
If input_message = "" Then
' ID入力を出力
.Cells(OUTPUT_MESSAGE_ID_ROW, OUTPUT_MESSAGE_ID_COL).Value = _
"IDを入力してください"
' メッセージIDがファイルに存在する場合
ElseIf msg_dictionary(input_message) <> "" Then
' メッセージを出力
.Cells(OUTPUT_MESSAGE_ID_ROW, OUTPUT_MESSAGE_ID_COL).Value = _
msg_dictionary(input_message)
' メッセージIDがファイルに存在しない場合
ElseIf msg_dictionary(input_message) = "" Then
' IDなしを出力
.Cells(OUTPUT_MESSAGE_ID_ROW, OUTPUT_MESSAGE_ID_COL).Value = _
"IDが存在しません"
' メッセージID取得の例外処理
Else
' エラーを出力
.Cells(OUTPUT_MESSAGE_ID_ROW, OUTPUT_MESSAGE_ID_COL).Value = _
"エラーID取得エラー"
End If
End With
' 終了処理へ
GoTo btn_click_GetMessageID_exit
' 例外処理
btn_click_GetMessageID_error:
' エラーメッセージを出力
MsgBox Err.Description
' 終了処理へ
GoTo btn_click_GetMessageID_exit
' 終了処理
btn_click_GetMessageID_exit:
' オブジェクト系を解放
Set openfile = Nothing
Set fso = Nothing
Set sht_message = Nothing
Set msg_dictionary = Nothing
End Sub
■実行結果
▼正常系
・「00001」入力後、「メッセージ表示」ボタンを押下する。
・「00002」入力後、「メッセージ表示」ボタンを押下する。
・「00003」入力後、「メッセージ表示」ボタンを押下する。
▼異常系
・セル(N3)にIDを入力せずに「メッセージ表示」ボタンを押下する。
・セル(N3)について、メッセージファイル(message.csv)に存在しないID「00004」を入力し、「メッセージ表示」ボタンを押下する。
コメント