|
▼ハト さん:
ご返信ありがとうございます。
>既に回答は出ていますが、こんな感じに修正しても可能です
>例としてのケースで要素数は4としたいのか、3にしたいのかで少し修正が必要です
>
>▼sin さん:
>>宜しくお願いします。
>>
>>下記のテストでは、 testf で文字列をカンマで分解して、
>>その配列の「要素数」と「配列本体」を tests 受け取りたいと考えています。
>>Functionプロシージャ や 配列 について色々調べてみましたが、
>>解決方法が見つかりませんでした。
>>なにか良い方法があればご教授下さい。
>>
>>※下記では文字列は"aaa,bb,cccc,ddd"でカンマによって4つに分けられますが、
>>実際に使用するときは不定です。
>>
>>―――――――――――――――――――――――――――――――――――――
>>
>>Sub tests()
>>
>> Dim get_res As Integer
> dim res_str() As String
>>
>> get_res = testf("aaa,bb,cccc,ddd") '要素数を受け取る
>>'※※※ここで Function testf の配列 res_str() も受け取りたい※※※
>
> get_res = testf("aaa,bb,cccc,ddd", res_str()) '要素数を受け取る
配列を渡して、処理してもらえばよかったんですね・・・。
勉強になりました。
>
>>
>>
>>End Sub
>>
>>Function testf(str As String) As Integer '←ここで何か出来そうな気が・・・
>Function testf(str As String, res_str() As String) As Integer
>
>>
>> Dim stp As Integer 'ストップ位置
>> Dim stt As Integer 'スタート位置
>> Dim cnt As Integer '配列の要素数
>
>> Dim res_str() As String '結果保存用配列
>↑削除
>
>>
>> stt = 0
>> cnt = 0
>> stp = 1
>>
>> Do Until stp = 0
>> ReDim Preserve res_str(cnt)
>>
>> stp = InStr(stt + 1, str, ",") 'カンマ位置の取得
>>
>> If stp <> 0 Then 'カンマが検出された場合の処理
>> res_str(cnt) = Mid(str, stt + 1, stp - stt - 1)
>> cnt = cnt + 1
>> stt = stp
>> Else 'カンマが検出されかった場合の処理
>> res_str(cnt) = Mid(str, stt + 1, Len(str) - stt)
>→この場合の要素数が4にしたいなら
> cnt =cnt + 1
すいません、「要素数」という表現が間違ってました。
「配列の最後のインデックス番号」と言いたかったので、
今回の場合3で問題ないです。
(これも UBound であっさり解決しました)
>
>> End If
>> Loop
>>
>> testf = cnt '←要素数を戻り値として返す
>> ' res_str() '←この配列も戻り値として返したい
>>
>>End Function
>>
>>―――――――――――――――――――――――――――――――――――――
今回の質問に関しては、Jaka さん、ハチさんに教えていただいた
Split関数、UBound関数、LBound関数
で簡単に出来ることが分かりました。
本当に勉強不足でした。
ただ、「カンマが続いた場合」や「カンマの間が空白スペースだった場合」などは
無視するといった処理も織り込むので今回は、ハチさんとハトさんに教えて
いただいたやり方を合わせて取り入れたいと思います。
ありがとうございました。
|
|