非プログラマーでもできる!業務の自動化

【Word VBA】テーブルセルの値を効率的にコピーする方法

当ページのリンクの一部に広告が含まれています。

課題・悩み「Wordのテーブルの編集時にExcelのように、ショートカットキーで上や左のセルの値を下のセルにコピペしたい」

メタディスクリプション「WordのVBAマクロを活用して、選択されたテーブルセルにその上のセルの値をコピーする具体的な方法を解説します。複数のテーブルや特定の列を操作する際の注意点も含めて、順を追ってわかりやすく説明します。」を解説

Wordの文書作成を効率化するための強力なツールの一つがVBAマクロです。

特に、テーブルを使ったデータ処理において、セルの値を自動的にコピーできる機能は非常に便利です。

本記事では、選択したテーブルセルにその上のセルの値をコピーするVBAマクロの具体的なコードとその解説をします。

実際の使用シーンを想定して、コードの変更ポイントや注意点も含めて詳しく説明します。

Excelでは、上や左のセルの値をコピーする機能とショートカットキーがありますが、Wordにはありません。

そこでWordのVBAの機能を用いて、【Wordの表の上または左の値のコピー】するマクロを作成し、クイックアクセスツールバーに登録することで、ショートカットキーで操作を行えるようにしました。

この記事では

【Wordの選択したテーブルセルにその上のセルの値をコピーするVBAマクロ】を図解で解説しています。

目次

Wordの選択したセルに上のセルの値をコピーするVBAマクロのコード

このVBAマクロは、Microsoft Wordで選択されているテーブルのセルに対して、その左のセルの値をコピー&ペーストするものです。

さらに、コピーしたテキストから改行を除去して新しいセルに設定します。

例えば、テーブル内で連続したデータ入力を効率化する場合などに有効です。

Sub CopyValueFromAboveCell()
    Dim sel As Selection
    Dim tbl As Table
    Dim cell As Cell
    Dim rowIndex As Long
    Dim colIndex As Long
    Dim copiedText As String

    ' 選択範囲を取得
    Set sel = Selection

    ' 選択されている範囲がテーブル内かを確認
    If sel.Information(wdWithInTable) Then
        ' テーブルを取得
        Set tbl = sel.Tables(1)
        
        ' 選択されているセルを取得
        Set cell = sel.Cells(1)
        rowIndex = cell.RowIndex
        colIndex = cell.ColumnIndex

        ' 上のセルが存在するか確認
        If rowIndex > 1 Then
            ' 上のセルの値を取得
            copiedText = tbl.Cell(rowIndex - 1, colIndex).Range.Text
            
            ' 改行を削除
            copiedText = Replace(copiedText, vbCr, "")
            copiedText = Replace(copiedText, vbLf, "")
            
            ' 選択されているセルに設定
            tbl.Cell(rowIndex, colIndex).Range.Text = copiedText
        Else
            MsgBox "一番上の行のセルです。上のセルは存在しません。", vbExclamation
        End If
    Else
        MsgBox "テーブルのセルを選択してください。", vbExclamation
    End If
End Sub

処理の詳細解説

以下の表で、各処理ごとにコードの概要と解説を示します。

選択範囲を取得

現在の選択範囲を取得します。

WordのVBAでは、Selectionオブジェクトを使って、ユーザーが選択している範囲を取得できます。

Set sel = Selection

選択範囲がテーブル内か確認

選択範囲がテーブル内にあるかどうかを確認します。

これは、選択されている範囲がテーブルのセルであることをチェックするために必要です。

If sel.Information(wdWithInTable) Then

テーブルを取得

選択されているテーブルを取得します。

ここでは、選択範囲に含まれる最初のテーブルを取得します。

Set tbl = sel.Tables(1)

選択されているセルを取得

選択されているセルの行番号と列番号を取得します。

これにより、セルの位置を特定します。

Set cell = sel.Cells(1) 
 rowIndex = cell.RowIndex 
 colIndex = cell.ColumnIndex

上のセルが存在するか確認

選択されているセルが一番上の行でないことを確認します。

もし一番上の行ならば、上のセルは存在しません。

If rowIndex > 1 Then

上のセルの値を取得

上のセルの値を文字列として取得し、変数 copiedText に格納します。

copiedText = tbl.Cell(rowIndex - 1, colIndex).Range.Text

改行を削除

取得した文字列内の改行文字(vbCr と vbLf)をすべて削除します。

copiedText = Replace(copiedText, vbCr, "") 
 copiedText = Replace(copiedText, vbLf, "")

値をセルに設定

修正後の文字列を選択されたセルに設定します。

tbl.Cell(rowIndex, colIndex).Range.Text = copiedText

エラーメッセージの表示

選択されているセルが一番上の行の場合や、テーブルのセルが選択されていない場合にエラーメッセージを表示します。

MsgBox "一番上の行のセルです。上のセルは存在しません。", vbExclamation 
 MsgBox "テー

注意点

データ量

データが大量にある場合、処理に時間がかかることがあります。

元に戻せない操作

VBAマクロで実行した操作は元に戻せませんので、実行前に文書を保存することをお勧めします。

必要な環境設定

マクロの有効化

Wordの設定でマクロを有効にする必要があります。

1. Wordを開き、「ファイル」メニューをクリックします。

2. 「オプション」を選択し、「セキュリティセンター」をクリックします。

3. 「セキュリティセンターの設定」をクリックし、「マクロの設定」で「すべてのマクロを有効にする」を選択します。

4. 「OK」をクリックして設定を保存します。

コードのカスタマイズ箇所

