Excel VBA マクロで文字列の分割方法

このQ&Aのポイント
  • Excel VBAを使用して、テキストファイルの文字列を特定の項目ごとに分割する方法について教えてください。
  • 例えば、4000バイトの文字列が並んでいるテキストファイルがあり、そのレイアウト情報がある場合、その文字列を項目ごとに分割してエクセルに貼り付けたいです。
  • 交換ID、交換先名、電話番号などの項目ごとにセルに分けたいです。どのようなマクロを使用すれば良いでしょうか?
回答を見る
  • ベストアンサー

【Excel VBA マクロ】 文字列の(開始位置、文字数での)分割に

【Excel VBA マクロ】 文字列の(開始位置、文字数での)分割について Excel vba をはじめて1ヵ月程度の初心者ですが、質問させて下さい。 例えば、4000バイトの文字が並んでいるテキストファイルがあったとして、 そのレイアウト(項目名、開始位置、長さ)があったとします。 例) 【テキストファイル】 000001交換先1□□□□□□□□□□□□□□□□0612345678・・・(以下続く) 000002交換先2□□□□□□□□□□□□□□□□0312345678・・・(以下続く) ・ (以下、複数レコードが存在) ・ 【レイアウト】 交換ID,1,6 交換先名,7,20 電話番号,28,10 ・ ・ ・ これをエクセルのセルに項目ごとに分割して、 以下のように貼り付けるようなマクロを組みたいのですが、 良い方法はありますでしょうか。 【作成したい物】 ------------------------------------------- |交換ID  |交換先名 |電話番号   |・・・ ------------------------------------------- |000001   |交換先1 |0612345678 |・・・ ------------------------------------------- |000002   |交換先2 |0312345678 |・・・ ------------------------------------------- どなたか御教授宜しくお願い致します。

  • t_red
  • お礼率70% (12/17)

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

固定長フィールドのテキストデータの読込みですね。 まずはExcelの基本機能を利用してみてください。 2003の場合、[データ]-[外部データの取り込み]-[データの取り込み]... 2007の場合、[データ]-[外部データの取り込み]-[テキストファイル]... ここから[テキストファイルウィザード]が開きます。 この時「元のデータの形式」で「スペースによって右または左に揃えられた固定長フィールドのデータ」を選択してすすめます。 この一連の作業を[マクロ記録]すると、QueryTablesオブジェクトを用いた参考コードが得られます。

t_red
質問者

お礼

ご回答ありがとうございました。 お返事が遅くなって申し訳ありません。 大変参考になりました^^

その他の回答 (1)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

すぐに役立つエクセルVBAマクロ集 というサイトのブックシート、テキストファイルを行単位で読み込む、というサンプルあります。 MID関数で何文字めからn文字という指定ができます。 EXCELでお仕事 というサイトのVBAの基本、初心者のよくある疑問間違いや誤解、を読んでおくことをオススメします。 回答コードをズバリもらう、コピー貼付けで解決、は考えることしないやり方になってしまうので、上達遅いです。ヒントだけにしておきます。

t_red
質問者

お礼

ご回答ありがとうございました。 お返事が遅くなって申し訳ありません。 これは参考になるサイトですね! とても勉強になりました^^

