Excel VBA質問箱 IV

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

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


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

【53538】String型文字列からの単語抽出 VBA初心者 08/1/20(日) 23:03 質問[未読]
【53540】Re:String型文字列からの単語抽出 りん 08/1/21(月) 0:02 回答[未読]
【53543】Re:String型文字列からの単語抽出 Jaka 08/1/21(月) 9:37 発言[未読]
【53544】Re:String型文字列からの単語抽出 りん 08/1/21(月) 9:55 発言[未読]
【53549】Re:String型文字列からの単語抽出 Jaka 08/1/21(月) 11:06 発言[未読]
【53550】Re:String型文字列からの単語抽出 りん 08/1/21(月) 11:08 発言[未読]
【53557】Re:String型文字列からの単語抽出 VBA初心者 08/1/21(月) 21:38 お礼[未読]

【53538】String型文字列からの単語抽出
質問  VBA初心者  - 08/1/20(日) 23:03 -

引用なし
パスワード
   String型の文字列から、単語を抽出する方法について質問があります。

例)
"this  is  a pen"から「this」と「is」と「a」と「pen」を
抽出する。
※空白は複数個ある場合もある。

良い抽出方法がありましたら、ご教示お願いします。

【53540】Re:String型文字列からの単語抽出
回答  りん E-MAIL  - 08/1/21(月) 0:02 -

引用なし
パスワード
   VBA初心者さん、こんばんわ。
>String型の文字列から、単語を抽出する方法について質問があります。
>
>例)
>"this  is  a pen"から「this」と「is」と「a」と「pen」を
>抽出する。
>※空白は複数個ある場合もある。
>
>良い抽出方法がありましたら、ご教示お願いします。
Split関数でちぎってみました。
Sub test()
  Dim s1 As String, msg As String, dt As Variant, II As Integer
  s1 = "this  is  a pen"
  'とりあえずちぎる
  dt = Split(s1, " ", compare:=vbTextCompare)
  '空白除外
  For II = LBound(dt) To UBound(dt)
   If Trim(dt(II)) <> "" Then msg = msg & vbCrLf & dt(II)
  Next
  '結果表示
  If Trim(msg) <> "" Then
   MsgBox "Result:" & msg, vbExclamation, s1
  Else
   MsgBox "?", vbExclamation, s1
  End If
End Sub

区切り位置を使って簡単に。
Sub Macro1()
  With Range("A1")
   '値
   .Value = "this  is  a pen"
   'データ→区切り位置→空白
   .TextToColumns Destination:=.Offset(0, 0), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True
  End With
End Sub

こんな感じです。

【53543】Re:String型文字列からの単語抽出
発言  Jaka  - 08/1/21(月) 9:37 -

引用なし
パスワード
   ▼りん さん:
おはようございます。

>  s1 = "this  is  a pen"
    ↓
  s1 = Application.Trim("this  is  a pen")
  こうすると空白除外は要らないかも。

【53544】Re:String型文字列からの単語抽出
発言  りん E-MAIL  - 08/1/21(月) 9:55 -

引用なし
パスワード
   Jaka さん、おはようございます。

>>  s1 = "this  is  a pen"
>    ↓
>  s1 = Application.Trim("this  is  a pen")
>  こうすると空白除外は要らないかも。

空白除外時のTrimは確かにいらないですね。

Sub test()
  s1 = " This  Is  A Pen"
  dt = Split(Trim(s1), " ", compare:=vbTextCompare)
  For II = LBound(dt) To UBound(dt)
   MsgBox "|" & dt(II) & "|", vbInformation, s1
  Next
End Sub

ここで「||」と表示される部分をスキップするための分岐が空白除外ですので。
コメントが良くなかったかな。

【53549】Re:String型文字列からの単語抽出
発言  Jaka  - 08/1/21(月) 11:06 -

引用なし
パスワード
   これだと配列は、6個出来ますが
  s1 = "this  is  a pen"
  dt = Split(s1, " ", compare:=vbTextCompare)
  MsgBox UBound(dt) + 1

これだと配列は、4個しか出来ない。
  s1 = Application.Trim("this  is  a pen")
  dt = Split(s1, " ", compare:=vbTextCompare)
  MsgBox UBound(dt) + 1

エクセル関数を使うと、余計な手間が省けるかなと思って...。

【53550】Re:String型文字列からの単語抽出
発言  りん E-MAIL  - 08/1/21(月) 11:08 -

引用なし
パスワード
   Jaka さん、こんちわ。

>これだと配列は、4個しか出来ない。
>  s1 = Application.Trim("this  is  a pen")
>  dt = Split(s1, " ", compare:=vbTextCompare)
>  MsgBox UBound(dt) + 1
>
>エクセル関数を使うと、余計な手間が省けるかなと思って...。
なるほど。
挙動が違うんですね。

【53557】Re:String型文字列からの単語抽出
お礼  VBA初心者  - 08/1/21(月) 21:38 -

引用なし
パスワード
   大変参考になりました。
ご回答ありがとうございます。

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