• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL VBA:文字列のコピー)

EXCEL VBA:文字列のコピー

このQ&Aのポイント
  • Excel VBAを使用して、指定のパスにあるすべてのtxtファイル名を表示する方法について教えてください。
  • 配列を使用して、txtファイルを順番に読み込んで特定の行をコピーする方法を教えてください。
  • 特定の文字列を検索して、一部を切り出して他のセルにコピーする方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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

ra11242010
質問者

お礼

ありがとうございます。 自宅のEXCEL2003で検証して確認しました。 迅速かつ丁寧に対応して頂きまして誠に感謝しております。 「できる大事典 Excel VBA」を 3日読んで試行錯誤しておりましたが、 網羅的な良書を探して勉強します。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

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

ra11242010
質問者

お礼

ありがとうございます。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)
回答No.1

てきとーに応用してください。 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 がファイルによって文字数が異なり

関連するQ&A