+ =
付 録 Ⅰ マクロのフローチャート 開 始 キーワード 数 と 文 章 数 をカウントする Yes 全 ての 文 章 番 号 (1 0) を 照 合 したか No 全 ての 文 章 番 号 (data) を 照 合 したか Yes No 文 章 番 号 (1 0) が 文 章 番 号 (data) と 等 しいか Yes No 値 を 一 行 全 て 0にする 値 を 一 行 全 て 0にする 全 ての キーワード 番 号 を 照 合 したか No 次 の 文 章 番 号 (1 0)に 移 る Yes 次 の 文 章 番 号 (1 0)に 移 る キーワード 番 号 が 形 態 素 番 号 より 小 さいか No Yes 値 を0にする キーワード 番 号 が 形 態 素 番 号 と 等 しいか Yes 値 を1にする まだ 同 じ 文 章 番 号 (data) があるか No まだ 同 じ 文 章 番 号 (data) があるか No No Yes 同 じ 文 章 番 号 (data)の 次 の 形 態 素 番 号 に 移 る Yes 次 のキーワード 番 号 に 移 る 次 のキーワード 番 号 に 移 る 同 じ 文 章 番 号 (data)の 次 の 形 態 素 番 号 に 移 る 一 行 の 残 りの 値 を 全 て0にする 次 の 文 章 番 号 (data)に 移 る 終 了 - 51 -
付 録 Ⅱ マクロのコード Sub 茶 坊 主 くん() Dim gyo As Integer, retu As Integer Dim goku As Integer, keygyo As Integer Dim bun As Integer, bunretu As Integer Dim cnt As Integer, cnt2 As Integer Dim kaz As Integer, bunkazu As Integer Dim i As Integer, j As Integer Dim motodata As String, ichizerodata As String retu = 5 'motodata の 文 章 番 号 がある 列 goku = 6 'motodata の 形 態 素 番 号 がある 列 bunretu = 1 'ichizerodata の 文 章 番 号 がある 列 keygyo = 1 'ichizerodata のキーワード 番 号 がある 行 motodata = "data" ' 元 のデータのあるシート ichizerodata = "1 0" '1 0データを 作 成 するシート gyo = 2 'motodata の 文 章 番 号 の 行 : 初 期 値 bun = 2 'ichizerodata の 文 章 番 号 の 行 : 初 期 値 kaz = 0 'キーワード 数 : 初 期 値 bunkazu = 0 ' 全 文 章 数 : 初 期 値 Do While Worksheets(ichizerodata).Cells(keygyo, kaz + bunretu + 1) <> "" kaz = kaz + 1 'キーワードの 数 をカウント Loop MsgBox " 抽 出 したキーワードの 数 は" & kaz Do While Worksheets(ichizerodata).Cells(bunkazu + keygyo + 1, bunretu) <> "" bunkazu = bunkazu + 1 ' 全 文 章 数 をカウント Loop MsgBox "1 0データ 化 する 文 章 の 数 は" & bunkazu Cells(keygyo, bunretu).select 'セル(1,1)をアクティブにする Cells(keygyo, bunretu).interior.colorindex = 6 'セル(1,1)に 色 を 付 ける Do While bun <= bunkazu + keygyo 'ichizerodata の 文 章 番 号 の 行 を 全 て 参 照 するまで 行 う Worksheets(ichizerodata).Cells(keygyo, bunretu).value = bun - 1 'icizerodata のセル(1,1)に, 現 在 操 作 中 の 文 章 番 号 を 記 入 If Worksheets(motodata).Cells(gyo, retu) <> "" Then 'motodata の 文 章 番 号 のセルが 空 白 でなければ - 52 -
Select Case Worksheets(ichizerodata).Cells(bun, bunretu) 'ichizerodata の 文 章 番 号 が Case Is < Worksheets(motodata).Cells(gyo, retu) 'motodata の 文 章 番 号 より 小 さいとき For i = 2 To kaz + 1 Worksheets(ichizerodata).Cells(bun, i).value = 0 ' 値 は 一 行 全 て0 Next i '------------------------------------------------------------------------------------- Case Is = Worksheets(motodata).Cells(gyo, retu) '(ichizerodata の 文 章 番 号 が)motodata の 文 章 番 号 と 等 しいときは cnt = bunretu + 1 'ichizerodata の2 列 目 (キーワードのある 列 )から Do While cnt <= kaz + bunretu 'ichizerodata の 全 てのキーワード 番 号 の 列 を 参 照 するまで 繰 り 返 す Select Case Worksheets(ichizerodata).Cells(keygyo, cnt) 'ichizerodata のキーワード 番 号 が Case Is < Worksheets(motodata).Cells(gyo, goku) 'motodata の 形 態 素 番 号 より 小 さいときは Worksheets(ichizerodata).Cells(bun, cnt).value = 0 ' 値 を0にして cnt = cnt + 1 ' 次 のキーワード 番 号 の 列 へ If cnt > kaz + bunretu Then 'もし,ichizerodata の 全 てのキーワード 番 号 を 参 照 してしまったら Do While Worksheets(motodata).Cells(gyo, retu) = _ Worksheets(motodata).Cells(gyo + 1, retu) 'motodata の 文 章 番 号 が 変 わるまで 行 を 進 める gyo = gyo + 1 Loop End If Case Is = Worksheets(motodata).Cells(gyo, goku) 'motodata の 形 態 素 番 号 と 等 しいときは Worksheets(ichizerodata).Cells(bun, cnt).value = 1 ' 値 を1にする If Worksheets(motodata).Cells(gyo, retu) = _ Worksheets(motodata).Cells(gyo + 1, retu) Then 'motodata の 次 の 文 章 番 号 が 変 わらない 場 合 - 53 -
gyo = gyo + 1 ' 同 じ 文 章 番 号 の 次 の 形 態 素 番 号 の 行 に 移 り cnt = cnt + 1 'ichizerodata の 次 のキーワード 番 号 に 移 る If cnt > kaz + bunretu Then 'もし,ichizerodata の 全 てのキーワード 番 号 を 参 照 してしまったら Do While Worksheets(motodata).Cells(gyo, retu) = _ Worksheets(motodata).Cells(gyo + 1, retu) 'motodata の 文 章 番 号 が 変 わるまで 行 を 進 める gyo = gyo + 1 Loop End If Else 'motodata の 文 章 番 号 が 変 わった 場 合 For i = cnt + 1 To kaz + 1 Worksheets(ichizerodata).Cells(bun, i).value = 0 ' 残 りの 値 を0にして Next i Exit Do 'ループを 抜 ける End If Case Is > Worksheets(motodata).Cells(gyo, goku) 'motodata の 形 態 素 番 号 より 大 きいとき If Worksheets(motodata).Cells(gyo, retu) = _ Worksheets(motodata).Cells(gyo + 1, retu) Then 'motodata の 次 の 文 章 番 号 が 同 じ 場 合 gyo = gyo + 1 ' 同 じ 文 章 番 号 の 次 の 形 態 素 番 号 の 行 に 移 り Else 'motodata の 文 章 番 号 が 変 わった 場 合 For i = cnt To kaz + 1 Worksheets(ichizerodata).Cells(bun, i).value = 0 ' 残 りの 値 を0にして Next i Exit Do 'ループを 抜 ける End If End Select - 54 -
Loop 'ichizerodata の 最 後 のキーワード 番 号 の 列 を 参 照 するまでループ gyo = gyo + 1 'motodata の 次 の 文 章 番 号 の 行 に 移 る '----------------------------------------------------------------------------------------- Case Is > Worksheets(motodata).Cells(gyo, retu) '(ichizerodata の 文 章 番 号 が)motodata の 文 章 番 号 より 大 きいときは End Select Else 'motodata の 文 章 番 号 が 空 白 になったら For i = 2 To kaz + 1 Worksheets(ichizerodata).Cells(bun, i).value = 0 ' 値 は 全 て0にする Next i End If bun = bun + 1 'ichizerodata の 次 の 文 章 番 号 について 行 う Loop End Sub - 55 -
付 録 Ⅲ 茶 坊 主 くん.txt からVBファイルを 作 成 する 本 文 中 では 茶 坊 主 くん のマクロは 作 成 済 みという 前 提 で 解 説 しており 公 開 しているマク ロのコードを 参 考 に 各 自 で 対 応 していただくことにしている しかし 実 際 にコードを 入 力 する 作 業 は 面 倒 と 感 じられる 方 も 多 いと 思 われるので テキスト 形 式 でマクロのコードを 配 布 するこ とにした テキスト 形 式 としたのは セキュリティ 上 の 問 題 に 配 慮 したためであるが テキスト 形 式 のファイルでは そのままマクロとして 実 行 することはできない そこで 以 下 では テキスト 形 式 のファイル 茶 坊 主 くん.txt から マクロが 実 行 可 能 なV Bファイル 茶 坊 主 くん.bas を 作 成 する 手 順 を 紹 介 する なお ここではVBファイルの 作 成 について 述 べるが もちろん 1 0データファイル 作 成 の 過 程 で テキストのコードをVBE (Visual Basic Editor)のコードウィンドウに 直 接 コピー&ペーストして 実 行 していただいても 一 向 に 構 わない 1.Excel の ツール(T) - マクロ(M) - Visual Basic Editor(V) を 選 択 してVBEを 起 動 し 挿 入 (I) - 標 準 モジュール(M) をクリックする - 56 -
2. 茶 坊 主 くん.txt のファイルを 開 き コードをコピーする 3.VBEのコードウィンドウにコードを 貼 り 付 ける - 57 -
4. ファイル(F) - ファイルのエクスポート(E) を 選 択 し ファイル 名 を 茶 坊 主 くん と して 保 存 する - 58 -