|
▼けい さん:
おじゃまします。
>最大45列あり、少ないものは1列しか文字が入っていません。
>B列から右に向かって空白になるまで文字を連結して、A列に結果を出したい場合
列数不定なので、けっこうめんどいですね
すくなくともB列だけは全行データが入っているとして、
2例ほど。
Sub Try1()
Dim r As Range
Dim i As Long
Dim v, u
Dim t&
t = timeGetTime()
Set r = Range("B1", Cells(Rows.Count, 2).End(xlUp)).Resize(, 20)
ReDim v(1 To r.Rows.Count, 0)
For i = 1 To UBound(v)
For Each u In WorksheetFunction.Index(r.Rows(i).Value, 0#)
If IsEmpty(u) Then Exit For
v(i, 0) = v(i, 0) & u & ","
Next
v(i, 0) = Left$(v(i, 0), Len(v(i, 0)) - 1)
Next
Cells(1).Resize(r.Rows.Count).Value = v
Debug.Print "'try1", timeGetTime() - t
End Sub
Sub Try2()
Dim r As Range
Dim ss As String
Dim v, vv, i As Long
Dim t&
t = timeGetTime()
Set r = Range("B1").CurrentRegion
With Intersect(r, r.Offset(, 1))
.Copy
With GetObject("new:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
.GetFromClipboard
v = Split(Replace(.GetText, vbTab, " "), vbCrLf)
End With
Application.CutCopyMode = True
ReDim vv(1 To UBound(v), 0)
For i = 0 To UBound(v) - 1
vv(i + 1, 0) = Replace(Application.Trim(v(i)), " ", ",")
Next
End With
Range("A1").Resize(i).Value = vv
Debug.Print "'try2", timeGetTime() - t
End Sub
なお、2つ目の
> With GetObject("new:1C3B4210-F441-11CE-B9EA-00AA006B1A69")
は
Microsoft Forms 2.0 Object Library に参照設定してあれば、
With New DataObject
ですみます。
もっと良い方法がありそうですが...
|
|