プロが教えるわが家の防犯対策術!

要素の数が不定(決まっていない)なレコードから構成されるファイルを読みます。
そして1件目のレコードを取り出したいのです。

レコードは以下のような構成です。
頭に8桁の日付(20140602のような)が在り、各要素は英数字で全角半角ナンでも入っています。
ただ、要素は"<>"で区切られています。

例えば、
20140602<>552<>東京都あきる野市<>20140601<>電話03-442-8787<>87-3524<>19900401<>,,,,,,,,
と続きます。

条件としては、
レコードの頭に8桁の日付が在りますが、要素の中には連続する8桁の数字は存在しません。
日付はまちまちですが、1900年以前はありませんので、「19000000<」と聞くことは可能です。

このファイルから1件目、
例で言えば、「20140602<>552<>東京都あきる野市<>」を取り出したいのです。


質問です。
instrで2件目の頭を見つけ、全体の長さからその位置を引いてやれば取り出せるかなと思いました。
instr(2,wka,8桁の数字)のように。

この「8桁の数字」をどう作る(指定する)かが分かりませんので、質問しています。
そのような表現は出来ないモノでしょうか。

もっといい方法が在ればそれに越したことはありません。
宜しくお教え下さい。

A 回答 (2件)

こんなのはどうでしょう。


1件目のレコードは要素3つで構成されていると決まっているなら、"<>"を区切り文字としてSplit関数で分割し、先頭の3つを合体させる。

要素数が決まっていないなら、やっぱりSplitで分割して8桁の数字が2回目に出てくるまでの要素を合体。

Sub Sample()
  sStr = Split(Range("A1"), "<>")
  
  '要素が三つと決まっている場合
  sSample1 = sStr(0) & "<>" & sStr(1) & "<>" & sStr(2) & "<>"
  
  '要素数が決まっていない場合
  Sample2 = sStr(0) & "<>"
  For i = 1 To UBound(sStr)
    If IsNumeric(sStr(i)) And Len(sStr(i)) = 8 Then Exit For
    Sample2 = Sample2 & sStr(i) & "<>"
  Next i
End Sub
    • good
    • 0
この回答へのお礼

早速有り難うございました。
やはり、ズバリはないみたいですね。
正規表現を調べましたが、ちょっとそぐわない感じです。

ヒントを頂いたので、
やはり、instrでloopさせました。

お礼日時:2014/06/03 17:08

<>の後の8桁の数字の部分で改行したいという意味なら、以下のようなWordを使ったワイルドカード置換で簡単に文章を整形できます。



テキスト文書をワードに貼り付け、Ctrl+Hで置換ダイアログを出して、「オプション」ボタンをクリックして、検索する文字列の欄に「\<\>([0-9]{8})」置換後の文字列に「^13\1」と入力して「すべて置換」してください。
    • good
    • 0
この回答へのお礼

わざわざ有り難うございました。
やりたいことは質問のとおりで、ちょっと方向が違います。
お世話になりました。

お礼日時:2014/06/03 17:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!