
複数のセルのデータをまとめるスプレッドシートを作成しようとしています。
基本的に、データを入力するときに数式を削除せずに、ユーザーが入力した同じ情報をセルA1
に反映させたいSheet1
のです。Sheet2
ユーザーがこれらのセルにデータを入力できるようにする必要がありますが、=Sheet2!A1
または を使用する=Sheet1!A1
と循環参照が作成され、ユーザーが数式を削除できる状態になります。
これを解決する方法を誰かお勧めいただけますか?
答え1
数式を含むセルに、数式を保持したままデータを入力することはできません。
解決策としては、ユーザーに別のセルにデータを入力してもらい、A1
両方のシートでそのセルを参照してもらうことです。
答え2
マクロなしでは実行できません。次のコードが動作するはずです:
Private Sub Worksheet_Change(ByVal Target As Range)
therow = 1
thecolumn = 1
Dim wks As Worksheet
cellrow = Target.Row
cellcolumn = Target.Column
If (cellrow = therow And cellcolumn = thecolumn) Then
Set wks = ThisWorkbook.Worksheets("Sheet2")
wks.Cells(cellrow, cellcolumn) = Target.Value
End If
End Sub
ALT+でマクロを開きF11、ダブルクリックシート1を左側に入力し、右側にコードを貼り付けます。このコードは で実行されるSheet 1
ため、 の変更が にコピーされSheet1 A1
ますSheet2 A1
。
ワークシートに変更があるたびに、このマクロが実行されます。変更されたセルが行1列1(セルA1)にあるかどうかを確認し、同じセルの値を次の行にコピーします。シート2。
変更内容を確認したい場合はシート2にシート1また、次のようになります。
- ダブルクリックシート2左側にあります。
- 右側にコードを貼り付けます。
Set wks = ThisWorkbook.Worksheets("Sheet2")
新しい宛先を示すように行を変更しますSet wks = ThisWorkbook.Worksheets("Sheet1")
。
現在、このマクロは変数を使用しています行そしてコラム値を他のワークシートにコピーするかどうかを決定します。最初は行の1に設定されておりtherow=1
、thecolumn=1
セルに興味があることを意味しますA1さらに、変更されたセルが行内のこれらの値と一致するかどうかを確認しますIf (cellrow = therow And cellcolumn = thecolumn) Then
。
値を変更してニーズに合わせてカスタマイズしたり、完全な列または行をチェックすることもできます。次に例を示します。
検証行を に変更すると、どの行であっても、If (cellcolumn = thecolumn) Then
変数と同じ値を持つ列で発生した変更がコピーされます。thecolumn
その他の例:
検証行を に変更すると、どの行であっても、If (cellcolumn > thecolumn) Then
の値より大きい列で発生した変更がコピーされます。thecolumn