EXCEL VBA:文字列のコピー

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

EXCEL VBA:文字列のコピー

1. intputbox で入力したパスにある全ての txtファイル名を sheet1 C列に表示。 (現在 6ファイルでテスト。予定作業で100ファイル程度) 2. 配列を使って C列のファイル名のファイルを順番に読み込み sheet2 A列に行単位で読み込み。 →今ココ 3. sheet2 A列に表示されたファイルに hostname_abcde という行があり、abcde 部分だけを sheet1 A列にコピー。 ( _ は半角スペースに読み替えてください。hostname_を検索すればいいのですが、その後に 続く abcde がファイルによって文字数が異なりコピーする方法が分かりません) 4. 「3.」のコピー後に sheet2全セルをクリアして 動的配列の next文へ進み、要素2 のテキスト ファイルを sheet2 A列に読み込みまた、 hostname_abcde の abcde を sheet1 A列の次のセルに コピー。要素数分繰り返します。 実際に記述した内容は職場のPCでないと分からないので詳しく書けませんが、上記 3. と 4. の 方法をご教示頂きたくお願い致します。

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

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

  • EXCEL VBAで文字列の検索とコピー

    検索したい文字をinputboxで入力して、A列を検索して、検索文字を含むセルをコピーして、そのコピーしたデータを、別のシートに貼り付ける、次に該当したセルをさっきコピーしたデータの次の行に貼り付けて・・・。とデータが入力してある最終行までの繰り返し、をやりたいのですが、ご指導の程、説明が下手ですが宜しくお願いします!

  • エクセルで、非表示になっている列もコピー

    エクセルで、あるシートの一部の列が非表示になっています。 フィルターしている状態で行をコピーし、他のシートに貼り付けると、 非表示になっている列のセルが貼りつきません(可視セルのみコピーされます)。 いちいち、非表示列を再表示せずに、 すべての列を貼り付けるには、どうすればよいのでしょうか。 Excel2007

  • 文字列を検索しその列をコピーする(VBA)

    よろしくお願いします。 OS:WINDOWS 2000 PRO 環境:OFFICE 2003 エクセルのVBAについての質問です。 A列には数値コードが入っています。 そのコードは"1"と"2"に分類されてます。 マスターはSHEET1で、このマスターから コード1はSHEET2に、 コード2はSHEET3に 振り分けたいのですが、どうもうまくいきません・・・ A列にはコード"1" "2"以外に空白セルが存在します。 空白セルは無視したい。。。 それとこのデータはDBから抽出するのですが、 抽出したデータは規則性はありません。 抽出するごとに"1"と"2"と"空白"はランダムなので、 LOOP等のマクロを調べてやってみたのですが、出来なくて週末になってしまいました。 A列からコード1とコード2を検索して、 ヒットしたコードの行ごと各SHEETにコピーして、 なおかつ各シートA列の入力されていない一番下の セルにコピーしたいのですが、検索でヒットした 上から順番に。。。 これをLOOPと組合わせれば、各シートにコピーするのは 問題ないような気がします。。。 Sub AAA_BBB() .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End With End Sub LOOP等で上記の条件を満たせる方法はないでしょうか。 ご教示を、よろしくお願いします。

  • 【VBA】フォルダ内の複数Excelのセルをコピー

    お世話になります。 初級者ですが、Excel 2002のVBAについてご質問をさせて頂きます。 【概要】  あるフォルダ内にある複数のExcelファイルの、特定のセルを  1つのExcelファイルに集約します。 【詳細】  1.あるフォルダ内に複数のExcelファイルがあります。Excelファイルの数は、その日によって   ことなります。  2.選択画面から、この複数のExcelファイルを選択し、選択したExcelファイルの   それぞれの「A1セル」「B1セル」「C1セル」を、「1つのExcelファイル」に張り付けます。  3.「貼り付け」→「次の列へ移動」→「貼り付け」→「次の列へ移動」というサイクルを、   選択したExcelファイルの数だけ繰り返します。  4.集約したExcelファイルのイメージは以下のとおりです。        A列 B列 C列 D列 E列 F列 G列 H列  。。。。   1行目 A1 A1 A1 A1 A1 A1 A1 A1 。。。。   2行目 B1 B1 B1 B1 B1 B1 B1 B1 。。。。   3行目 C1 C1 C1 C1 C1 C1 C1 C1 。。。。 教えて!gooの回答で、「複数のシートを、1つのExcelファイルに集約する」ものがあったので、 それを参考にしようとしましたが、僕の実力ではできませんでした。 ご助言を頂けると非常に助かります。よろしくお願いします。

  • ExcelVBAで文字列編集後別シートのセルにコピーしたいのですが

    Excel2000を使用しています。作業中のブックのSheet1の後ろに別のファイルをコピーすることができました。そこから(コピーできたファイル)から文字列を編集してSheet1の特定のセルに貼り付けたいのですが、未熟者でできません。以下の操作をVBAマクロで実行したいのですが解る方教えてください。 (1)コピーしたファイルのA4セルにある文字列をMID(A4,6,10)で取り出しSheet1のB21セルに貼り付ける。(日付) (2)(1)が日付なのでそれから曜日を取得し、Sheet1のE21に表示する。 (3)コピーしたファイルのA5セルにある文字列をMID(A5,8,1)で取り出し(一桁の数字)1の時は福岡、2の時は佐賀、3の時は長崎、4の時は熊本、5の時は大分、6の時は宮崎、7の時は鹿児島、8の時は沖縄とSheet1のB24セルに表示する。 (4)コピーしたファイルのA6セルにある文字列をMID(A6,8,2)で取り出し(二桁までの数字)その後ろに"本"をつけてSheet1のB24セルに表示するB28に表示する。例)12本 (5)コピーしたファイルのA2セルにある文字列をMIDB(A2,20,6)で取り出し(時刻)Sheet1のE30セルに表示させる。 (6)コピーしたファイルのA12セルにある文字列をMID(A12,11,5)で取り出し(時刻)Sheet1のE34セルに表示させる。 (7)(6)の15分前の時刻をE36セルに表示させる。 よろしくお願いいたします。

  • VBA 同一文字のコピーについて

    B、C列に1つでも済と入っていれば、A列で同じ社名の行をコピーして別シートに貼り付けする。 というマクロを作りたいと思っています。  A  B   C 1 A社 済 2 A社 済 3 A社 4 B社 5 B社 6 C社 7 C社 8 C社    済 9 C社 10 D社 11 D社    済 この場合、1、2、8、11行目に済と入っているので、B社を除く、 1~3行目と、6~11行目をコピーしたいです。 A列で同一文字かどうか分かる方法がわかりませんでした… こういったマクロ出来るでしょうか?? よろしくお願いします

  • エクセル(2003)のコピーと貼り付けについて。

    エクセル(2003)のコピーと貼り付けについて、操作を自動化したいです。 VBA初心者です。 同じフォルダ内にAファイルとBファイルがあります。 Aファイルにはシート1からシート4まで有り、シート1とシート2にシート3と4を比較したデータを表示させています。 シート1とシート2はA1からG1まで項目として、A2からデータが表示されます。約20行程度、表示される行数は毎日変わります。 Bファイルにはシート1しかありません。A1からG1まで項目とし、A2からデータが表示されています。約100行。毎日変わります。 (Aファイルのシート1とシート2の表示されているデータを貼り付けていく為) Aファイルのシート1に表示されているデータ(A2から)を仮に20行としBファイルの101行目(入力されているデータのすぐしたの行)に貼り付け、Aファイルのシート2に表示されているデータ(A2から)を仮に20行とし、120行目に貼り付け。 毎日コピーする範囲や貼り付けをするセルが変わっていく、固定の範囲、セルではない。この作業を毎日、コピー貼り付けで操作しています。 この操作をラクにしたいです。 困っていることは、コピーする範囲が毎日変わってしまう。(行数が増減するため) 貼り付けるセルも変わってしまう、(行数が増減するため) 分かりずらい説明になっていましたら、申し訳ないです。 よろしくお願いします。

  • VBA 条件が一致した場合のみコピーする

    VBAについて、現在勉強中な為、色々調べておりますが、詳しい方がおりましたら教えてください。 在庫管理の表をエクセルでやっております。 注文が来て、品物の手配をする時に、在庫の有無を確認したいので下記のような事が出来れば 良いと思っております。 3つのシートを使っております。シート名は、”必要数””出荷数””在庫数” シート:”在庫数”では、入荷数の合計から、マクロを使ってコピーした”出荷数”の数を 差し引くことにより、発注手配が必要な物とそうでない物がわかりやすいように作りたいと思って おります。 今回は、注文来た数を出荷数のシートにVBAでコピーさせる方法の質問です。 シート名:”必要数” のセルC2:C:50 を、コピーして、隣のシート”出荷数”のA列の 一番上の空白に、形式を選択して貼り付け(値・行列を入れ替える) ただし、A列には、日付が入力されてる為、参照した空白の一つ上のセルがコピー元と同じ 日付なら、貼り付けをしないでエラー表示させたい。 自動マクロでは、コピー元を選択して、ここに貼り付けみたいな事はできたのですが 3行目に貼り付けした後は、4行目に貼り付けるという自動マクロがわかりません。 ネットで調べたコードを何個もコピペしてやってみたのですが、なかなかうまく行きません。 詳しい方がおりましたら、コードを教えて頂けると助かります。 どうぞ、宜しくお願い致します。

  • VBAで列から数字を判別するには?

    現在プログラムを作成しています。内容はシート1の各列に内容をいれて実行ボタンを押すとシート2のある行にコピーされるというものです。そのシート2にコピーされる場所というのが、A列に数字がランダムにふってありまして、 シート1のA1セルにたとえば『12』と打って、実行ボタンをおしたら、シート2のA列の中から『12』となっているセルを判別してその行に各項目をコピーしたいのです。 なので 今ほどいったようにシート1に『数字』をうって、シート2のA列中から判別するプログラムはどのようにすればいいのでしょうか? 本当に困っています。 おしえてください。おねがいします。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

専門家に質問してみよう