質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

配列n番目とn+1番目の連結

受付中

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 946

score 12

VBA初心者です。
配列n番目とn+1番目を"-"を間に入れて連結させたいのですが、試行錯誤したところなかなかうまくいきません。
配列に入ったまま配列変数a(2)として使うとsubやプロシージャーが定義されていません。とでます、Join関数だと引数の第一引数の規格自体が、配列全体、で○番目の配列変数はサポートされていません。
乱文で失礼しますが、方法を思いつく方いらっしゃいませんか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • azuapricot

    2019/01/31 14:35

    コードをご提示できるようでしたら、マークダウン <code> を使用して貼りつけたほうが回答が得られやすいですよ

    キャンセル

  • papinianus

    2019/01/31 14:49 編集

    aが配列として宣言されてますか?a()という関数を呼びに行ってます。Joinは全部を区切り文字で連結するので、一箇所だけに入れたいなら不適でしょう

    キャンセル

回答 3

+1

コードが提示されていないので確実ではないですが、普通に書くならこうなると思います。

a(n) & "-" & a(n+1)

' 例1
Debug.Print a(n) & "-" & a(n+1)
' 例2
b = a(n) & "-" & a(n+1)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こういうことでしょうか?
uboundで配列の数を調べてforで回してます。
変数名は適当に日本語にしました。

結果 = 配列名(0)
For i = 1 To UBound(配列名)
    結果 = 結果 & "-" & 配列名(i)
Next i

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/31 16:47

    それなら、
    結果 = Join(配列名, "-")
    の1行で済みます。

    キャンセル

  • 2019/01/31 16:53

    uboundも何も使わずfor n To n+1 なら好きなところでいける?
    よく分かりませんがnとn+1のみならttyp03さんの回答になりますね。

    キャンセル

  • 2019/01/31 17:00

    質問者さんの説明が不足しているので、いかようにも解釈できるのですが、
    ttyp03さんの回答が質問者さんの希望のことかなと私も思います。
    コードの記述が間違っているだと思いますが、コード提示がないので間違いを指摘することもできませんよね。

    キャンセル

0

1回だけ処理したいならttyp03さんのアドバイスのように、配列から要素番号を指定して取り出し、連結するだけでいいと思います。

nを変えながら繰り返し同じような結合をしたいなら、配列とnを引数とした関数(Function)として作成しておくと便利です。

以下はJOIN関数風に拡張したサンプルです。

Function JoinEx(ByRef sAry() As String, ByVal sMark As String, ByVal iSt As Integer, ByVal iCnt As Integer) As String
    Dim ret As String
    Dim i As Integer

    JoinEx = "Err"

    '不正な引数の場合は処理を抜ける
    If iSt < 1 Then Exit Function
    If iSt + iCnt - 1 > UBound(sAry) + 1 Then Exit Function

    '配列のiSt番目からiCnt個分を連結
    For i = iSt To iSt + iCnt - 1
        '初回以外は区切り文字を挟む
        If ret <> "" Then ret = ret & sMark
        ret = ret & sAry(i - 1)
    Next

    JoinEx = ret

End Function


'JoinEx関数の利用サンプル
Sub sample()
    Dim a() As String
    Dim n As Integer

    Dim txt As String
    txt = "a,b,c,d,e"

    '配列を作成
    a = Split(txt, ",")

    '配列を"-"で結合
    MsgBox Join(a, "-")

    '配列の2番目からの2個(b、c)を"-"で結合
    n = 2
    MsgBox JoinEx(a, "-", n, 2)

End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る