こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

スペースが認識されません(エクセルVBA)

空白文字に囲まれた文字を抜き出すマクロを製作したいのですが
うまくいかず困っています。お助けください。


例えば、以下のような文字がA1セルに入力されているような場合に使用しています。

”ab c d”

f1 = Cells(i, "A")
Cells(i, "A") = Mid(f1, InStr(f1, " ") + 1, InStr(InStr(f1, " ") + 1, Mid(f1, InStr(f1, " ") + 1), " "))


このマクロを動作させると、一つ目のスペースは認識されるのですが
二つ目のスペースは認識される場合とされない場合があります。


原因を調査するために以下のようなコードを上記マクロの下に追記したところ

MsgBox Mid(f1, InStr(f1, " ") + 1) & " " & InStr(InStr(f1, " ") + 1, Mid(f1, InStr(f1, " ") + 1), " ")

表示は

cd 0

のようになります。二つ目のスペースが認識されていないようです。
また、エクセルに数式を入力すれば、上記の式でも認識しておりますが
他の操作との関係もあって、できればVBAで処理したいのです。

データはテキストデータから取り込んでおります。
実際にはセルには漢字や仮名、数字などのデータが混在しております。


エラー回避のために試した方法としては以下の2つです。

1.文字列として変換する方法
Cells(1, "A")=Format(f1, "@")

2.スペースの全角半角をそろえる方法
(下記の文では全角を半角にしておりますが、その逆も試しました)

If Cells(1 ,"A") = Cells(1 "A") Like "* *" Then
Cells(1, "A") = Replace(Cells(1, "A"), " ", " ")
End If

どちらを行っても改善はみられませんでした。


どこに間違いがあるのか、思い当たらず苦戦しています。
よろしくお願いいたします。

(エクセル2003、VISTA)

投稿日時 - 2013-03-14 12:24:09

QNo.7992872

困ってます

質問者が選んだベストアンサー

目的が今一見えないけど、全角スペースを半角スペースに置換したうえでSplitを使う方が簡単じゃないかな?

Sub Sample()
  Dim vData
  sF1 = "ab c d"
  sF1 = Replace(sF1, " ", " ")
  vData = Split(sF1, " ")
  If UBound(vData) = 2 Then
    MsgBox ("スペースに囲まれているのは:" & vData(1))
  Else
    MsgBox ("スペースの数が" & UBound(vData) & "です")
  End If
End Sub

投稿日時 - 2013-03-14 13:29:20

お礼

「InStr関数で認識されないスペースがある」とういのが

質問の趣旨でした。

質問内容が分かりにくくて申し訳ありません。


Split関数を用いたら、スペースを認識してくれました。

早々のご回答ありがとうございました。

大変助かりました。

投稿日時 - 2013-03-14 14:16:49

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問