アプリ版:「スタンプのみでお礼する」機能のリリースについて

変数を配列に格納する時に、二つの条件を指定することはできますか?

VBAです。

Private Sub test()
Dim i As Long
Dim Str As String
Dim tmp As Variant

Str = "a,i,u-e-o"
tmp = Split(Str, ",") '配列に格納する

For i = LBound(tmp) To UBound(tmp)
Debug.Print tmp(i)
Next i

End Sub

の場合、結果が
a
i
u-e-o
になってしまいます。

tmp = Split(Str, "," or "-")

のようなことをして
a
i
u
e
o

と表示させたいです。

"a,i,u-e-o"を"a,i,u,e,o"にすることはできません。ご教授よろしくお願いします。

A 回答 (4件)

Str = "a,i,u-e-o"


tmp = Split(Replace(Str, "-", ","), ",")
For i = LBound(tmp) To UBound(tmp)
Debug.Print tmp(i)
Next i
    • good
    • 0
この回答へのお礼

できました。ありがとうございました。

お礼日時:2012/10/22 23:51

#1、cjです。


すみません、勘違いで書きすぎました。
#2さん、ご紹介の方法でいくつかありますね。
大変失礼いたしました。
    • good
    • 0
この回答へのお礼

いえいえ。とても参考になりました。

お礼日時:2012/10/22 23:50

参考URLでSplitに正規表現を使用する方法が紹介されてますね。



参考URL:http://oshiete.goo.ne.jp/qa/1405463.html
    • good
    • 0
この回答へのお礼

正規表現は難しいので勉強します。ありがとうございました。

お礼日時:2012/10/22 23:50

こんにちは。



Sub Re7759904a()
  Dim i As Long
  Dim sStr As String
  Dim tmp As Variant

  sStr = "a,i,u-e-o"
' ' 区切り文字を(置換によって)統一後、配列に格納する
  tmp = Split(Replace(sStr, "-", ","), ",")

  For i = LBound(tmp) To UBound(tmp)
    Debug.Print tmp(i)
  Next i

End Sub

Split()関数のように非ループで実現するには、一旦置換するしかないですね。
> "a,i,u-e-o"を"a,i,u,e,o"にすることはできません。
という限定がどういう意味なのかはわかりませんけれど。
或いはループを考えるにしても、区切り文字を統一した方が結局は効率的です。
また、区切り文字は本来、その文字(記号)が、テキストの中で
区切り文字以外の意味で使われることがない
という前提で成り立っていますから、
そういう意味では、既に使われている区切り文字に置換する、ということに
問題があるとは思えません。

もしかしたら、ここに書かれていない条件があるのでしょうか?
    • good
    • 0
この回答へのお礼

> "a,i,u-e-o"を"a,i,u,e,o"にすることはできません。
という限定がどういう意味なのかはわかりませんけれど。

なんか自分で読み返しても意味がわかりませんでした笑
すいませんでした。
置換しちゃえばいいんですね!
うまく行きました。ありがとうございました。

お礼日時:2012/10/22 23:50

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