[[20250310144619]] 『配列のFor Next処理について』(ささみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『配列のFor Next処理について』(ささみ)

自分の中ではほぼ決まっているのですが、他の人の意見も聞きたくて書き込みました

異なる要素数の配列(中身は文字列)が3つあり、それらを1つにまとめたい
1つにまとめた時の要素数は一番少ない要素数に合わせる
あぶれる分はカンマで繋げる


Dim A(1),B(2),C(2)
Dim X(1)
X(0)=A(0) & B(0) & C(0)
X(1)=A(1) & B(1) & C(1) & "," & B(2) & C(2)

設定の説明は上記で伝わるといいのですが
お聞きしたいのは、まとめる時にFor Next処理を使うのですがこの時の終了値は
3つの配列の中で要素数が最小かそれとも最大のものですか?
単純に他の人はどうなのか気になったのと、考え方の参考にしたいのでよろしくお願いします

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


わたしなら ループ2回
最小、最大 それぞれ。。。。かな。。。きっと
貴方様の方が。。。スマートでトレンディ!!。。。。(*^^*)
(隠居Z) 2025/03/10(月) 16:15:03

 最大かと。

 Sub sample()
     Dim a$(1), b$(2), c$(2)
     Dim temp$(1), i&
     For i = 0 To 2
         Dim buf$
         buf = IIf(i > UBound(a), "", a(i)) & IIf(i > UBound(b), "", b(i)) & IIf(i > UBound(c), "", c(i))
         If UBound(temp) <= i Then
             temp(i) = buf
         Else
             temp(UBound(temp)) = temp(UBound(temp)) & "," & buf
         End If
     Next
 End Sub

 用途が分からないので、例をコード化しただけですが。
 用途内容によっては、違ったアプローチがあるかもしれません。
(tkit) 2025/03/10(月) 16:23:08

とりあえず わたしも。。。コードだけ アップさせていただきます。 ← ↓ はずかし !! (*^^*)
( ̄▽ ̄;)。。。m(__)m
 Option Explicit
Sub a()
    Dim tsx$, app, a(), b(), c(), x(), i&, j&, l&, s&, AA(1), BB(3), cc(2)
    Set app = Application
    AA(0) = "A": AA(1) = "B"
    BB(0) = "C": BB(1) = "D": BB(2) = "E": BB(3) = "SP"
    cc(0) = "F": cc(1) = "G": cc(2) = "H"
    a = AA: b = BB: c = cc
    l = app.Max(UBound(a), UBound(b), UBound(c))
    s = app.Min(UBound(a), UBound(b), UBound(c))
    ReDim x(s)
    ReDim Preserve a(l)
    ReDim Preserve b(l)
    ReDim Preserve c(l)
    For i = 0 To UBound(x)
        x(i) = a(i) & b(i) & c(i)
    Next
    For j = i To l
        tsx = tsx & "," & a(j) & b(j) & c(j) & ","
    Next
    x(UBound(x)) = x(UBound(x)) & tsx
    MsgBox Join(x, Chr(13))
    Erase a, b, c, x, AA, BB, cc
End Sub
(隠居Z) 2025/03/10(月) 16:27:14

tkitさん、隠居Zさんお二人ともありがとうございます

私自身はtkitさんとほぼ同じ考えで、終了値は最大にしてます
可読性を考えてiifではなくselect caseを使っているので少し冗長になっていますが…
隠居Zさんのものは全く思いつかなかったやり方だったので参考になりました!
(ささみ) 2025/03/10(月) 17:28:47


 参考までですが、
 buf = IIf(i > UBound(a), "", a(i)) & IIf(i > UBound(b), "", b(i)) & IIf(i > UBound(c), "", c(i))
 の IIf(i > UBound(a), "", a(i)) のところは、iが2のときにエラーになります。
 TRUE,FALSEに拘わらず、引数はすべて一旦評価される仕組みですので注意が必要です。

(xyz) 2025/03/12(水) 09:44:14


XYZさん、ご丁寧にありがとうございます

全然気付いていませんでしたが言われてみると確かにそこでエラーが起きてしまいますね笑
私自身もたまにやってしまうミスなので気を付けたいと思います
(ささみ) 2025/03/12(水) 10:18:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.