部品_代入_セル
AssignCell
https://feelcodelab.com/vba_parts/assigncell/
・1つのセルの値を、別の1つのセルへ、「=」で代入する部品(基本の部品) ・転記元・転記先のブック(ThisWorkbook か ActiveWorkbook か)とシート名、行番号・列番号を、 すべて引数で明示して指定する ・名前に「代入(Assign)」が付く部品は、マッピング表も範囲設定部品も使わない、1つのセルだけの部品である → Components named "代入 (Assign)" work on a single cell and use neither a mapping table nor the ★ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、成功/失敗を Boolean で返す
土台
処理
セル
★【最重要】この部品は Function(関数)であり、戻り値(Boolean)を返す
→ 処理できた場合は True、実行時にできなかった場合は False(この場合は、エラーでは止まらない)
→ 呼び出し側は、必ず戻り値を確認してから後続処理を行い、メッセージも呼び出し側で表示する
★【最重要】転記元のブック(vSrcWb)と、転記先のブック(vDstWb)は、必ず引数で指定する(省略できない)
→ ThisWorkbook = このマクロが入っているブック / ActiveWorkbook = いまアクティブなブック
→ ファイルを開く部品の後は、ActiveWorkbook が、開いたファイルに切り替わる。
開いた直後に、ActiveWorkbook を変数へ控えて、その変数を渡す
・設定の誤りは、False ではなく、原因を示すエラーで止まる(Err.Raise)
- ブック(vSrcWb/vDstWb)が Nothing(vbObjectError + 1001:転記元/1002:転記先)
- シート名が、指定したブックに存在しない(vbObjectError + 1004:転記元/1005:転記先)
- 行番号・列番号が 1 未満(vbObjectError + 1007)、またはシートの上限を超えている(+1009)
・シートは、シート名の文字列で指定する(Worksheet は渡さない)
・False を返すのは、実行時にできなかった場合(保護されたシートへの代入など)
・代入されるのは「値のみ」(書式・数式・入力規則は代入されない)
数式のセルは、計算結果の値が代入される
・転記先に既にある値は、確認なしで上書きされる
・Offset / Find / Resize / With は禁止・なし(土台の部品。他の部品を参照しない。単独で使用可能) ・組み合わせ:f_OpenFile_ByPath → f_AssignCell (転記先のファイルを開いてから代入する場合。開いた直後に ActiveWorkbook を変数へ控える)
・特になし(マッピング表等は不要)
vSrcWb : 転記元のブック(Workbook)※必須(省略できない) vSrcSheetName : 転記元のシート名(String) vSrcRow : 転記元のセルの行番号(Long) vSrcCol : 転記元のセルの列番号(Long) vDstWb : 転記先のブック(Workbook)※必須(省略できない) vDstSheetName : 転記先のシート名(String) vDstRow : 転記先のセルの行番号(Long) vDstCol : 転記先のセルの列番号(Long)
Boolean : 代入できた場合は True、実行時にできなかった場合は False
Boolean
Function 部品_代入_セル( _
ByVal vSrcWb As Workbook, _
ByVal vSrcSheetName As String, _
ByVal vSrcRow As Long, _
ByVal vSrcCol As Long, _
ByVal vDstWb As Workbook, _
ByVal vDstSheetName As String, _
ByVal vDstRow As Long, _
ByVal vDstCol As Long) As Boolean
部品_代入_セル = f_AssignCell(vSrcWb, vSrcSheetName, vSrcRow, vSrcCol, _
vDstWb, vDstSheetName, vDstRow, vDstCol)
End Function
Function f_AssignCell( _
ByVal vSrcWb As Workbook, _
ByVal vSrcSheetName As String, _
ByVal vSrcRow As Long, _
ByVal vSrcCol As Long, _
ByVal vDstWb As Workbook, _
ByVal vDstSheetName As String, _
ByVal vDstRow As Long, _
ByVal vDstCol As Long) As Boolean
Dim wsSrc As Worksheet
Dim wsDst As Worksheet
f_AssignCell = False
If vSrcWb Is Nothing Then
Err.Raise vbObjectError + 1001, "f_AssignCell", _
"転記元のブック(vSrcWb)が設定されていません(Nothing)。"
End If
If vDstWb Is Nothing Then
Err.Raise vbObjectError + 1002, "f_AssignCell", _
"転記先のブック(vDstWb)が設定されていません(Nothing)。"
End If
On Error Resume Next
Set wsSrc = vSrcWb.Worksheets(vSrcSheetName)
Set wsDst = vDstWb.Worksheets(vDstSheetName)
On Error GoTo 0
If wsSrc Is Nothing Then
Err.Raise vbObjectError + 1004, "f_AssignCell", _
"転記元シート「" & vSrcSheetName & "」が、ブック「" & vSrcWb.Name & "」に存在しません。"
End If
If wsDst Is Nothing Then
Err.Raise vbObjectError + 1005, "f_AssignCell", _
"転記先シート「" & vDstSheetName & "」が、ブック「" & vDstWb.Name & "」に存在しません。"
End If
If vSrcRow < 1 Or vSrcCol < 1 Or vDstRow < 1 Or vDstCol < 1 Then
Err.Raise vbObjectError + 1007, "f_AssignCell", _
"行番号・列番号は 1 以上を指定してください" & _
"(転記元:" & vSrcRow & "行・" & vSrcCol & "列、転記先:" & vDstRow & "行・" & vDstCol & "列)。"
End If
If vSrcRow > wsSrc.Rows.Count Or vSrcCol > wsSrc.Columns.Count _
Or vDstRow > wsDst.Rows.Count Or vDstCol > wsDst.Columns.Count Then
Err.Raise vbObjectError + 1009, "f_AssignCell", _
"行番号・列番号が、シートの上限(" & wsSrc.Rows.Count & "行・" & wsSrc.Columns.Count & "列)を超えています" & _
"(転記元:" & vSrcRow & "行・" & vSrcCol & "列、転記先:" & vDstRow & "行・" & vDstCol & "列)。"
End If
On Error GoTo ErrHandler
wsDst.Cells(vDstRow, vDstCol).Value = wsSrc.Cells(vSrcRow, vSrcCol).Value
f_AssignCell = True
Exit Function
ErrHandler:
Debug.Print "f_AssignCell: " & Err.Number & " " & Err.Description
f_AssignCell = False
End Function★ ブック(ThisWorkbook か ActiveWorkbook か)を明示して、1つのセルを別のセルへ代入する
★ Assign one cell to another with the workbooks specified explicitly
<例1:マクロのファイル(ThisWorkbook)の中で、B6 から A3 へ>
'転記元:入力シートの B6(6行目・2列目)、転記先:帳票シートの A3(3行目・1列目)
If 部品_代入_セル(ThisWorkbook, "入力", 6, 2, ThisWorkbook, "帳票", 3, 1) = False Then
MsgBox "代入に失敗しました(シートの保護などを確認してください)"
End If
<例2:開いたファイルへ代入する>
Dim wbDst As Workbook
If 部品_ファイルを開く("E:\TEST\テンプレート.xlsx") = False Then
MsgBox "テンプレートを開けませんでした"
Exit Sub
End If
Set wbDst = ActiveWorkbook '開いた直後に控える
'転記元=マクロのファイル(ThisWorkbook)、転記先=開いたファイル(wbDst)
If 部品_代入_セル(ThisWorkbook, "入力", 6, 2, wbDst, "帳票", 3, 1) = False Then
MsgBox "代入に失敗しました"
End If
※ シート名が存在しない場合や、行番号・列番号の誤りは、False ではなく、原因を示すエラーで止まる
(起点の On Error で受けて、Err.Description を表示する) 1.0
2026-10-27