2025/11/04
【Excel】各フォルダへのハイパーリンクを瞬時に作成

【Excel】各フォルダへのハイパーリンクを瞬時に作成

表の各データに対応したフォルダへのハイパーリンクを作成する際、1つ1つ、「ハイパーリンクの挿入」画面から割り当てるのは大変です。

各データに対応したフォルダの位置に、以下のような法則性がある場合は、瞬時にハイパーリンクを作成する方法があります。

『すべてのフォルダは同じ配下に配置されており、フォルダ名は「No_氏名」の構成になっている

ということで今回は、各データに対応したフォルダの位置に法則性がある場合、その各フォルダを表示するハイパーリンクを瞬時に作成する方法について紹介していきます。

ExcelVBAレベル確認

セルの値を活用してハイパーリンクを作成する

各データに対応したフォルダを作成する場合は、HYPERLINK関数が便利です。
この関数なら、セルの値を活用したハイパーリンクを作成することができます。

まずは、先頭のデータに対応したフォルダのパスを確認します。
こちらの場合は、「A:\生徒管理\1_渡辺 紬」になります。

次に、対象のフォルダの上で右クリックし、パスをコピーします。
OSのバージョンによっては、Shiftキーを押しながら右クリックする必要があります。

次に、以下の数式を先頭行に入力します。

=HYPERLINK("A:\生徒管理\1_渡辺 紬","開く")
// フォルダのパスの部分(赤)は、コピーしたパスを貼り付ける

これで、先頭のデータに対応したフォルダを開くハイパーリンクを作成することができます。

他のデータに関しては、先ほどのフォルダのパスの一部を変更する必要があります。
こちらの場合は、「No_氏名」がフォルダの名前になるため、以下のように、セルの値を参照した数式に書き換えます。

