Excel VBA質問箱 IV

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

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


6179 / 13646 ツリー ←次へ | 前へ→

【46755】文字列のつなぎ なた 07/2/14(水) 9:24 質問[未読]
【46756】Re:文字列のつなぎ Blue 07/2/14(水) 9:43 回答[未読]
【46757】Re:文字列のつなぎ へっぽこ 07/2/14(水) 10:21 発言[未読]
【46758】Re:文字列のつなぎ ハチ 07/2/14(水) 10:52 発言[未読]
【46760】Re:文字列のつなぎ Blue 07/2/14(水) 12:28 質問[未読]
【46763】Re:文字列のつなぎ ハチ 07/2/14(水) 12:48 発言[未読]
【46764】Re:文字列のつなぎ なた 07/2/14(水) 12:50 お礼[未読]

【46755】文字列のつなぎ
質問  なた E-MAIL  - 07/2/14(水) 9:24 -

引用なし
パスワード
   いつもお世話になっております。
今回、ループを使って文字列を取得していきたいと思っていますが、
やり方がわかりません・・・。

素人で超単純な事を聞いているかもしれませんが、
よろしくお願いいたします。


Private Sub CommandButton2_Click()

Dim counter As Integer
Dim test1 As Variant
Dim test2(50) As Variant
Dim n As Integer

n = 3

test2(0) = "あ"
test2(1) = "い"
test2(2) = "う"

For counter = 0 To n
  test1 = test2(counter) & ","
Next counter

End Sub

↑↑↑↑
本当は、ループを抜けてきたときに”あ,い,う,”という
文字列をtest1に入れたいのですが・・・・・。

【46756】Re:文字列のつなぎ
回答  Blue  - 07/2/14(水) 9:43 -

引用なし
パスワード
   ▼なた さん:
>本当は、ループを抜けてきたときに”あ,い,う,”という
>文字列をtest1に入れたいのですが・・・・・。
すでに格納している文字列にくっつければいいので、

>test1 = test2(counter) & ","

test1 = test1 & test2(counter) & ","
とすればよいのではないでしょうか?

【46757】Re:文字列のつなぎ
発言  へっぽこ  - 07/2/14(水) 10:21 -

引用なし
パスワード
   こんにちは。

3パターンほど書いてみました。

Sub サンプル()
  Dim counter As Long
  Dim test1a As Variant
  Dim test1b As Variant
  Dim test1c As Variant
  Dim test2 As Variant
  Dim 最初スイッチ As Boolean
'------------
'元ネタを用意
'------------
  'test2の中身を1つずつ設定するのが大変だったので
  'Split使いました。(Splitの詳細はヘルプ参照)
  test2 = Split("あ い う え お")
'--------------------------------------------------------
'カンマで繋ぐ
'※最初だけカンマがいらないので最初を判断する必要があるが
' いくつか方法があるのでそれぞれ書いてみました。
' (いろいろ載せる意味、あんまりないけど)
'--------------------------------------------------------
  '方法1(判断用の変数を使う)
  最初スイッチ = True
  For counter = LBound(test2) To UBound(test2)
    If 最初スイッチ = True Then
      最初スイッチ = False
    Else
      test1a = test1a & ","
    End If
    test1a = test1a & test2(counter)
  Next counter
  MsgBox "方法1:" & test1a
  '方法2(変数counterが指している値を使う)
  For counter = LBound(test2) To UBound(test2)
    If counter > LBound(test2) Then
      test1b = test1b & ","
    End If
    test1b = test1b & test2(counter)
  Next counter
  MsgBox "方法2:" & test1b
  '方法3(繋いだ結果を入れる変数(test1c)が空っぽなら「最初だな」と判断する)
  For counter = LBound(test2) To UBound(test2)
    If test1c <> "" Then
      test1c = test1c & ","
    End If
    test1c = test1c & test2(counter)
  Next counter
  MsgBox "方法3:" & test1c
End Sub

良く使うのは3番目の方法かな…

【46758】Re:文字列のつなぎ
発言  ハチ  - 07/2/14(水) 10:52 -

引用なし
パスワード
   ▼なた さん:

Sub test()
  Dim v(2) As String
  Dim test As String
  
  v(0) = "あ"
  v(1) = "い"
  v(2) = "う"
  
  test = Join(v, ",")
  MsgBox test
End Sub

でもできそうです。

【46760】Re:文字列のつなぎ
質問  Blue  - 07/2/14(水) 12:28 -

引用なし
パスワード
   ▼ハチ さん:
>でもできそうです。

実際は
>Dim test2(50) As Variant
ですが、もうひとつ配列を作らなくても、できますか?
(ReDimするのはたとえば3以降にデータがある場合使えないし)

さらにJoinだと、"あ,い,う," という文字列をえれないのではないでしょうか?
Dim v(3) As String
v(3) = ""
とすればできそうですけど。

【46763】Re:文字列のつなぎ
発言  ハチ  - 07/2/14(水) 12:48 -

引用なし
パスワード
   ▼Blue さん:
>▼ハチ さん:
>>でもできそうです。
>
>実際は
>>Dim test2(50) As Variant
>ですが、もうひとつ配列を作らなくても、できますか?
>(ReDimするのはたとえば3以降にデータがある場合使えないし)
>
>さらにJoinだと、"あ,い,う," という文字列をえれないのではないでしょうか?
>Dim v(3) As String
>v(3) = ""
>とすればできそうですけど。

Blueさんのご指摘の通りですね。
良く見てませんでした。すいません・・・
私の回答は無視してください。

Joinで無理やりやるなら・・・
要素に","があると困りますね。捨ててください。

Sub test()
  Dim Str(50) As String
  Dim test As String
  
  Str(0) = "あ"
  Str(3) = "い"
  Str(30) = "う"
  
  test = Join(Str, ",")
  test = Replace(test, ",,", "")
  If Right(test, 1) <> "," Then test = test & ","
  MsgBox test

End Sub

【46764】Re:文字列のつなぎ
お礼  なた E-MAIL  - 07/2/14(水) 12:50 -

引用なし
パスワード
   ▼ハチ さん:
▼Blue さん:
▼へっぽこ さん:

お忙しい中、色々教えていただきありがとうございます。
みなさんから丁寧に教えていただいた結果、
上手くいきました。
本当に感謝いたします。

どうぞこれからもよろしくお願いいたします。

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