プロが教える店舗&オフィスのセキュリティ対策術

下記のような記述だと1つ目のセルからは文字列を取得できても
2つ目以降のセルからは文字列を取得することができません。
どうすれば2つ目以降のセルから文字列を取得することができるのでしょうか?
※「<」と「>」で挟まれている間の文字列を取得したいです。
※「<」と「>」が何組あるかは不明です。
※ A列に記載しますが、何行あるかは不明です。
また、A列から抽出した文字列を行ごとに転記したいと考えています。

【↓VBA処理結果例】
   列A              列B  列C   列D ・・・
行1 今日の<天気>は<晴れ>です。      天気   晴れ
行2 明日の天気は<曇り>です。        曇り
行3 <土曜日>は<暑くなる>でしょう。    土曜日  暑くなる




Dim str0, str1() As Variant
Dim 指定1, 指定2 As Variant
Dim stidx, h, i, j As Integer

str0 = Range("A1")
指定1 = "<"
指定2 = ">"
stidx = 0
h = 1
i = 1
j = 3

ReDim str1(Int(Len(str0) / 2)) As Variant

Do Until InStr(h, str0, 指定1) = 0
  stidx = stidx + 1
  i = InStr(h, str0, 指定1)
  h = InStr(h + 1, str0, 指定2)
  str1(stidx) = Mid(str0, i + 1, h - i - 1)
  Cells(3, j).Value = str1(stidx)
  j = j + 1
Loop


使用OS:Windows 8
使用ソフト:Microsoft Excel 2007

ご存知の方がおられましたらご回答をよろしくお願いいたします。

質問者からの補足コメント

  • ①、②、③になる事は絶対にありません。

    よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/09/21 14:24
  • B列は空欄で、C列以降に順次書き込みたいです。

    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/09/21 14:52

A 回答 (3件)

こんな感じでは?



Sub test()
Const 開始文字 As String = "<"
Const 終了文字 As String = ">"
Dim 行 As Long
Dim 位置 As Long
Dim 文字列 As String
Dim 列 As Long
Dim 対象 As Boolean
For 行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Len(Cells(行, 1).Value) <> 0 Then
列 = 3
対象 = False
For 位置 = 1 To Len(Cells(行, 1).Value)
If Mid(Cells(行, 1).Value, 位置, 1) = 終了文字 Then
対象 = False
Cells(行, 列).Value = 文字列
列 = 列 + 1
End If
If 対象 Then
文字列 = 文字列 & Mid(Cells(行, 1).Value, 位置, 1)
End If
If Mid(Cells(行, 1).Value, 位置, 1) = 開始文字 Then
対象 = True
文字列 = ""
End If
Next
End If
Next
End Sub
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございました。
GooUserラック様のおかげで、解決することが出来ました!
私の勉強不足の為にお時間をおかけし、申し訳ございませんでした。
教えていただいた内容を基に今後とも精進して参ります。

本当にありがとうございました。

お礼日時:2017/09/21 16:05

テキストなので、列の関係がよく判らないのですが、抽出した物はB列以降に順次書き込むでよろしいですか?(見た目ではC列からのように見

えるので確認です)
この回答への補足あり
    • good
    • 0

次のような事は絶対にないと言う事で良いのでしょうか?


①「今日の<天気>は<晴れです。」
②「今日の<天気<は>晴れ>です。」
③「今日の天気>は<晴れ>です。」
この回答への補足あり
    • good
    • 0

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