VB で複数の文字列を 1 つのセルに連結しようとすると、サブまたは関数が未定義のエラーが発生する

VB で複数の文字列を 1 つのセルに連結しようとすると、サブまたは関数が未定義のエラーが発生する

今日、仕事でいくつかのタスクを自動化するための簡単なツールを作成しようとしましたが、Sun または Function エラーが発生するという問題に遭遇しました。私は VB の初心者で、構文や言語の詳細に精通していません。助けていただけないでしょうか。私がしようとしていることの詳細: 基本的に、複数のグループ (各グループに 4 つのセルのみ) があり、それらを 1 つのセルにコピーしようとしています。次のようになります。

グループ1: セル1 セル2 セル3 セル4

グループ2: . . . これらの各グループを個別のセルにコピーする必要があります。

コードは次のとおりです:

Public Sub GlobalConcatenation()
    Dim sourcerange As Range
    Dim gbegin As Integer
    Dim gend As Integer
    gbegin = 2
    gend = 5
    sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))
    Dim i As Integer
    For i = 2 To 50
        callConcatinateAllCellValuesInRange (sourcerange)

        sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin + 4), Cells(2, gend + 4))
End Sub
Function ConcatinateAllCellValuesInRange(sourcerange As Excel.Range) As String
    Dim finalValue As String

    Dim cell As Excel.Range

    For Each cell In sourcerange.Cells
        finalValue = finalValue + CStr(cell.Value)
    Next cell

    ConcatinateAllCellValuesInRange = finalValue
End Function

編集: 問題が GlobalConcatenation() 関数に現れ、エラーが発生するたびに「sourcerange」が強調表示されることも指定する必要があると思います。

編集: コードを更新しました - スペルミスを修正しました

答え1

これは次の行のスペルミスによるものですgbeging:-

違うもの:-

sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbeging), Cells(2, gend))

sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbeging + 4), Cells(2, gend + 4))

正解:-

sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))

sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin + 4), Cells(2, gend + 4))

答え2

エラーの原因として最も可能性が高いのは、次のような行のセルへの非修飾参照です。

sourcerange = Sheets("raw_LSToolData").Range(Cells(2, gbegin), Cells(2, gend))

Cells(2, gbegin)アクティブシート上のセルを参照します。そうでない場合はraw_LSToolDataエラーが発生します。

正しいコードは

sourcerange = Sheets("raw_LSToolData").Range(Sheets("raw_LSToolData").Cells(2, gbegin), Sheets("raw_LSToolData").Cells(2, gend))

より良い方法は

with Sheets("raw_LSToolData")
    sourcerange = .Range(.Cells(2, gbegin), .Cells(2, gend))
end with

.の前の'sに注意してくださいRangeCellsこれはwith節オブジェクトを参照します。

関連情報