• ベストアンサー

.xlsxのセルに.txtの文字wコピーするVBA

テキストファイルの テキスト.txtにおいて 文字列が <a>A<b>B という文字列があるとしまして エクセルマクロを使って エクセルファイルのM.xlsxを作成して そのエクセルファイルのA1セルに テキスト.txtの 文字Aをコピーし また同様に M.xlsxのエクセルファイルのB1セルにテキスト.txtの 文字Bをコピーする そういう操作をするVBAコードを 御教示いただけますでしょうか よろしくお願い致します win10 office365

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

文字A、文字Bは、複数文字の文字列ですか? 更に、改行文字が含まれますか? <a>、<b>は、本当は別な文字列ですか? 更に文字数は変動しますか? テキスト.txt の文字コードはUTF-8ですか? これらを前提にコードを書いてみました。 よかったら試してください。 なお、 >M.xlsxを作成して この作成先は、マクロ格納ブックと同じフォルダーとしました。 更に、 >テキストファイルの テキスト.txt このファイルのフルパスは、 ソースコードにハードコーディングしました。 Option Explicit Sub Sample()    Const MyFile = "D:\TestDir\テキスト.txt"  Const Key1 = "<a>"  Const Key2 = "<b>"  Const PutBokName = "M.xlsx"  Dim buf As String  Dim Len1 As Long  Dim Len2 As Long  Dim Pos1 As Long  Dim Pos2 As Long  Dim PutBook As Workbook    With CreateObject("ADODB.Stream")   .Charset = "UTF-8"   .Open   .LoadFromFile MyFile   buf = .ReadText   .Close  End With  Len1 = Len(Key1)  Len2 = Len(Key2)  Pos1 = InStr(buf, Key1)  Pos2 = InStr(buf, Key2)    If Len1 = 0 Then   MsgBox Key1 & " が見つかりません"   Exit Sub  End If  If Len2 = 0 Then   MsgBox Key2 & " が見つかりません"   Exit Sub  End If    Set PutBook = Workbooks.Add  With PutBook.Sheets(1)   .Cells(1, 1).Value = Mid(buf, Pos1 + Len1, Pos2 - (Pos1 + Len1))   .Cells(1, 2).Value = Right(buf, Len(buf) - (Pos2 + Len2 - 1))  End With  PutBook.SaveAs ThisWorkbook.Path & "\" & PutBokName  PutBook.Close End Sub

その他の回答 (2)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

テキストファイル(CSV)の情報をエクセルファイルに取り込むには 次の二つが思いつきますが、取込先のセルの指定が大変なので、 これはあきらめましょう このセル位置が無いと、情報はセルA1から順に取り込まれます 新規にSheetを用意し、これに取り込んだSheetより式で成形します 1.コピペ(見出し行を含める) 2.テキスファイルをインポートする  《データリボン》《テキスCSVから》《ルート》《テキストファイル名》と進みます。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

テキストファイルはアクセスやエクセルファイルのようにセルやフィールドなどで指定できないので質問の例の状態 テキスト.txtが <a>A<b>B と確定して Sub Test() Dim buf As String Dim NewBook As Workbook Set NewBook = Workbooks.Add NewBook.SaveAs ThisWorkbook.Path & "\M.xlsx" With NewBook.Sheets("Sheet1") Open "C:\Ok\テキスト.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf If InStr(buf, "<a>") > 0 Then .Range("A1").Value = Mid(buf, InStr(buf, "<a>") + 3, 1) End If If InStr(buf, "<b>") > 0 Then .Range("B1").Value = Mid(buf, InStr(buf, "<b>") + 3, 1) End If Loop Close #1 End With Set NewBook = Nothing End Sub

