Variant型でJoin関数のような事をするには?

解決


7k  2006-05-11 02:13:24  No: 131321

質問ばかりですみません。
表題の通り配列に含まれる文字列を結合したいんですができますか?
ちなみに区切り文字も入れられたらなって思います。

Dim row() As Variant      '//1行データ
:
ReDim row(rowCnt)
:
row(j) = Worksheets("sheet2").Range("A" & j + 4 & ":Y" & j + 4).Value

row(j)をStringの配列に変換する方法でもありがたいんで教えていただけたら
幸いです。

よろしくお願いします。


魔界の仮面弁士  2006-05-11 02:39:34  No: 131322

ん? そのまま Join が使えましたけど……。

Dim row() As Variant      '//1行データ
row = Array(123, "あいう", 9.876, Empty, "!?")

Dim Char As String
Char = "|"

Dim strLine As String
strLine = Join(row, Char)

MsgBox strLine


7k  2006-05-11 03:01:37  No: 131323

回答ありがとうございます。

確かに記述していただいたものではうまくいくんですけど
rowStr(j) = Join(row(j), ",")
冒頭の部分の最後にこの文を足すと
『プロシージャの呼び出し、または引数が不正です。』
って出てきちゃうんです。。。

なぜかわかりますか??


デバッグは自分で  2006-05-11 03:16:49  No: 131324

>strLine = Join(row, Char)

>rowStr(j) = Join(row(j), ",")

よく見比べてみよう(Joinの引数)


特攻隊長まるるう  2006-05-11 03:35:01  No: 131325

>row(j) = Worksheets("sheet2").Range("A" & j + 4 & ":Y" & j + 4).Value
Value で取れるの2次元の配列じゃない?


7k  2006-05-11 03:53:37  No: 131326

特攻隊長まるるう様回答ありがとうございます。

>Value で取れるの2次元の配列じゃない?
ではワークシートのA2:Y2までを
一次元配列でどのように取得したらいいのでしょうか??

デバッグは自分で様
>よく見比べてみよう(Joinの引数)
よくわかりませんでしたm(_ _)m


特攻隊長まるるう  2006-05-11 04:03:02  No: 131327

もともとエクセルがマトリックス上のものなので、1行といっても
縦と横があるし(つまり1次元目の1列と、2次元目の1列)
自動で一次元配列で返してくれたりすると、その方が面倒w
…って思いません?
(1つのセルのみ選択するとセルに入ってるデータ型(String とか
Long とか)で返ってくるみたいだけど。。。)

言葉どおりにやりたいなら、エクセルの内部処理を改造する
しかないと思います。(Row とか指定しても結局 Range だから
無理な気がします。)
…犯罪行為ですけどw。

一度、2次元配列として受け取って、1次元配列を自分で
用意して、ループをまわしながら1つ1つ入替えるしかないと
思います。…でも、それをするなら Join を使わずに文字列
連結するよね?w。…そんな感じです。


7k  2006-05-11 04:11:19  No: 131328

特攻隊長まるるう様

再度回答いただきありがとうございます。
やっぱりそうなっちゃいますよね・・・(^_^;)
セルが1つ1つだと処理が遅くなる気がしてたんでできれば避けたかったんですけど諦めますw
助言ありがとうございましたm(__)m


特攻隊長まるるう  2006-05-11 04:16:42  No: 131329

>セルが1つ1つだと処理が遅くなる気がしてたんでできれば避けたかったんですけど諦めますw
いや、そこは正解。セルに一個一個アクセスすると極端に遅くなります。

ですから
・一度、エクセルから2次元配列として受け取って
・それを都合のいいように加工して下さい。


7k  2006-05-11 04:31:00  No: 131330

特攻隊長まるるう様

>・一度、エクセルから2次元配列として受け取って
>・それを都合のいいように加工して下さい。
未熟者なので受け取り方法も加工方法もわからないんですよね。。。
でも調べてがんばります\('-'#)/


特攻隊長まるるう  2006-05-11 05:27:26  No: 131331

質問文のコードが書けるなら大した違いは無いと思うけど?

あと、開発環境は毎回スレッドの最初に書くようにしてね。
ここは[Excel VBA]だけの掲示板じゃないし、1日に数十人の
質問を相手にしてると、いちいち覚えてられないから。

[Excel VBA]
Option Explicit
Private Sub test()
    Dim varValueData() As Variant   '//2次元配列データ
    Dim strRowData() As String      '//1行のデータを連結した1次元配列
    Dim strTemp As String
    Dim m As Long
    Dim n As Long
    varValueData = ThisWorkbook.Worksheets("sheet2").Range("A7:Y10").Value
    '取得できた全データ書き出しと連結格納
    ReDim strRowData(LBound(varValueData, 1) To UBound(varValueData, 1))
    For m = LBound(varValueData, 1) To UBound(varValueData, 1)
        strTemp = ""
        For n = LBound(varValueData, 2) To UBound(varValueData, 2)
            Debug.Print "[" & CStr(m) & ":" & CStr(n) & "]" & CStr(varValueData(m, n))
            strTemp = strTemp & "," & CStr(varValueData(m, n))
        Next
        strRowData(m) = strTemp
    Next
    '連結データ書き出し
    For m = LBound(varValueData, 1) To UBound(varValueData, 1)
        Debug.Print strRowData(m)
    Next
End Sub


7k  2006-05-11 23:42:07  No: 131332

特攻隊長まるるう様

回答ありがとうございます。
無事取得できました。
>あと、開発環境は毎回スレッドの最初に書くようにしてね。
以後気を付けます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加