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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

3回答

1204閲覧

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

ksk.foo2294

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/01/31 05:33

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/01/31 05:35

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

2019/01/31 05:50 編集

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

回答3

0

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

VBA

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

投稿2019/01/31 06:26

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

投稿2019/01/31 08:43

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

vba

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

投稿2019/01/31 07:18

expy

総合スコア103

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/01/31 07:47

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

2019/01/31 07:53

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

2019/01/31 08:00

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問