Excel VBA ファイル操作
UNICODE でテキスト保存
海外から、Excelで、毎月、売り上げのトランザクション・ファイルが送られてきます。
これを、期末に、自動で集計するためのマクロを作りました。
テキスト保存する形式を、ShiftJIS、Unicode(UTF16)、UTF-8 から選択できるところが売りです。
1.マクロの機能
(1).このExcelシートと同じフォルダの全てのExcelシートを、テキスト保存します。
(2).保存するテキストの形式を、ShiftJIS、Unicode(UTF16)、Unicode(UTF8)から選択できます。
(3).保存したテキストを一つのファイルに集約できます。
(4).集約(合体)したファイルは、ソートして出力します。
2.マクロの使い方
(1).作業用のフォルダを作ります。
(2).テキスト保存したいExcelブック(1つでも複数でも可)を、作業用フォルダに登録します。
(3).このマクロ Excelも、作業用のフォルダに保存します。
(4).作業用のフォルダから、このマクロ Excelを開いて、テキスト形式のボタンを押します。
(5).テキスト保存したファイルは、最後に1つのファイルに合体します。合体ファイルは、作業用フォルダ名をファイル名として、作成します。
EPWING 辞書複数行テキストを StarDict 1行テキストに変換 (UTF-8 ファイルの読み書き)も参照下さい。
こちら↑の方法を使えば、[参照設定]Microsoft ActiveX Data Objects Library は不要です。
解説:
SaveAs メソッドを、Workbook オブジェクトに指定した場合、ブックの内容を、別のファイルに保存します。
expression.
SaveAs(
FileName,
FileFormat,
Password,
WriteResPassword,
ReadOnlyRecommended,
CreateBackup,
AccessMode,
ConflictResolution,
AddToMru,
TextCodepage,
TextVisualLayout,
Local)
expression 必ず指定します。この場合は、
Workbook オブジェクトを返すオブジェクト式を指定します。
Filename 省略可能です。バリアント型 (
Variant) の値を使用します。保存するファイルの名前を表す文字列を指定します。絶対パスを含めることもできます。絶対パスを含めない場合は、ファイルはカレント フォルダに保存されます。
FileFormat 省略可能です。バリアント型 (
Variant) の値を使用します。ファイルを保存するときのファイル形式を指定します。
指定できる形式は、
FileFormat プロパティのいずれかを指定します。既存のファイルでは、指定された最後のファイル形式が既定のファイル形式です。新しいファイルでは、現在使用されている Excel のバージョンでのファイル形式が既定のファイル形式です。
Password 省略可能です。バリアント型 (
Variant) の値を使用します。保存するファイルに設定する読み取りパスワードを表す文字列を指定します。パスワードは 15 文字以内の文字列で指定し、大文字と小文字が区別されます。
WriteResPassword 省略可能です。バリアント型 (
Variant) の値を使用します。保存するファイルに設定する書き込みパスワードを表す文字列を指定します。パスワードを設定して保存したファイルを、パスワードを指定しないで開くと、ファイルは読み取り専用で開かれます。
ReadOnlyRecommended 省略可能です。バリアント型 (
Variant) の値を使用します。ファイルを開くときに、読み取り専用で開くことを推奨するメッセージを表示するには、
True を指定します。
CreateBackup 省略可能です。バリアント型 (
Variant) の値を使用します。バックアップ ファイルを作成するには、
True を指定します。
AccessMode 省略可能です。
XlSaveAsAccessMode クラスの定数を使用します。
使用できる定数は、次に示す XlSaveAsAccessMode クラスのいずれかです。 |
xlExclusive 排他モード |
xlNoChange (既定値) アクセス モードを変更しない |
xlShared 共有モード
この引数を省略すると、アクセス モードは変更されません。共有ファイルをファイル名を変えずに保存した場合は、この引数は無視されます。アクセス モードを変更するには、ExclusiveAccess メソッドを使います。
|
ConflictResolution 省略可能です。
XlSaveConflictResolution クラスの定数を使用します。
使用できる定数は、次に示す XlSaveConflictResolution クラスのいずれかです。 |
xlUserResolution [変更箇所のコンフリクト] ダイアログ ボックスを表示 |
xlLocalSessionChanges 自動的にローカル ユーザーの変更を反映 |
xlOtherSessionChanges 他のユーザーの変更を反映
この引数を省略すると、[変更箇所のコンフリクト] ダイアログ ボックスが表示されます。
|
AddToMru 省略可能です。バリアント型 (
Variant) の値を使用します。最近使用したファイルの一覧にブックを追加するには
True を指定します。既定値は
False です。
TextCodePage 省略可能です。バリアント型 (
Variant) の値を使用します。英語の Excel では使用できません。
TextVisualLayout 省略可能です。バリアント型 (
Variant) の値を使用します。英語の Excel では使用できません。
Local 省略可能です。バリアント型 (
Variant) の値を使用します。Excel の言語設定 (コントロール パネルの設定を含む) に合わせてファイルを保存するには、
True を指定します。Visual Basic for Applications (VBA) の言語設定に合わせてファイルを保存するには、
False (既定値) を指定します。通常この設定は、Workbooks.Open を実行する VBA プロジェクトが Excel バージョン 5 または 95 の各国語版で作成されたプロジェクトでない限り、英語 (U.S.) になります。
次の例は、新しいブックを作成し、ユーザーにファイル名を入力させるダイアログ ボックスを表示して、そのファイル名でブックを保存します。
Set NewBook = Workbooks.Add
Do
fName = Application.GetSaveAsFilename
Loop Until fName <> False
NewBook.SaveAs Filename:=fName
ADODB.Stream オブジェクトのコレクションおよびプロパティを使うと、次の操作を行うことができます。
ADODB.Stream を使うためには Microsoft ActiveX Data Objectを参照設定します。
ADO レコードセット、レコード、およびストリーム オブジェクトを使用してドキュメントを開く方法
https://support.microsoft.com/kb/248255/ja
- Open メソッドを使って、Record または URL から Stream を開きます。
- Close メソッドを使って、Stream を閉じます。
- Write メソッドまたは WriteText メソッドを使って、バイトまたはテキストを Stream に入力します。
ファイルに出力するのではない点に注意。
- Read メソッドまたは ReadText メソッドを使って、Stream からバイトを読み取ります。
StreamReadEnum により、Stream オブジェクトから、ストリーム全体、または次の行を読み取るかどうかを指定します。
StreamReadEnum 定数 | StreamReadEnum 値 | 説明 |
adReadAll | -1 | 既定値です。現在の位置から EOS マーカー方向に、すべてのバイトをストリームから読み取ります。
これは、バイナリ ストリームに唯一有効な StreamReadEnum 値です (Type は adTypeBinary)。 |
adReadLine | -2 | ストリームから次の行を読み取ります (LineSeparator プロパティで指定)。 |
- Flush メソッドを使って、ADO バッファにある Stream データを基になるオブジェクトに書き込みます。
- CopyTo メソッドを使って、Stream の内容を別の Stream にコピーします。
-
SkipLineメソッドおよび LineSeparator プロパティを使って、ソース ファイルから行を読み取る方法を制御します。
LineSeparator プロパティは、テキスト Stream オブジェクトの行区切り文字として使用する改行コードを指定します。
値の取得も可能です。既定は adCRLF です。
-1:adCRLF:CRLF (Windows)
10:adLF:LF (Unix)
13:adCR:CR
- EOSプロパティおよび SetEOS メソッドを使って、ストリーム位置の末尾を設定します。
- SaveToFileメソッドおよび LoadFromFile メソッドを使って、ファイル内のデータを保存および復元します。
Stream オブジェクトからファイルを保存するときに、SaveOptionsEnum を使って、ファイルを作成するか、上書きするかを表します。これらの値は AND 演算子で結合することができます。
SaveOptionsEnum 定数 | SaveOptionsEnum 値 | 説明 |
adSaveCreateNotExist | 1 | 既定値です。FileName パラメータで指定したファイルがない場合は新しいファイルが作成されます。 |
adSaveCreateOverWrite | 2 | FileName パラメータで指定したファイルがある場合は、現在開かれている Stream オブジェクトのデータでファイルが上書きされます。 |
- Charset プロパティを使って、Stream の保存に使う文字セットを指定します。
- Cancel メソッドを使って、非同期 Stream 操作を停止します。
- Size プロパティを使って、Stream 内のバイト数を設定します。
- Position プロパティを使って、Stream 内の現在の位置を制御します。
- Type プロパティを使って、Stream 内のデータ型を設定します。
- State プロパティを使って、Stream の現在の状態 (開いている、閉じている、または実行中) を設定します。
- Mode プロパティを使って、Stream のアクセス モードを指定します。
https://msdn.microsoft.com/ja-jp/library/cc364272.aspx
WriteText メソッド
指定したテキスト文字列を文字列型の
Stream オブジェクトに書き込みます。
構文
Stream.WriteText Data, Options
パラメータ
- Data
- 書き込む文字テキストを含む文字列型 (String) の値を指定します。
- Options
- 省略可能です。指定した文字列の終わりに行区切り文字を書き込むかどうかを StreamWriteEnum 値で指定します。
StreamWriteEnum 定数 | StreamWriteEnum 値 | 説明 |
adWriteChar | 0 | 既定値で、行区切り文字は無しです。 Stream オブジェクトに対して、Data パラメータで指定したテキスト文字列を書き込みます。 |
adWriteLine | 1 | Stream オブジェクトに、テキスト文字列と行区切り文字を書き込みます。 LineSeparator プロパティが定義されていない場合は、実行時エラーを返します。 |
解説
指定した文字列が
Stream オブジェクトに書き込まれます。このとき、各文字列間にスペースや文字は挿入されません。
現在の
Position は、書き込まれたデータの次の文字に設定されます。
WriteText メソッドでは、ストリーム内の残りの文字データは削除されません。これらの文字を削除する場合は、
SetEOS メソッドを呼び出してください。
現在の
EOS の位置を越える書き込みを行うと、
Stream の
Size は、新しく書き込まれた文字がすべて格納されるように拡張され、
EOS は、
Stream に新しく書き込まれた最後の文字に移動します。
注意 WriteText メソッドは、文字列型ストリーム (Type が adTypeText) で使用します。バイナリ型のストリーム (Type が adTypeBinary) には、Write を使用してください。
バイナリ データを書き込む場合:
Write メソッド
(UTF-8 ファイルの読み書き) EPWING 辞書複数行テキストを StarDict 1行テキストに変換
Windows パソコンの DDwin で使っていた「福武国語辞典 電子ブック版」の内容を、Android 電子書籍ブラウザの ColorDict で表示させるために、辞書データを変換するために作ったマクロです。
(UTF-8 ファイルの読み書き) 電子ブック辞書テキストから漢字キーを生成する
電子ブックのキーは、「かな」しかありません。キーボードから検索語を入力するならそれでよいのですが、電子書籍からコピペするには、漢字キーも必要です。
このため、このマクロを作って、よみ・漢字をひっくり返して、漢字キーを生成しました。
生成したテキストは、上のテキストと合体して、StarDict Editor に渡して、辞書データに変換します。
(UTF-8 ファイルに追記) UTF-8ファイルを読んで、指定文字列を含む行を抽出して出力
教えていただいたサイト
UTF-8形式のテキストファイルに書き込む
http://officetanaka.net/excel/vba/file/file11.htm
(UTF-8 ファイルに追記) 英文 HTML に、Google で作成した英和対訳ファイルの日本語部分を挿入して出力
プロジェクト・グーテンベルクでは、無償の電子書籍を公開しています。
著作権が切れた作品を中心に、世界の偉大な文学を、ここで見つけることができます。
ここに、「みつばちマーヤの冒険」の英文訳 The Adventures of Maya the Bee がありました。
(『みつばちマーヤの冒険』は、ハンブルク生まれの作家、児童文学者のワルデマル・ボンゼルスが1912年に発表した(原題:Die Biene Maja und ihre Abenteuer、『みつばちマーヤとその冒険』)
https://www.gutenberg.org/ebooks/22354
この中の「Read this book online: HTML (as submitted)」を使って、GAS(Google Apps Script) に渡すと、英和対訳ファイルを作成できます。
このマクロは、最初に英和対訳ファイルを読んで、英文の最後の単語と和文の配列(辞書)を作成します。
次に英文HTMLを読んで英文の最後の単語をキーに、先に作成済の配列から和文を挿入していきます。
注意点としては、HTML には文字強調などのタブが入っているので、HTML 解析時にはこの不要なタブを除去して処理しています。
追記:Sigil を使うと、簡単に HTML を ePub に変換できます。