目次
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Sub add_text_to_excel() Dim fso As Object Dim text_file As Object Dim buf As String Set fso = CreateObject("Scripting.FileSystemObject") Set text_file = fso.OpenTextFile("ファイルパス.txt") buf = text_file.ReadAll Const WORD As String = "検索対象の文字列" Dim wordlen As Integer ' 検索文字列の長さ' Dim lines As Variant ' テキストファイルの行を分割し、格納する変数' Dim line As Variant ' 1行分' ' 改行コードでテキストを分割、変数linesに格納' lines = Split(buf, vbCrLf) ' 検索文字列の長さ取得' wordlen = Len(WORD) i = 1 ' 行ごとにループ' For Each line In lines ' 行の先頭に検索対象文字列があるか' If Left(line, wordlen) = WORD Then ' あった場合、sheet1を選択しプリントする。' Worksheets("Sheet1").Select Cells(i + 1, 1) = line GoTo CONTINUE End If '検索文字列がない場合、sheet2にプリントする。' Worksheets("Sheet2").Select Cells(i + 1, 1) = line CONTINUE: i = i + 1 Next MsgBox buf Set TextFile = Nothing Set fso = Nothing End Sub |
※追記
まずエクセルを起動し”sheet2”を作成する。”sheet2″がなかった場合、エラーが出る。
ExcelのVBAでsheet2がなければsheet2を作成し、sheet2があればシートを作らないプログラム
メモ帳の情報を取得する方法・メッソッドなどまとめ
FileSystemObject オブジェクト
コンピューターのファイル システムへのアクセスを提供
→オブジェクト変数を使用し、インスタンスを作成する。
Set fs = CreateObject(“Scripting.FileSystemObject”)
OpenTextFile メソッド
指定したファイルを開き、開いたファイルの読み取り、書き込み、または追加書き込みに使用できる TextStream オブジェクトを返します。
構文
object.OpenTextFile (filename, [ iomode, [ create, [ format ]]])
ReadAll メソッド
TextStream ファイル全体を読み取って、結果の文字列を返します。
構文
オブジェクト.ReadallReadAll…全体を取得
ReadLine…1行(改行手前まで)を取得
Split関数
Split関数
Split(文字列,区切り文字)
区切った文字列を一次元配列で返す。
ReadAllで一括取得したデータを、(Split関数で)改行で区切り、行を要素とした配列を作成。
(文字列の長さを取得するLen関数と)文字を取り出すLeft関数で、行の先頭と検索文字列が一致するかどうかを判定。
Constステートメント
・定数を宣言する。定義した値は変更できない。定数は(VBAでは)宣言時に初期化しなければならない。
メモ帳からエクセルへ貼付け時の文字化け解消
メモ帳の保存形式を「ANSI」にするのが手っ取り早い
その他・参考
リーダブルコード
などの本にも書いてありますが、一般的には処理を途中で抜けられる場合はその場で抜けた方がよいとされているため、大きなIf文よりもCONTINUEラベルを用意した方がよいと思われます。
たまに、「GoTo=スパゲッティコード」というイメージが強いのかGoToを嫌悪する方がいらっしゃいますが、それはおかしなGoToの使い方をするからおかしくなる話であって、GoToが悪いわけではありませんし、そもそもC言語などのbreakやcontinueもやっていることはルール化されたGoToです。
親身な指導で実力をつけるプログラミングスクール | CodeVillage