Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7148 / 13644 ツリー ←次へ | 前へ→

【40876】特定文字列後の文字列を取得 kei 06/7/25(火) 17:20 質問[未読]
【40880】Re:特定文字列後の文字列を取得 Jaka 06/7/25(火) 17:38 発言[未読]
【40886】Re:特定文字列後の文字列を取得 kei 06/7/25(火) 18:17 お礼[未読]
【40913】Re:特定文字列後の文字列を取得 Jaka 06/7/26(水) 9:12 発言[未読]
【40884】Re:特定文字列後の文字列を取得 Kein 06/7/25(火) 18:07 回答[未読]
【40888】Re:特定文字列後の文字列を取得 kei 06/7/25(火) 18:19 お礼[未読]

【40876】特定文字列後の文字列を取得
質問  kei  - 06/7/25(火) 17:20 -

引用なし
パスワード
   はじめて質問します。
いつも同僚がこちらで質問しているので、その同僚に聞いていたのですが、私はVBA初心者のため要領を得ない質問になってしまうかもしれませんがよろしくお願いします。

一つのセルに文字列が入っています。
その文字列の中には特定の文字列が複数含まれていて、その文字列の直後の文字列を取得したいと思っています。
取得する文字列の長さはその時々で変わってきます。

具体的な例を挙げると、
a あいうえお
a かきくけこ
といった文字列が入っています。「あいうえお」の直後はvblfが入って改行されています。

aの直後の半角スペースを除いて、vblfまでの間の文字列を取得したいと思っています。
また、一つのセルの文字列の最後はvblfが入っていません。

文字列の中にaがいくつ入っているかは関数を作成して調べることはできるようになりました。
できれば、配列(1 to a)として、
配列(1)="あいうえお"
配列(2)="かきくけこ"
といったものができるとうれしいです。

アドバイスをいただけたら幸いです。よろしくお願いします。

【40880】Re:特定文字列後の文字列を取得
発言  Jaka  - 06/7/25(火) 17:38 -

引用なし
パスワード
   もう帰るので手法だけですが、SplitでVblfを基準に配列に分ける。
Replaceで、「a 」をループして消すとか....。
(スペル間違っているかも)

【40884】Re:特定文字列後の文字列を取得
回答  Kein  - 06/7/25(火) 18:07 -

引用なし
パスワード
   >特定の文字列
は、"a" ということで、その直後に必ず半角スペースがあるものとします。
>一つのセルに文字列
このセルを、仮にアクティブシートの A1 とします。
目的とする配列は、Ary2 として作成されます。それを使った実際の処理は
Debug.Print 〜 の部分と
With Application.VBE.MainWindow

SendKeys "^(g)"
の部分を削除して書いて下さい。
↓のコードは、あくまで検証用ですから、イミディエイトウィンドウに
結果を出力して、直ぐ見られるように書いているためです。
あと、マクロの終了直前(End Sub の前)には、
Erase Ary1, Ary2
と、配列変数を初期化しておくのが望ましいです。

Sub MyAry()
  Dim Ary1 As Variant
  Dim Ary2() As String
  Dim Ck As Integer, i As Integer
 
  Ary1 = Split(Cells(1, 1).Value, vbLf)
  For i = LBound(Ary1) To UBound(Ary1)
   Ck = InStr(1, Ary1(i), "a")
   If Ck > 0 then
     ReDim Preserve Ary2(i)
     Ary2(i) = Right$(Ary1(i), Len(Ary1(i)) - (Ck + 1))
     Debug.Print "要素 " & i & " は " & _
     Ary2(i) & " 文字数は " & Len(Ary2(i))
   End If
  Next i
  With Application.VBE.MainWindow
   .Visible = True
   .SetFocus
  End With
  SendKeys "^(g)"
End Sub

【40886】Re:特定文字列後の文字列を取得
お礼  kei  - 06/7/25(火) 18:17 -

引用なし
パスワード
   Jakaさんありがとうございます。

Splitは使ったことないですが、今てきとうにデータを作成して試してみました。
特定文字列をReplaceで消して、Trimでスペースを消せばできるかという考えがまとまりました。

なんとかこれで作れそうです。ありがとうございました。

【40888】Re:特定文字列後の文字列を取得
お礼  kei  - 06/7/25(火) 18:19 -

引用なし
パスワード
   Keinさんありがとうございます。

Splitで分けるという考えはJakaさんにも教えていただきましたが、非常に参考になります。
コードまで教えていただき本当に感謝します。

Rightで文字列を取得するという考えは及びませんでした。

ありがとうございました。
また質問をする機械がありましたらよろしくお願いします。

【40913】Re:特定文字列後の文字列を取得
発言  Jaka  - 06/7/26(水) 9:12 -

引用なし
パスワード
   昨日帰りの電車の中で気づいた事。
>SplitでVblfを基準に配列に分ける。
>Replaceで、「a 」をループして消すとか....。
Replaceで、「a 」を消してから、Splitで分ければループの必要は無いですね。

7148 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free