関連するQ&A

  • Excel で特定の文字を取り出してその文字だけをコピーする方法

    VBAや関数に詳しくないので、というよりもExcelにあまり詳しくないので、とりあえずこうすればできるという方法を具体的に教えていただければと思います。 やりたいことは2つあります。内容はそれぞれこんな感じです。 (1) セルA1に”・・・・・・・○”  (・は任意の文字とします。)   セルA2に”・・・・・・・×”  (抽出したい文字は最後に来ます。) とあったとしたら セルB1に”○” セルB2に”×” というふうに特定の文字をコピーする。 それらの文字が含まれていなかったり、あってもそれが最後でなければ何もしません。 (2) (1)で作ったシートを他のシートにコピーしたとして、そのシートには列2に特定の文字○、×などが入っています(空欄の場合もあります。)。この中から列2の内容が×の行を削除します。 Officeについては詳しくありませんが C、C++やJavaなどは使っていたのでスクリプトについては読んでいるうちに慣れると思うのですが、肝心のExcelを使いこなしていないのでこれをマクロで保存した方がいいのか関数にしたほうがいいのかということもはっきりしていないレベルですのでその辺も交えて教えていただけるとありがたいです。 本来であれば自分である程度の勉強をしなければいけないのはわかっているのですが、急ぎということでよろしくお願いします。

  • カンマで区切られた二つの数値を分けてセルにコピー

    XPのOffice2003のエクセルです。ある二つの数値が文字列として一つのセルに例えば「375, 934」という風に、半角カンマと空白で区切られて入っています。これを二つのセルに数字「375」「934」と分けてコピーしたいのです。 ワークシートのセルで数式処理、あるいはVBAマクロのどちらかで、できる方法を教えていただけないでしょうか。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • VBAで保護セルのコピー

    セルA17:Q27の範囲にデータがあります。 この中の1部のセルは保護されており編集できません。 これを1セットし下にコピーしていきたいです。 最初はA28:Q38 次はA39:A49・・・ 11行ずつとなります。 VBAでやるとどのように書けばいいのでしょうか? SpecialCellsで最終行を取得していく方法もありますが ほかにうまい方法はありますか? マクロを使わずExcelでコピー&貼り付けではコピー先の 保護部分が無効になってしまうためVBAでやろうと思っています。 -------------- もう1つ手間をかけますがB列には平日の日が入ります。 その月のdayから曜日を取得できるのは知っていますが 祝日なども除いた日を入れていくことができるでしょうか? 5月で言うと3,4,5日はコピーしません

  • 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セルに表示させる。 よろしくお願いいたします。

  • エクセルのマクロで特定の文字があるときだけコピーできるようにしたい

    エクセルのマクロで特定の文字があるときだけコピーできるようにしたい エクセルでこういう表があるとします ココカラ 1 * 2 b 15 3 * 4 d 19 5 e 25 6 * 7 g 35 8 * 9 j 46 10 k 54 ココマデ このような表があるとき、マクロを使ってもしB列に「*」以外の文字(この場合アルファベットのb) があるときは左のセル(2)をずっと下のセルにコピー(仮にA50とします)した後、右のセル(15)をB51にコピー、 次は文字が「*」なのでコピーはせずにd列になったら4と19をC50,D51にコピー・・・ という作業をセルに「ココマデ」と書いているところまで繰り返す、というマクロを作りたいのですが、どうすれば いいのでしょうか?

  • エクセルのマクロで入力文字を一文字ずつ並んだセルに入れる

    エクセルマクロ超初心者です。 エクセルVBAでユーザーフォームを作成しました。 テキストボックスに入力した文字列を「登録」ボタン押下後、エクセルシートのセルに一文字づつ入るようにするにはどうすれば良いでしょうか? 例えばテキストボックスに「kohiro」と入力するとエクセルのsheet1のA1「k」、B1「o」、C1「h」、D1「i」、E1「r」、F1「o」となるようにしたいのです。入力する文字数は0~30文字までで、その都度長さは変わります。どうやって、文字をばらせばいいのか、またどうやって可変長の文字列を指定したセルに入力すればいいのかわかりません。どうかよろしくお願いいたします。

  • エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数は?

    エクセルであるセルの文字が他のセル内で1文字でも存在するかを知る関数はありますか? たとえばA列の値に存在する文字がB列に1文字でもあるかを チェックすることができるのでしょうか。 A列    |   B列    |   C列 -------+----------+---------- ABCD  |  XYZB   |  ○ --> Bがある XY    |  ABSCE  |  X --> XもYもない HD     |  XUDM  |  ○ --> Dがある マクロ(VBA)でなく関数で表したいのですが このような関数はありますか? 関数のヘルプを調べたのですが、出来そうで出来ません。 どうぞよろしくお願いします。

  • VBA 文字が入力されているセルを表示させたい

    ExcelのVBAで 列番号"A列"に文字を適当に打った時 文字が入っている最終セル(行番号)と その最終セルに入っている文字を "C1"のセルに表示させる というVBAを作成したいのですガ… どなたかわかる方教えて下さい 自分が考えたものはVBAが妙に長くなってしまい; Excelのバージョンが2000と古いので 古いのでも動くVBAだと助かります; 宜しくお願いします

  • Excel文字列の連結について教えてください(VBA)

    Excelの文字列の結合について教えてください。 色々調べたのですが、VBA自体がよくわからず困っています。 やりたい事は、(Excel表をご参考) 『セルA1とB1とA2の文字を固定で、セルA3以降の文字以降を  順次連結してcsvに書き出すVBAを作成したい。』 どうしても繰り返す連結マクロがわかりません。 ExcelVBAに詳しい方、教えてください。 よろしくお願いします。 結果例) 20080501A01 20080501A02 20080501B01 20080501C01   ・   ・(300件以上続きます) <Excel表>    A列  B列 1  2008  05 2  01    3  A01 4  A02 5  B01 6  C01 7  ・ 8  ・

専門家に質問してみよう