以下の表に、自分の環境で利用する場合に変更する必要がある箇所とその解説を示します。

特定のテーブルを操作

複数のテーブルがある場合、操作対象のテーブルを明示的に指定します。

Tables(1)は文書内の最初のテーブルを指します。

必要に応じて、特定のテーブル番号に変更します。

Set tbl = ActiveDocument.Tables(1)

特定の列を操作

特定の列のデータのみを操作したい場合、列インデックスを変更します。

ここでは列インデックスを2に設定する例を示しています。

colIndex = 2

Wordの選択したセルに左のセルの値をコピーするVBAマクロのコード

Option Explicit

Sub ReplaceCellValueWithAbove()
    Dim sel As Selection
    Dim tbl As table
    Dim cell As cell
    Dim rowIndex As Long
    Dim colIndex As Long
    Dim copiedText As String

    ' 選択範囲を取得
    Set sel = Selection

    ' 選択されている範囲がテーブル内かを確認
    If sel.Information(wdWithInTable) Then
        ' テーブルを取得
        Set tbl = sel.Tables(1)
       
        ' 選択されているセルを取得
        Set cell = sel.Cells(1)
        rowIndex = cell.rowIndex
        colIndex = cell.ColumnIndex

        ' 上のセルが存在するか確認
        If rowIndex > 1 Then
            ' 上のセルの値を取得
            copiedText = tbl.cell(rowIndex - 1, colIndex).Range.Text
           
            ' 文末の改行のみを削除
            copiedText = Left(copiedText, Len(copiedText) - 2)
           
            ' 選択されているセルに設定
            tbl.cell(rowIndex, colIndex).Range.Text = copiedText
        Else
            MsgBox "一番上の行のセルです。上のセルは存在しません。", vbExclamation
        End If
    Else
        MsgBox "テーブルのセルを選択してください。", vbExclamation
    End If
End Sub

処理ごとの解説

選択範囲を取得

現在の選択範囲を取得します。

WordのVBAでは、Selectionオブジェクトを使って、ユーザーが選択している範囲を取得できます。

Set sel = Selection

選択範囲がテーブル内か確認

選択範囲がテーブル内にあるかどうかを確認します。

これは、選択されている範囲がテーブルのセルであることをチェックするために必要です。

If sel.Information(wdWithInTable) Then

テーブルを取得

選択されているテーブルを取得します。

ここでは、選択範囲に含まれる最初のテーブルを取得します。

Set tbl = sel.Tables(1)

選択されているセルを取得

選択されているセルの行番号と列番号を取得します。

これにより、セルの位置を特定します。

Set cell = sel.Cells(1) 
 rowIndex = cell.RowIndex 
 colIndex = cell.ColumnIndex

左のセルが存在するか確認

選択されているセルが一番左の列でないことを確認します。

もし一番左の列ならば、左のセルは存在しません。

If colIndex > 1 Then

左のセルの値を取得

左のセルの値を文字列として取得し、変数 copiedText に格納します。

copiedText = tbl.Cell(rowIndex, colIndex - 1).Range.Text

改行を削除

取得した文字列内の改行文字(vbCr と vbLf)をすべて削除します。

copiedText = Replace(copiedText, vbCr, "") 
 copiedText = Replace(copiedText, vbLf, "")

値をセルに設定

修正後の文字列を選択されたセルに設定します。

tbl.Cell(rowIndex, colIndex).Range.Text = copiedText

エラーメッセージの表示

選択されているセルが一番左の列の場合や、テーブルのセルが選択されていない場合にエラーメッセージを表示します。

MsgBox "一番左の列のセルです。左のセルは存在しません。", vbExclamation 
 MsgBox "テーブルのセルを選択してください。", vbExclamation

注意点

データ量

データが大量にある場合、処理に時間がかかることがあります。

元に戻せない操作

VBAマクロで実行した操作は元に戻せませんので、実行前に文書を保存することをお勧めします。

必要な環境設定

マクロの有効化

Wordの設定でマクロを有効にする必要があります。

1. Wordを開き、「ファイル」メニューをクリックします。

2. 「オプション」を選択し、「セキュリティセンター」をクリックします。

3. 「セキュリティセンターの設定」をクリックし、「マクロの設定」で「すべてのマクロを有効にする」を選択します。

4. 「OK」をクリックして設定を保存します。

コードのカスタマイズ箇所

特定のテーブルを操作

複数のテーブルがある場合、操作対象のテーブルを明示的に指定します。

Tables(1)は文書内の最初のテーブルを指します。

必要に応じて、特定のテーブル番号に変更します。

Set tbl = ActiveDocument.Tables(1)

特定の列を操作

特定の列のデータのみを操作したい場合、列インデックスを変更します。

ここでは列インデックスを2に設定する例を示しています。

colIndex = 2

まとめ

このVBAマクロを使用することで、Wordのテーブル内でセルの値を効率的にコピーすることができます。特定のテーブルや列を指定する場合の変更点や、処理の注意点についても解説しました。Wordの文書作成をさらに効率化するために、ぜひこのマクロを活用してみてください。

Microsoft365の作業を自動化・効率化

Microsoft365の作業を自動化・効率化する便利なVBAマクロのコードの一覧です。

コピペでOK!Word VBAのコード一覧

Wordの作業を自動化・効率化する便利なVBAマクロの一覧です。

Wordの表の操作

コピペでOK!Outlook VBAのコード一覧

Outlook VBAの基本

Outlookメール作成

Outlookの操作

Outlook メール管理

Outlook 予定表の操作

Outlook VBA おすすめ参考書籍

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次