質問ばかりですみません。
表題の通り配列に含まれる文字列を結合したいんですができますか?
ちなみに区切り文字も入れられたらなって思います。
Dim row() As Variant '//1行データ
:
ReDim row(rowCnt)
:
row(j) = Worksheets("sheet2").Range("A" & j + 4 & ":Y" & j + 4).Value
row(j)をStringの配列に変換する方法でもありがたいんで教えていただけたら
幸いです。
よろしくお願いします。
ん? そのまま 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
回答ありがとうございます。
確かに記述していただいたものではうまくいくんですけど
rowStr(j) = Join(row(j), ",")
冒頭の部分の最後にこの文を足すと
『プロシージャの呼び出し、または引数が不正です。』
って出てきちゃうんです。。。
なぜかわかりますか??
>strLine = Join(row, Char)
>rowStr(j) = Join(row(j), ",")
よく見比べてみよう(Joinの引数)
>row(j) = Worksheets("sheet2").Range("A" & j + 4 & ":Y" & j + 4).Value
Value で取れるの2次元の配列じゃない?
特攻隊長まるるう様回答ありがとうございます。
>Value で取れるの2次元の配列じゃない?
ではワークシートのA2:Y2までを
一次元配列でどのように取得したらいいのでしょうか??
デバッグは自分で様
>よく見比べてみよう(Joinの引数)
よくわかりませんでしたm(_ _)m
もともとエクセルがマトリックス上のものなので、1行といっても
縦と横があるし(つまり1次元目の1列と、2次元目の1列)
自動で一次元配列で返してくれたりすると、その方が面倒w
…って思いません?
(1つのセルのみ選択するとセルに入ってるデータ型(String とか
Long とか)で返ってくるみたいだけど。。。)
言葉どおりにやりたいなら、エクセルの内部処理を改造する
しかないと思います。(Row とか指定しても結局 Range だから
無理な気がします。)
…犯罪行為ですけどw。
一度、2次元配列として受け取って、1次元配列を自分で
用意して、ループをまわしながら1つ1つ入替えるしかないと
思います。…でも、それをするなら Join を使わずに文字列
連結するよね?w。…そんな感じです。
特攻隊長まるるう様
再度回答いただきありがとうございます。
やっぱりそうなっちゃいますよね・・・(^_^;)
セルが1つ1つだと処理が遅くなる気がしてたんでできれば避けたかったんですけど諦めますw
助言ありがとうございましたm(__)m
>セルが1つ1つだと処理が遅くなる気がしてたんでできれば避けたかったんですけど諦めますw
いや、そこは正解。セルに一個一個アクセスすると極端に遅くなります。
ですから
・一度、エクセルから2次元配列として受け取って
・それを都合のいいように加工して下さい。
特攻隊長まるるう様
>・一度、エクセルから2次元配列として受け取って
>・それを都合のいいように加工して下さい。
未熟者なので受け取り方法も加工方法もわからないんですよね。。。
でも調べてがんばります\('-'#)/
質問文のコードが書けるなら大した違いは無いと思うけど?
あと、開発環境は毎回スレッドの最初に書くようにしてね。
ここは[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
特攻隊長まるるう様
回答ありがとうございます。
無事取得できました。
>あと、開発環境は毎回スレッドの最初に書くようにしてね。
以後気を付けます。
ツイート | ![]() |