=HYPERLINK("A:\生徒管理\"&B3&"_"&C3,"開く")
// 「&」で「No_氏名」となるように繋げる

最後に、入力した数式を表の末尾までコピーするだけで完成です。

これで、該当行のハイパーリンクをクリックするだけで、対象のフォルダを開くことができます。

※以下のような警告が表示される場合は、「はい」を選択することで、フォルダを表示できます。

2025/11/01
【業務】予定も自動で切り替わる万年カレンダー

【業務】予定も自動で切り替わる万年カレンダー

#DATE #VLOOKUP #HYPERLINK #MATCH #IF #カレンダー #予定表 #スケジュール

YouTubeで開く

年月を変更するだけで、表示が自動で切り替わる万年カレンダーの作成方法について解説しています。
各月に予定を入力することもできます。

00:00 挨拶
00:10 完成イメージ
01:18 準備
01:51 作成(ウィンドウ枠の固定)
02:23 作成(1週目の表示)
06:03 作成(2~4週目の表示)
07:04 作成(5週目以降の表示)
10:49 作成(予定を抽出)
14:59 作成(予定をリンクにする)
19:47 作成(レイアウトの調整)
21:27 完成
23:27 プレゼントについて

▼準備ファイル▼

2025/10/31
【ExcelVBA】セルの変更履歴表を自動作成

【ExcelVBA】セルの変更履歴表を自動作成

以下の左側のシートに用意された表の値を変更すると、「変更履歴」シートの変更履歴表に変更内容が自動で記録されます。

※こちらで開発したファイルは、記事の最後にて配布しています。

このような、予め指定した範囲内のセルの値を変更した際に、変更履歴表に自動で記録する仕組みの実現方法について解説していきます。


1. 開発準備

今回は、予め指定した範囲内のセルの値を変更すると同時に、変更履歴表に自動で記録する仕組みを作っていきます。

そのように、該当するシートの特定のセルを編集すると同時に何かしらの処理を実行するには、「シートモジュール」「イベントプロシージャ」を活用します。
シートモジュールは、該当するシートのタブ上で右クリックし、[コードの表示]を選択することで表示できます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、該当するシートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、該当するシートのセルを編集すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャは、該当するシート上のいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、セルを編集すると同時に処理が実行されるものになります。
そのため、右上のリストから「Change」を選択します。

表示された「Worksheet_Change」というプロシージャを活用します。
「Worksheet_SelectionChange」というプロシージャに関しても、今回は使用するため残しておきます。


2. コードの記述

以下のコードを記述します。

Dim oldValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.CountLarge = 1 And _
        Target.Row >= 2 And _
        Target.Column <= 3 Then
        
        With Worksheets("変更履歴")
            .Rows(2).Insert CopyOrigin:=xlFormatFromRightOrBelow
            .Range("A2").Value = Now
            .Range("B2").Value = Target.Address(False, False)
            .Range("C2").Value = oldValue
            .Range("D2").Value = Target.Value
        End With
        
    End If
    
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.CountLarge = 1 Then
        oldValue = Target.Value
    End If
    
End Sub

では、コードについて解説していきます。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    '省略
    
End Sub

「Worksheet_Change」というプロシージャの引数の「Target」に、編集されたセルの情報が渡されます。
そのセルの情報を用いて、「変更履歴」シートに記録していくのですが、引数の「Target」から取得できる情報は、編集されたセルの情報のみのため、変更前のセルの値を取得することができません。
そのため、変更前のセルの情報を次の処理で、予め取得して保持しておく必要があります。

Dim oldValue As Variant

'省略

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Target.CountLarge = 1 Then
        oldValue = Target.Value
    End If
    
End Sub

「Worksheet_SelectionChange」というプロシージャの引数の「Target」に、選択されたセルの情報が渡されます。
セルの値を変更する前にセルを選択するという動作があります。
そのため、「Worksheet_SelectionChange」のプロシージャが実行された時点では、変更前のセルの情報(Target)を取得することができます。
そのセルの情報(Target)から、変数「oldValue」に変更前のセルの値を格納しています。

変数「oldValue」は、「Worksheet_SelectionChange」のプロシージャだけでなく、「Worksheet_Change」のプロシージャからでも参照できるようにする必要があります。
そのため、プロシージャの外に変数を宣言しています。
セルの値を格納する用の変数のため、数値や日付など色んな型を格納できるようにVariant型で宣言しています。

プロシージャの外に宣言した変数(モジュールレベルの変数)に格納した値は、プロシージャの処理が終了した後でも保持されます。
そのため、常に変更前のセルの値を保持することができます。

今回の場合は、単体のセルが変更されたときのみに変更履歴を記録するようにしているため、選択されているセルが1つであることを「If Target.CountLarge = 1 Then」で確認しています。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.CountLarge = 1 And _
        Target.Row >= 2 And _
        Target.Column <= 3 Then
        
        '省略
        
    End If
    
End Sub

「Worksheet_Change」のプロシージャでは、変更履歴を記録する処理を行います。
そのため、変更履歴を記録する対象の範囲内が変更されたかどうかを確認しています。

今回の場合は、変更されたセルが1つであり、行番号が2以上、列番号が3以下であることを前提としています。
これは、「商品管理」シートに用意された表のデータの範囲になります。

この条件を満たしたときに、Ifの中の処理を実行します。

        With Worksheets("変更履歴")
            .Rows(2).Insert CopyOrigin:=xlFormatFromRightOrBelow
            .Range("A2").Value = Now
            .Range("B2").Value = Target.Address(False, False)
            .Range("C2").Value = oldValue
            .Range("D2").Value = Target.Value
        End With

先ほどのIfの中の処理です。
こちらは、「変更履歴」シートの変更履歴表の先頭行に、変更履歴を記録する内容になっています。
そのため、「With」で「変更履歴」シートを指定して囲み、「With」から「End With」までの範囲内では、「変更履歴」シートの情報を省略して記述できるようにしています。

「.Rows(2).Insert CopyOrigin:=xlFormatFromRightOrBelow」で、「変更履歴」シートの2行目に行を挿入し、下の行(3行目)の書式を引き継いでいます。
そして、挿入した2行目の個々のセルに、以下の値を入力しています。

・セルA2:Now // 現在日時
・セルB2:Target.Address(False, False) // 更新されたセルの相対参照のアドレス
・セルC2:oldValue // 変更前のセルの値
・セルD2:Target.Value // 変更後のセルの値

ExcelVBAレベル確認

3. 完成

以上の内容で実現できます。
予め指定した範囲内のセルの値を変更すると、「変更履歴」シートの変更履歴表に変更内容が自動で記録されます。
また、最後に変更した内容が、変更履歴表の先頭に記録されるようになっています。

▼サンプルファイル▼

2025/10/28
【Excel】条件付き書式で結合した見た目にする方法

【Excel】条件付き書式で結合した見た目にする方法

以下の予定表のように、連続した予定を結合した見た目にし、背景色を色付けする「条件付き書式」の設定方法について解説していきます。


条件付き書式に設定する条件式

こちらでは、以下の表をもとに作成していきます。

まずは、どのような条件を満たしたときに、以下の書式を反映させる必要があるのか考えていきます。

① セルに色付けする
② セルの値を非表示にする
③ セルの罫線を非表示にする

①のセルの色付けに関しては、B列とC列の2列に適用する必要があります。
この該当行の2列を色付けするかどうかは、C列に値が入力されているかどうかで判断できます。
例えば、3行目の場合、以下のような条件式になります。

=$C3<>""
// C列で固定のため、Cの手前に「$」を指定

次、②のセルの値を非表示にすることに関しては、C列のみに適用する必要があります。
C列の対象のセルの値を非表示にするかどうかは、1つ前の値と同じかどうかで判断できます。
例えば、3行目のC列の場合、以下のような条件式になります。

=C3=C2
// C列のみのため、Cを「$」で固定しなくてもよい

さらに、セルが空の場合は、非表示にする必要はないので、「空でない場合」という条件を加えます。
例えば、3行目のC列の場合、以下のような条件式になります。

=AND(C3<>"",C3=C2)
// ANDで2つの条件式を指定

最後、③のセルの罫線を非表示にすることに関しては、②と同様にC列のみに適用する必要があります。
また、条件式に関しても②と同様で、②の条件を満たしたときに、そのセルの上の罫線を非表示にします。


条件付き書式の設定

では、以下の条件式を条件付き書式で設定していきます。

① セルに色付けする(B列とC列):=$C3<>””
② セルの値を非表示にする(C列):=AND(C3<>””,C3=C2)
③ セルの罫線を非表示にする(C列):=AND(C3<>””,C3=C2)

まずは、①のセルに色付けする対象の範囲(見出しを除いた範囲全体)を選択します。
この時、選択基準のセル(アクティブセル)は、以下のように、3行目になるようにします。

次に、[ホーム]タブから[条件付き書式]の[新しいルール]を選択し、以下のように設定します。

入力する数式は、アクティブセルに対しての数式になります。
上記では、セルB3がアクティブセルのため、セルB3に対しての以下の条件式を入力しています。

=$C3<>""

他の選択範囲には相対参照(「$」で固定された列または行を除く)で反映されます。
そのため、上記の設定内容で確定することで、以下のように予定のある行を色付けすることができます。

次は、②のセルの値を非表示にする対象の範囲(見出しを除いたC列全体)を選択します。
この時、選択基準のセル(アクティブセル)は、以下のように、セルC3になるようにします。

次に、[ホーム]タブから[条件付き書式]の[新しいルール]を選択し、以下のように設定します。

入力する数式は、アクティブセルに対しての数式になります。
上記では、セルC3がアクティブセルのため、セルC3に対しての以下の条件式を入力しています。

=AND(C3<>"",C3=C2)

また、③のセルの罫線を非表示する範囲と条件式に関しても、②と同様になるので、「セルの書式設定」の画面で「セルの罫線を非表示にする設定」を行います。
条件を満たしたときに非表示にする罫線は、セルの上の罫線になるため、以下のように設定します。

上の罫線を2回クリックすることで、非表示にできます。

上記の設定内容で確定することで完成です。
以下のように、連続した予定を結合した見た目にし、背景色を色付けすることができます。

2025/10/25
【2-数式25】HYPERLINK関数の活用(4選)

【2-数式25】HYPERLINK関数の活用(4選)

#HYPERLINK #MATCH #INDEX #COUNTA #CONCAT #VLOOKUP #XLOOKUP #LET #INDIRECT #目次 #メール

YouTubeで開く

HYPERLINK関数の4通りの便利な活用方法について解説しています。

00:00 挨拶
00:29 ①各シートへ遷移(シートの目次)
02:37 ②特定のシートの末尾へ遷移
05:46 ③VLOOKUP関数の抽出元へ遷移
09:18 ④メール送信
12:13 まとめ
12:32 プレゼントについて

>TRIM参照とは

2025/10/24
【ExcelVBA】予定表を1週間単位で表示

【ExcelVBA】予定表を1週間単位で表示

以下の予定表は、セルC2に配置されたスピンボタンを押すことで、1週間単位で表示する日付を切り替えることができます。

※こちらで実現したファイルは、記事の最後にて配布しています。

こちらは、実際の値が置き換わっている訳ではなく、対象の週以外の列が非表示になっています。

そのため、表示されているセルに直接値を入力しても問題ございません。

今回は、上記のように、スピンボタンで表示する列を一定間隔で切り替える仕組みを実現していきます。


1. スピンボタンの用意

今回は、以下のすべての列が表示されている予定表から作成していきます。

まずは、スピンボタンを用意します。
スピンボタンは、[開発]タブの中の[挿入]から[スピンボタン]を選択することで、好みの位置に配置することができます。

スピンボタンの用意ができたら、スピンボタンの上で右クリックし、[コントロールの書式設定]を選択します。

[コントロールの書式設定]にて、以下のように設定します。

スピンボタンで指定した数値が、予定表の表示する週になります。
[最大値]を50にすると、最大50週目までしか表示できなくなります。
そのため、必要に応じて[最大値]は修正してください。

[リンクするセル]は、スピンボタンの現在値を表示させるセルになります。
こちらでは、スピンボタンの隣のセルB2を指定しています。


2. 開発準備

次は、スピンボタンをクリックすると同時に、予定表の週の表示を切り替える仕組みを実現します。
そのためには、VBAを活用します。

スピンボタンに連動する機能を開発する必要があるため、スピンボタンの上で右クリックし、[マクロの登録]を選択します。

[マクロの登録]の画面にて、開発する機能の名前を入力し、[新規作成]を選択します。
こちらでは、「表示切替」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。


3. コードの記述(列の表示切り替え)

以下のコードを記述します。

Sub 表示切替()

    Dim no As Long
    no = Range("B2").Value
    
    Columns("D:MY").Hidden = True
    Range( _
        Columns(no * 7 - 3), _
        Columns(no * 7 + 3)).Hidden = False
        
End Sub

では、コードについて解説していきます。

    Dim no As Long
    no = Range("B2").Value

「no」という整数(Long)専用の変数(入れ物)を用意し、その「no」にセルB2の値(表示する週を表す数値)を格納しています。

    Columns("D:MY").Hidden = True

予定表の日付の列全体を非表示にしています。

    Range( _
        Columns(no * 7 - 3), _
        Columns(no * 7 + 3)).Hidden = False

「no」の値から対象の週を指定し、対象の週の列を表示しています。

「no」が1のときは、1週目である4列目から10列目を表示し、
「no」が2のときは、2週目である11列目から17列目を表示します。
この関係性を「no」を用いた数式で表すと、「no * 7 – 3」列目から「no * 7 + 3」列目になります。

そのため、「Range」で「Columns(no * 7 – 3)」から「Columns(no * 7 + 3)」と対象の列の範囲を指定しています。

ExcelVBAレベル確認

4. 完成

以上の手順で完成です。
スピンボタンを押すことで、対象の週のみが表示されるようになります。

▼サンプルファイル▼

2025/10/21
【Excel】重複した値の先頭以外をマーク

【Excel】重複した値の先頭以外をマーク

以下のように、ある一覧の重複した値の先頭以外に「不要」と表示させる方法について解説していきます。


1. 重複の有無を確認する

まずは、重複しているかどうかを確認していきます。
今回は、COUNTIF関数を活用して、対象の名前までの範囲に、対象の名前が何件存在しているのかを表示させることで、重複しているかどうかを確認します。
そのため、一覧表の隣の列の先頭に、以下の数式を入力します。

=COUNTIF($B$3:B3,B3)
// 集計対象の範囲:$B$3:B3 
// (下の行にコピーしたときに徐々に範囲が拡張するように、先頭のセルを「$」で固定する)
// 集計対象の値:B3

表の末尾までコピーすると、以下のようになります。

表示された数値が2以上の場合、2回目以降の登場という意味になるため、先頭以外の重複した値と判断できます。
要するに、2以上の値が「不要」と表示させる対象になります。


2. 重複した値の先頭以外に「不要」と表示させる

次は、1は非表示に、2以上に「不要」と表示させます。
そのためには、以下のようにIF関数を加えます。

=IF(COUNTIF($B$3:B3,B3)>1,"不要","")
// 条件:COUNTIF($B$3:B3,B3)>1
// 条件を満たしたときに表示する値:"不要"
// 条件を満たしていないときに表示する値:""(空)

表の末尾までコピーすると、以下のようになります。

これで完成です。

2025/10/18
【業務】全項目の値を表示する独自フォーム

【業務】全項目の値を表示する独自フォーム

#ユーザーフォーム #UserForm_Initialize #Unload #With #For #If #ActiveCell #ActiveSheet

YouTubeで開く

項目数の多い表で便利な「全項目の値を一括表示する独自のフォーム」の作成方法について解説しています。
フォーム上の値をダブルクリックすることで、対象のセルを瞬時に選択することもできます。

00:00 挨拶
00:16 完成イメージ
01:08 準備
01:31 作成(フォームの準備)
03:17 作成(フォームの初期化)
10:48 作成(該当セルの選択)
13:15 作成(フォームの立ち上げ)
15:30 作成(クイックアクセスツールバー)
16:56 完成
18:36 プログラムの全体
21:18 プレゼントについて

▼準備ファイル▼

2025/10/17
【ExcelVBA】複数フォルダを一括作成

【ExcelVBA】複数フォルダを一括作成

シート上の表の内容をもとに、データ数分のフォルダを一括で作成する仕組みを実現していきます。

こちらでは、以下のように、生徒一覧表の内容をもとに「No_氏名」という名前のフォルダを一括で作成する仕組みを実現していきます。

※こちらで実現したファイルは、記事の最後にて配布しています。

ExcelVBAレベル確認

1. 開発準備

まず初めに、[開発]タブを選択し、[マクロ]を選択します。

表示された以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「GenerateFolders」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。


2. コードの記述(フォルダ一括作成)

以下のコードを記述します。

Sub GenerateFolders()
    
    Dim i As Long
    For i = 3 To 32
        '保存先のフォルダのパスを貼り付けて「\」を追加
        MkDir "A:\出力\" & _
            Cells(i, "B").Value & "_" & _
            Cells(i, "C").Value
    Next i
    
End Sub

では、コードについて解説していきます。

    Dim i As Long
    For i = 3 To 32
        '省略
    Next i

表の1行1行を繰り返す際に使用する変数(i)を用意し、「For」で変数(i)を3~32までを繰り返して実行します。

3~32という数値は、フォルダを作成する対象のデータが入力されている行の範囲になります。

        '保存先のフォルダのパスを貼り付けて「\」を追加
        MkDir "A:\出力\" & _
            Cells(i, "B").Value & "_" & _
            Cells(i, "C").Value

「MkDir」の後に作成したいフォルダのパスを指定することで、フォルダを作成できます。

今回作成するフォルダの位置は、「Aドライブの中の出力フォルダの中」になるので、先頭に「”A:\出力\”」とパスを指定しています。

その後には、作成するフォルダの名前をセルの値を用いて指定しています。
「Cells(i, “B”).Value」で繰り返し処理で使用している変数(i)の値の行にあるB列の値(No)を取得し、「& “_”」で「_」を加え、「& Cells(i, “C”).Value」で変数(i)の値の行にあるC列の値(氏名)を加えています。
※「 _」は1つのコードを改行するときに指定します。


3. 完成

以上の手順で完成です。
作成したコードを指定して実行することで、瞬時にフォルダが作成されます。


4. 補足(Noを「0埋め2桁表記」にする)

作成するフォルダ名の先頭のNoを「0埋めの2桁表記」にしたい場合は、以下のように、「Format」を活用することで実現できます。

        MkDir "A:\出力\" & _
            Format(Cells(i, "B").Value, "00") & "_" & _
            Cells(i, "C").Value

「Format」についての詳しい解説は省略しますが、ワークシート上の「TEXT関数」とほぼ同じようなものです。

上記の内容に書き換えて実行すると、以下のように、Noを「0埋め2桁表記」で作成できます。

▼サンプルファイル▼

2025/10/14
【Excel】チェックしたデータを別シートに抽出

【Excel】チェックしたデータを別シートに抽出

以下のように、A列に用意されているチェックボックスにチェックするだけで、チェックしたデータが別シートに抽出される仕組みの実現方法について解説していきます。

※こちらで実現したファイルは、記事の最後にて配布しています。


1. チェックボックスの用意

まずは、抽出元シートのA列にチェックボックスを用意します。

A列のチェックボックスを作成したい範囲を選択し、[挿入]タブの中の[チェックボックス]を選択します。

これだけで、チェックボックスを作成することができます。

[データ]タブの中に[チェックボックス]という項目がない場合は、以下の記事を参考にして、チェックボックスを作成してください。
>チェックボックスの作成方法

チェックボックスが配置されているセルには、TRUE/FALSEという値が入力されています。

ExcelVBAレベル確認

2. チェックしたデータの抽出

次は、チェックしたデータを抽出します。

指定した範囲のデータから指定した条件を満たしたデータを抽出するには、FILTER関数が便利です。
抽出先のシートに、以下のような数式を入力します。
※抽出元の表は、「商品一覧」シートに用意しています。

=FILTER(商品一覧!B2:E1000,商品一覧!A2:A1000=TRUE,"")
// 商品一覧!B2:E1000:抽出対象の表の範囲
// 商品一覧!A2:A1000=TRUE:抽出条件(A2:A1000の中でTRUEのデータを抽出)

ちなみに、抽出元の表のA列に、TRUE/FALSE以外(空白セルを除く)の値が入力されていない場合は、以下のように「=TRUE」を省略することもできます。

=FILTER(商品一覧!B2:E1000,商品一覧!A2:A1000,"")

3. 完成

以上の手順で完成です。
抽出元の表のA列をクリックし、チェックボックスにチェックすることで、チェックしたデータのみが別シートに抽出されます。

抽出される順番は、チェックした順番ではなく、抽出元の表の先頭からの順番で抽出されます。

▼サンプルファイル▼

※Excelのバージョンが新しいチェックボックスなどに対応していない場合は、正しく表示されません。

2025/10/11
【2-数式24】数式を壊させない対策(4選)

【2-数式24】数式を壊させない対策(4選)

#シートの保護 #テーブル #条件付き書式 #データの入力規則 #ISFORMULA

YouTubeで開く

作成した数式を、他の方に壊されないようにする対策方法について4通りで解説しています。
それぞれのメリット、デメリットについても解説しているため、ご自身の環境に合った設定をご確認ください。

00:00 挨拶
00:18 ①シートの保護
04:31 ②シートの保護×テーブル
08:42 ③データの入力規則
11:56 ④条件付き書式
13:53 まとめ
14:56 プレゼントについて

2025/10/10
【ExcelVBA】双方向の入力を実現する方法

【ExcelVBA】双方向の入力を実現する方法

以下の書類フォーマットは、書類の中に直接入力することも、書類の下の表に入力して書類の中に反映させることもできます。

※こちらで開発したファイルは、記事の最後にて配布しています。

このような、双方向からの入力を実現する方法について解説していきます。


1. 開発準備

今回は、予め指定したセルに値を入力すると同時に、そのセルに紐づいた別のセルにも同じ値を入力する仕組みを作っていきます。

そのように、該当するシートの特定のセルを編集すると同時に何かしらの処理を実行するには、「シートモジュール」「イベントプロシージャ」を活用します。
シートモジュールは、該当するシートのタブ上で右クリックし、[コードの表示]を選択することで表示することができます。

選択すると、以下のエディタ画面(VBE)が表示されます。
また、該当するシートのシートモジュールが表示された状態になります。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

次に、該当するシートのセルを編集すると同時に処理が実行される特殊なプロシージャ(イベントプロシージャ)を用意する必要があります。
そのためには、シートモジュールの左上のリストから「Worksheet」を選択します。

「Worksheet」を選択すると、自動で「Worksheet_SelectionChange」というプロシージャが表示されます。
このプロシージャは、該当するシート上のいずれかのセルが選択されると同時に処理が実行されるイベントプロシージャになります。

ただ、今回使用するイベントプロシージャは、セルを編集すると同時に処理が実行されるものになります。
そのため、右上のリストから「Change」を選択します。

表示された「Worksheet_Change」というプロシージャを活用します。
「Worksheet_SelectionChange」というプロシージャに関しては削除して問題ないです。


2. コードの記述

以下のコードを記述します。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Application.EnableEvents = False
    
    Select Case Target.Address(False, False)
        Case "F3"
            Range("D14").Value = Target.Value
        Case "F4"
            Range("D15").Value = Target.Value
        Case "B4"
            Range("D16").Value = Target.Value
        Case "D6"
            Range("D17").Value = Target.Value
        Case "C7"
            Range("D18").Value = Target.Value
        Case "D14"
            Range("F3").Value = Target.Value
        Case  "D15"
            Range("F4").Value = Target.Value
        Case "D16"
            Range("B4").Value = Target.Value
        Case "D17"
            Range("D6").Value = Target.Value
        Case "D18"
            Range("C7").Value = Target.Value
    End Select
    
    Application.EnableEvents = True
    
End Sub

では、コードについて解説していきます。

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Application.EnableEvents = False
    
    '省略
    
    Application.EnableEvents = True
    
End Sub

「Worksheet_Change」というプロシージャの引数の「Target」に、編集されたセルの情報が渡されます。
そのセルの情報を用いて、双方向での入力を実現するのですが、処理の中で別のセルの値を編集してしまうと、再度「Worksheet_Change」が実行されてしまい無限ループになってしまいます。
そのため、処理の前後に、イベントを無効化する処理(Application.EnableEvents = False ~ Application.EnableEvents = True)を記述しています。

    Select Case Target.Address(False, False)
        Case "F3"
            Range("D14").Value = Target.Value
        Case "F4"
            Range("D15").Value = Target.Value
        Case "B4"
            Range("D16").Value = Target.Value
        Case "D6"
            Range("D17").Value = Target.Value
        Case "C7"
            Range("D18").Value = Target.Value
        Case "D14"
            Range("F3").Value = Target.Value
        Case  "D15"
            Range("F4").Value = Target.Value
        Case "D16"
            Range("B4").Value = Target.Value
        Case "D17"
            Range("D6").Value = Target.Value
        Case "D18"
            Range("C7").Value = Target.Value
    End Select

編集されたセルのアドレスから、双方向の入力をする対象のセルかどうかを判断し、対象のセルの場合は、紐づいているセルにも同じ値を入力しています。

「Target.Address(False, False)」で編集されたセルのアドレスを相対参照の形式で取得し、そのアドレスが「F3」の場合は、セルD14にも同じ値を入力、「F4」の場合は、セルD15にも同じ値を入力と、必要な組み合わせ分記述しています。


3. 完成

以上の内容で実現できます。
予め指定したセルに関しては、値を入力すると同時に、紐づいたセルにも同じ値が入力されます。

▼サンプルファイル▼

今回は、1つ1つのセルごとに割り当てましたが、表などで双方向の入力を実現する場合は、以下のように記述した方がよいです。

(例)以下の表①に入力したら表②にも反映、表②に入力したら表①にも反映させる

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Application.EnableEvents = False
    
    If Target.Row >= 3 And Target.Row <= 10 Then
        
        If Target.Column >= 2 And Target.Column <= 3 Then
            Cells(Target.Row, Target.Column + 3).Value = Target.Value
        End If
        
        If Target.Column >= 5 And Target.Column <= 6 Then
            Cells(Target.Row, Target.Column - 3).Value = Target.Value
        End If
        
    End If

    Application.EnableEvents = True
    
End Sub

こちらのコードについての詳しい解説は省略します。