Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2007)
左から最初の空白以降の部分を取得
投稿日時: 19/05/18 13:52:51
投稿者: FILETUBE

こんにちは。
 
左から最初の空白以降の部分を取得したいのですが
どのようなコードになるのでしょうか。
空白が無かった場合は全て取得になります。
 
セル thisws.Cells(3, 10)の値を分けたいのです。
 
例えば
AA 123なら123を
AA BB 123ならBBを
ABCDならABCDを
 
取得したいのです。
 
分かる方おられましたら
教えて頂けないでしょうか。
 
宜しくお願いします。

回答
投稿日時: 19/05/19 12:14:33
投稿者: WinArrow
投稿者のウェブサイトに移動

あれ!?
 
1回、回答が付いていたと思いますが、・・・・
(どなただったか覚えていません)
 
 
With thisws.Cells(3, 10)
    Debug.Print Split(WorksheetFunction.Trim(.Value) & " " & WorksheetFunction.Trim(.Value), " ")(1)
End With
 
スペースが1桁とは限らないという想定で、
Trim(ワークシート関数)を入れてあります。

回答
投稿日時: 19/05/19 14:26:38
投稿者: simple

既に回答がありますが、蛇足ながら、より鈍くさい?ものをコメントします。
 
空白があるかどうかはInStr関数で調べることができますね。
それで場合分けをしてはどうですか?
空白がある場合は、すでに指摘があるように、Split関数を使うのが簡単でしょう。
 
    s = "AA BB CC"
のとき
    ary = Split(s, " ")
とすると,
Split関数は、"AA","BB","CC"の3つの要素からなる配列を返します。
 
indexは 0 から始まりますので、真ん中の"BB"を取り出すには、
index に 1 を指定して取り出せばOKです。

    If InStr(s, " ") > 0 Then
        t = Split(s, " ")(1)
    Else
        t = s
    End If
    Debug.Print t

 
s = "DDD " などという場合は、どうすべきか。
       ↑スペース付き
WinArrowさんのご指摘が有益でしょう。
また、全角スペースがあったときの取扱は?応用編です。
 
# 回答があってから余り放置されないほうがいいですよ。その警鐘だったでしょう。

投稿日時: 19/05/19 18:03:34
投稿者: FILETUBE

いつも大変丁寧な回答ありがとうございます。
なるほどsplitですか。
 
検証してみます。
本当にありがとうございました。

投稿日時: 19/05/20 17:45:22
投稿者: FILETUBE

 WinArrowさん、simpleさん
今回も回答ありがとうございました。
 
If InStr(Trim(Replace(thisws.Cells(3, 10), " ", " ", xlPart)), " ") > 0 Then
   wks.Cells(vLST, 8) = Split(Trim(Replace(thisws.Cells(3, 10), " ", " ", xlPart)), " ")(1)
Else
   wks.Cells(vLST, 8) = thisws.Cells(3, 10)
End If
 
全角の空白は半角にReplaceするようにしました。
 
また宜しくお願いします。