日本語名

部品_代入_セル

英語名

AssignCell

URL

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 を表示する)

BASファイル(ダウンロード)

AssignCell.bas

バージョン

1.0

更新日

2026-10-27