0

事前に決定されたカウントに基づいて、列内の複数行のテキストを1つのセルにマージする関数を作成しようとしています。私の目標は、大量のデータのコンパイル/解釈を支援する柔軟な関数を生成することです。私が書いたコードは#NAMEを返しますか?エラーがどこにあるのかわかりません。私のコードは次のとおりです。

Function vmrg(countref As Integer, datref As Integer) As String
If IsEmpty(ActiveCell.Offset(0, -countref)) Then % check if cell containing count is blank
vertmerge = "N/A"                                % if blank, state N/A
Else
    Dim datlst(0 To ActiveCell.Offset(0, -countref).Value - 1) As String 
    Dim i As Integer                                                      
    For i = 0 To ActiveCell.Offset(0, -countref).Value - 1  
        datlst(i) = ActiveCell.Offset(i, -datref).Text  %fill array with data
    End
    vertmerge = datlst(0)
    For i = 1 To ActiveCell.Offset(0, -countref).Value - 1  % merge array to a single string
        vertmerge = vertmerge & ", " & datlst(i)
        End
   End
End Function

私はMATLABとC++の経験がありますが、VBAを使用するのはこれが初めてなので、構文が一部の領域で奇妙で、他の領域では間違っている可能性があります。理想的には、データとカウント情報が格納されているセルを参照したいのですが、今のところ、構文を修正し、この関数をさらに開発するための出発点を設定したいと考えています。任意の推奨事項をいただければ幸いです。

コードRev_1:まだ#NAMEの出力がありますか?しかし、私はいくつかの問題を修正したと思います(?)

Function vertmerge(countref As Range, datref As Integer) As String
If IsEmpty(countref) = True Then
vertmerge = "NA"
Else
Dim datlst(0 To countref.Value - 1) As String
Dim i As Integer
For i = 0 To countref.Value - 1
datlst(i) = countref.Offset(i, datref).Text
Next i
vertmerge = datlst(0)
For i = 1 To countref.Value - 1
vertmerge = vertmerge & ", " & datlst(i)
Next i
End
End Function
4

1 に答える 1

0

あなたはここでいくつかの危険なことをしています!

まず、関数内から「ActiveCell」を参照しています。しかし、関数の実行時にどのセルがアクティブになるかについてのアイデアはありません。代わりに、ターゲットセルをパラメータとして渡します。

=vmrg("B6", 5, 6)

関数プロトタイプを次のように変更します

Function vmrg(r as Range, countref as Integer, datref as Integer)

これで、rに関連するものを次のように参照できます。

r.Offset(1,2)

次へ-に何も割り当てませんvmrg。VBAでは、関数が値を返す方法は次のとおりです(この場合)

vmrg = 23

-という変数に物事を割り当てていますvertmergeが、それは関数の名前ではありません。少なくとも追加

vmrg = vertmerge

帰る直前。それはそれをするかもしれません。スプレッドシートの完全なサンプルがなければ、私はあなたをこれ以上助けることはできません。

于 2013-03-13T21:08:06.193 に答える