- ベストアンサー
EXCEL VBA:文字列のコピー
- Excel VBAを使用して、指定のパスにあるすべてのtxtファイル名を表示する方法について教えてください。
- 配列を使用して、txtファイルを順番に読み込んで特定の行をコピーする方法を教えてください。
- 特定の文字列を検索して、一部を切り出して他のセルにコピーする方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
最初のend行を検知したら,そのファイルは終了していいのですか。 と思いましたが,こっちの方が効率が良いかも?しれません。 sub macro1r2() dim myPath as string dim myFile as string dim buf as string dim n as long mypath = inputbox("path") if mypath = "" then exit sub myfile = dir(mypath & "\*.txt") do until myfile = "" open mypath & "\" & myfile for input as #1 do until eof(1) line input #1, buf ’end行で抜けるアイデアは不採用にして ’if buf like "end*" then exit do 'もしくはif buf = "end" then … if buf like "hostname*" then n = n + 1 worksheets("Sheet1").cells(n, "B") = replace(buf, "hostname ","") worksheets("Sheet1").cells(n, "A") = myfile ’目的のhostname行を最初に拾ったらそこで即終了 exit do end if loop close #1 myfile = dir() loop end sub
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
adobeじゃなくてabcdって書いてあったんですね。 sub macro1r1() dim myPath as string dim myFile as string dim buf as string dim n as long mypath = inputbox("path") if mypath = "" then exit sub myfile = dir(mypath & "\*.txt") do until myfile = "" open mypath & "\" & myfile for input as #1 do until eof(1) line input #1, buf if buf like "hostname*" then n = n + 1 worksheets("Sheet1").cells(n, "A") = replace(buf, "hostname ","") end if loop close #1 myfile = dir() loop end sub
お礼
ありがとうございます。FSOを使うより簡素で大変参考に なりました。 m = m + 1 worksheets("Sheet1").cells(n, "C") = myfile で ファイル名の取得もできました。 BAにしてクローズさせて頂こうと思ったのですが、もう1点 質問させてください。(会社でネット検索しまくりましたが 結局分かりませんでしたので。。。) 下記は対象の txt ファイルの構成です。 ------ show run : hostname abcde : : end # show start : hostname abcde : : end # show version : (以下略) ------ Ciscoのコマンド show run と show start はほぼ同じ内容です。 業務上、この 2つのコマンドをたたくのは必須でして、結果、 教えて頂いた VBA を実行すると hostnameの abcde が 重複して 2行に貼り付けされます。 最初に来る show run の abcde のみがほしいので、buf の内容を 一旦 Sheet2に貼り付けて、コマンド結果最終行の end を検索して 以降を削除し、Sheet2の内容を 変数 buf2 に格納して worksheets("Sheet1").cells(n, "A") = buf2 をしようとしましたが、end 以降の行削除の方法が分からず できませんでした。 お手数おかけして申し訳ないのですが、よろしくお願い致します。
- keithin
- ベストアンサー率66% (5278/7941)
てきとーに応用してください。 sub macro1() dim myPath as string dim myFile as string dim buf as string dim n as long mypath = inputbox("path") if mypath = "" then exit sub myfile = dir(mypath & "\*.txt") do until myfile = "" open mypath & "\" & myfile for input as #1 do until eof(1) line input #1, buf if buf like "* adobe" then n = n + 1 worksheets("Sheet1").cells(n, "A") = buf end if loop close #1 myfile = dir() loop end sub イミフメイ箇所: その1>hostname_abcde という行があり、 その2>abcde 部分だけをsheet1 A列にコピー。 その3>その後に続く abcde がファイルによって文字数が異なり
お礼
ありがとうございます。 自宅のEXCEL2003で検証して確認しました。 迅速かつ丁寧に対応して頂きまして誠に感謝しております。 「できる大事典 Excel VBA」を 3日読んで試行錯誤しておりましたが、 網羅的な良書を探して勉強します。