関連するQ&A

  • 【VBA】該当する文字列がある列を削除したい。

    指定した文字列を検索して、そのセルのある列削除したいです。 例えば2行目に、表の項目として「社名、フリガナ、住所、電話番号、備考、・・・」 と、あるときに、フリガナと電話番号の列を削除させたいのです。 シートによって項目の位置が若干変わる為、列番号を指定して削除するようなことは出来ません。 項目の名前が変わることはありません。 vbaでどのようにすればよいのでしょうか。 また、2行目の範囲で文字列を検索して、該当する文字列があるセルの位置情報を 取得したい場合はどうすれば良いでしょうか? 宜しくお願いします。

  • VBA(Excel)でファイル内の文字を置換したいのですが

    いつも拝見させていただいております。 初めて質問させていただきます。 現在VBAに興味を持ち始めて独学で学んでおり、 VBAでテキストファイルの文字を置換できないかと思っております。 事例としては以下のような例を考えています。 ・エクセルマクロ実行時に置換する/したい文字を入力 ・対象ファイルを指定 ・対象ファイル内(テキスト)にて文字を検索し、ヒットしたら置換 まだVBAを熟知していないので、出来るのかどうかもわかりませんが 可能であれば、教えて頂きたいと思います。宜しくお願いします

  • Flash 一字づつ増やす。開始文字位置固定で。

    1番目の文字のフレームをコピーして、次にペーストして、 そのペースト先でテキスト文字を追加して行ってます。 が、確認すると1番目の文字位置が固定されないで増えて行きます。 文字全長の中心位置が、1番目の文字位置になるんです。。。 開始位置固定で、その位置から文字を増やしていくにはどうすれば良いのでしょうか。 よろしくご教授ください!!

  • マクロ(VBA)で検索した文字

    また面倒お掛けします マクロ(VBA)で検索した文字は文字として認識しないのでしょうか? 知識がないので一つ一つのマクロを作っていますが、検索した文字から次の展開が出来ないで困っています。検索した文字(加藤)を値でコピーして次に展開すると文字として認識していないのか展開出来ません、そのセルに加藤を新たに入力すると展開されます。 セルの中で文字の位置がずれているように見えます( 加藤)こんな感じです位置修正しても標準の位置にはならない、標準ですと(加藤)と表示されると思うのですが。 文章で解りますでしょうか 宜しくお願いいたします

  • VBAで扱う文字列に関する質問

    いつもお世話になっております。 VBAで、既存のテーブルに新規にデータを追加するマクロを作成しました。 追加する項目は全て文字列なのですが、何度かこの追加作業をやっていたら 左肩に、緑色の三角マークが付くものと付かないものが出てきました。 三角マークにマウスを合わせると 『このセルにある数値はテキスト形式化または・・・・』という 表示がでます。 できれば、追加する全ての文字列を、この三角マークが付かないように したいので、やり方を教えてください。宜しくお願い致します。

  • 複雑な/による文字列の分割について

    $str = "hello/$(hoge/$(hoge/good)/id)/namae"; このような文字列を/で以下のように分割して配列に入れようと考えています。 Array ( [0] => hello [1] => $(hoge/$(hoge/good)/id) [2] => namae ) しかし単にsplitで分割してもこのようにならないので正規表現でやりたいんですがどのようにしたらこのように分割できるでしょうか??

    • ベストアンサー
    • PHP
  • Excel VBA 文字列分割の方法で

    EXCEL および WORD のVBAです。 2003 および 2010でやっています。 たとえば文字列で以下のようなものがあったとき、 12,6,"abcde","(3,4)","efg""h""ijk",3 このとき、文字列をカンマ(,)で分割して   12   6   "abcde"   "(3,4)"   "efg""h""ijk"   (あるいは efg"h"ijk)   3 のようにして抽出したいのですが、どのような方法があるでしょうか。 たとえば、      mid(文字列,i,1) のようにiの値を文字列の長さ分ループさせて、1文字ずつ自力で 文字列の範囲や""などを解釈して分割するしかないのでしょうか。 それともスマートな方法があるのでしょうか。 どなたか、よろしくご教授ください。

  • Excel マクロ VBA セル内で改行された文字列の分割

    はじめまして。 ExcelのVBA初心者で、ちょっと困っています。 (例) (1) セルA1に以下のような改行された文字列が入力されています。 【セルA1】 a aa aaa b bb bbb (2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。 【セルA2】 a aa aaa 【セルA3】 b bb bbb ※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。 そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。 Sub 分割() Dim A, B, C A = Split(Range("A1"), Chr(10)) B = 0 For Each C In A B = B + 1 Range("A2").Offset(B - 1, 0).Value = C Next End Sub ご教授いただけると助かります。 よろしくお願い致します。

  • Excel2008のVBAで

    初めまして。 Excel2008のVBAで以下のことが実現可能でしょうか? 要件:エクセルのシート上で画像を自由に配置させる。 用途:部屋のレイアウトを考えるときに椅子や机を予め画像に取っておき、それを自由に配置して大まかなレイアウトを考えるための物 現状:VBAにてコンボボックス(机や椅子の備品一覧)から備品を選択して該当する画像をシートに張り付ける所まではなんとかなりました。 問題点: シート上に配置した備品の画像をマウスでクリックしたときに備品の諸元をシート上あるエリアに表示する事可能でしょうか? 例えば椅子の画像をクリックしたときに椅子のメーカーやサイズをシート上(フォームでも可)に表示したいと言う事です。 配置した画像のプロパティを見てもイベント処理が無いみたいで、右ボタンのマクロを登録すると画像をクリックすると常にマクロが実行される ので画像のサイズや表示位置を変更することができなくなります。 また、仮にマクロを画像毎に登録するとなると配置する画像の数が不定なので予めマクロをコーディングしておくことが不可能? 等が考えられ、果たしてExcel2008VBAで実現出来るのかと思い、何かヒントでもいただければと思い投稿させて頂きます。

  • エクセルVBA、列のコピーについて

    VBAについて助けてほしいことがございます! VBA初心者なので、ひょっとしたらレベルの低い質問かもしれず申し訳ないのですが、VBAに詳しい方がいらっしゃれば教えて欲しいことがあります。 下記の前提を含めた作業内容をVBAのコードとしてまとめる事は出来るのでしょうか? 1列目(A1,B1,C1,D1…)にキー項目(名前、番号、地域、住所、ID…)、2列目以降にキー項目のデータが入力されています。 【作業内容】 「ID」の項目の列には、「番号」の列の文字をコピーして貼りつける(キー項目は上書きせずにIDのまま)。 【前提】 ・キー項目の列は固定されていない(B列が番号の時もあれば、住所の時もある)ので、文字を基準にコピー作業をする ・「キー項目が空欄にぶつかったら、検索を終了」という事をループに入れる(キー項目数は変動するため) ・2列目以降の全てのデータをに張り付ける」という事をコードに入れる(2列目以降のデータの列数も変動する且つ途中に空欄も含むため)