エクセルで簡易テキストエディタを作ってみた

ふとしたことからエクセルでセルの複数行に文字を一気に入れられたらいいな、なんて思いまして、ちょっと考えてみました。概ね以下の様な感じのやつです。
text003_1

簡易テキストエディタの主な仕様

1、セル上で何かアクションを起こすとテキストエディタが立ち上がる
2、普通のテキストエディタのようにエンターキーで改行可能
3、ボタンを押すと、エディタ上で入力した行がそのままセルに入る

VBAでこれを実現するには、テキストエディタ本体をUserFormで作るところから始めます。

スポンサーリンク

簡易テキストエディタの簡単な作り方

【Alt + F11】キーでVBEの立ち上げ

Visual Basic Editor(VBE)はVBAのコード(マクロ)を入力・テストするための開発環境です。エクセルに標準で搭載されています。

ユーザーフォームを作成

プロジェクトウィンドウ内の開いているところで【右クリック】→【挿入】→【ユーザーフォーム】でユーザーフォーム(UserForm)を新規作成します。
text001

UserFormの中にテキストボックスとコマンドボタンを一つずつ配置

各オブジェクトのオブジェクト名は以下に変更しました。オブジェクト名は後述するプロパティウィンドウで変更可能です。

UserForm1 ・・・UserForm_EDITTEXT
TextBox ・・・ TextBox_INPUTAREA
CommandButton ・・・ CommandButton_OK

※オブジェクト名はデフォルトのままでも良いのですが、どんな小さなプログラムでもわかりやすい名前をつけるクセをつけています。少し大がかりなものを作ろうとした時など、プログラム量がドカドカと増えてくると、名前を付けておかないと後々必ず混乱のもとになります。名前の命名規則的なものはあくまでも自己流です。

以下は作成したUserFormです。

UserForm_EDITTEXT
text002

TextBoxの以下2つのプロパティを変更

フォーム作成画面上でテキストボックスをクリックするとプロパティウィンドウ上にテキストボックスのプロパティが表示されます。プロパティウィンドウが表示されていない場合は、テキストボックスを【右クリック】→【プロパティ】で表示します。

EnterKeyBehavior = True(デフォルトはFalse)
※デフォルトのままだと改行は【Shift+Enter】になり、面倒なので変更します。Trueにすることによりエンターキーで改行できるようになります。

MultiLine = True(デフォルトはFalse)
※デフォルトだと1行しか入力できません。Trueにすることで複数行入力できるようになります。

プロパティに関してはフォーム作成時にコードで指定する方法もありますが、今回のような用途の場合、最初からプロパティで変えてしまったほうが楽です。

コマンドボタンのクリックイベントを作成

クリックイベントは、フォーム上でボタンがクリックされるとこのコードが実行されるという意味です。コードエディタの開き方は、フォーム作成画面のCommandoButton上で【右クリック】→【コードの表示】で開くか、直接ダブルクリックします。
【CommandButton_OK】

[vb]
Private Sub CommandButton_OK_Click()
Dim buf As Variant
Dim i As Integer

buf = Split(TextBox_INPUTAREA.Text, vbNewLine)
For i = 0 To UBound(buf)
ActiveCell.Offset(i, 0) = buf(i)
Next i
Unload UserForm_EDITTEXT
End Sub
[/vb]

マクロの解説的なもの

ここで行なっていることは、テキストエディタに入力された文字列を改行毎に分割して取得し、文字列を現在選択されているセルを起点にセルの行に順次入力していくという処理です。文字列の分割取得は5行目です。

5行目 buf = Split(TextBox_INPUTAREA.Text, vbNewLine)

Split関数は、テキストボックスに入力された文字列【TextBox_INPUTAREA.Text】を改行【vbNewLine】ごとに分割し、それぞれbuf配列に格納します。buf配列は実際には入力された行数によって動的に変化するので、6行目のUBound関数でbuf配列の数分だけループを回してセルに配置していく処理をしています。

フォームを呼び出すための処理作成

フォームの呼び出しはどのように作っても良いのですが、今回は使い勝手を考慮して、シート1の任意のセル上でダブルクリックした時にフォームが立ち上がるように作りました。
シート1上でのコード処理をするには、VBEのブロジェクトウィンドウ上に表示されているSheet1(Sheet1)上で【右クリック】→【コードの表示】をクリックするか、直接ダブルクリックします。

コードエディタ上で以下の赤枠のようにそれぞれを変更すると、VBE側で自動的に関数部分の枠だけ作ってくれます。便利な機能です。ここに作成したUserForm_EDITTEXTを表示するためのコードを入力します。

textedit001

【WorkSheet_BeforDoubleClick】に入力するコード
[vb]
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm_EDITTEXT.Show
End Sub
[/vb]

シート上でダブルクリックされたら、作ったテキストエディタフォームを表示(Show)しなさい、という意味です。
ここまで入力したらエクセルシート上に戻り、シート1の適当なセル上でダブルクリックしてみてください。作成したUserFormが表示されると思います。テキストボックスに文字を複数行入力してテストしてみてください。ボタンを押したら入力した文字がそのままセルに入力されれば完成です。

今回作ったシートは以下よりダウンロードできます。フォーム単体で動かせるので別な用途にも簡単に応用が出来ると思います。

簡易テキストエディタ ダウンロード(xlsファイル)

この記事をお届けした
satoの雑技術ノートの最新ニュース情報を、
いいねしてチェックしよう!
スポンサーリンク

フォローする