今日、仕事でいくつかのタスクを自動化するための簡単なツールを作成しようとしましたが、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に注意してくださいRange
。Cells
これはwith
節オブジェクトを参照します。