ナルミンチョの創作記録のロゴ

Excelでのデータ作成について

2016/01/01

動機とソースコード

RPGは沢山のデータによって成り立っています。 そんな沢山のデータをプチコンで入力するのは大変なので、EXCELを用いて、データを作成し、テキストデータに変更するプログラムを書きました。

使用例

使用例

実際のコード

Option Explicit Private Kata() As Integer Private Const naComment As Integer = 1 Sub ExcelToPetitcom() Dim x As Integer Dim y As Integer Dim FileName As String Dim OneRow As String FileName = InputFileName() Warning (FileName) Open FileName For Output As #1 Print #1, GetTitleComment() Print #1, GetLabel() Print #1, GetIndex() Call SetVariableType For y = 5 To GetMaxRows() x = 1 OneRow = "DATA " Call CheckEmpty(y, x) OneRow = OneRow & ChangeText(y, x) For x = 2 To GetMaxColumns() Call CheckEmpty(y, x) OneRow = OneRow & "," & ChangeText(y, x) Next Print #1, OneRow Next Call EndData End Sub '空のデータチェック Private Sub CheckEmpty(y, x) If Cells(y, x) = "" Then MsgBox "空のデータがあります。" & vbLf & "座標は(" & Str$(x) & "," & Str$(y) & ")" End If End Sub '終了 Private Sub EndData() Print #1, "'終了" MsgBox "変換を終了しました。" & vbLf & "テキストエディタなどで、文字コードを シフトJIS から UTF-8 に、" & vbLf & "改行コードをCRLFからLFに、変更してください。" Close #1 End End Sub 'ファイル名入力 Private Function InputFileName() As String Dim Name As String ChDrive "C" ChDir "C:\Users\秀人\Documents\プチコン3号_RPG\data" Name = Application.GetOpenFilename("テキスト,*.txt", , "変換したデータが入るファイルを選択") If Name = "False" Then End End If InputFileName = Name End Function '最終確認 Private Sub Warning(Name) Dim Result Result = MsgBox("ファイル名は" & Name & "です。" & vbLf & "変換を開始しますか?", vbOKCancel, "アイテム変換確認") If Result = vbCancel Then MsgBox "変換を中止しました。" End End If End Sub 'タイトルと最終更新日を所得 Private Function GetTitleComment() GetTitleComment = "'" & Cells(1, 1) & "(" & Cells(1, 3) & ")" End Function 'ラベルを取得する Private Function GetLabel() Dim Text As String Text = Mid(Cells(1, 2), 1) GetLabel = Text End Function '見出しを取得する Private Function GetIndex() Dim x As Integer Dim Text As String Text = Cells(3, 1) For x = 2 To GetMaxColumns() Text = Text & "," & Cells(3, x) Next GetIndex = "'" & Text End Function '数値か文字列かのデータを判断し配列に入れる Private Sub SetVariableType() Dim x As Integer Dim Text As String ReDim Kata(GetMaxColumns()) For x = 1 To GetMaxColumns() Text = Cells(4, x) If Text = "s" Then Kata(x) = vbDouble If Text = "m" Then Kata(x) = vbString If Text = "c" Then Kata(x) = naComment Next End Sub '列の数を取得する Private Function GetMaxColumns() Dim Value As Integer Value = Cells(3, 1).End(xlToRight).Column GetMaxColumns = Value End Function '行の数を取得する Private Function GetMaxRows() Dim Value As Integer Value = Cells(3, 1).End(xlDown).Row GetMaxRows = Value End Function Private Function ChangeText(y, x) Dim Text As Variant Dim Result As String Text = Cells(y, x) If Kata(x) = naComment Then Result = "'" & Text Else Call CheckVarType(y, x) If Kata(x) = vbString Then Result = """" & Text & """" ElseIf Kata(x) = vbDouble Then Result = Text End If End If ChangeText = Result End Function '型チェック Private Sub CheckVarType(y, x) If VarType(Cells(y, x)) <> Kata(x) Then MsgBox "型の違うデータがあります。" & vbLf & "座標は(" & Str$(x) & "," & Str$(y) & ")" End If End Sub

使い方

使い方は簡単。使用例の画像の様に、データを入力し、ALT+F11を押してエディターを開いて、このコードを入れ実行するだけ。

4行目に入る文字は、その列のデータが文字列ならm 数値が入るならsを入れればいい。 コードがあまり綺麗じゃないのは気にしても気にしなくても良い。 正常に動くはずです。

文字コードの変換と改行コードの変更は別のプログラムで行ってください。 私は、サクラエディタのマクロを使用しました。

サクラエディタのマクロ

まず、これを実行すれば、変換ができます。 //サクラエディタのマクロ(2015/10/04) //改行コードをCRLFからLFにして、 //文字コードをShift-JISから、UTF-8にする。 S_ReplaceAll("\r\n", "\n"); // すべて置換 S_SelectAll(0); // すべて選択 S_SJIStoUTF8(0);// SJIS→UTF-8コード変換 S_ReDraw(0); // 再描画 一度上書き保存をしてから、次を実行すると、開き直して確認することができます。 //サクラエディタのマクロ(2015/10/04) //UTF-8で開きなおして確認する S_FileReopenUTF8(0); // UTF-8で開き直す S_GoFileEnd(0); // ファイルの最後に移動 S_ReDraw(0); // 再描画


ホームに戻る