• ベストアンサー

Excel のセルどうしでの循環を避けた参照の方法

次の方法があれば教えてください。 Excelの同一ワークシートの中にある、または複数のワークシートに存在するセルA,B,C,D,...の間において、任意のセルを選択し、そのセルに任意の数値/文字列を入力した場合、他のセルもその数値を参照するように関連付けたいのですが、これらのセル間で、互いに循環問題を生じないようにするには、どうしたらよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.5

#4です 対象が全シートの場合は Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer, ws As Worksheet If Target.Column > 4 Then Exit Sub Application.EnableEvents = False For Each ws In Worksheets For i = 1 To 4 ws.Cells(Target.Row, i).Value = Target.Value Next i Next Application.EnableEvents = True End Sub を全シートのモジュールに貼り付ければれんどうします。

ESME
質問者

お礼

ANo.#4およびANo.#5のご丁寧なお答えこたえをありがとうございました。 ご提示いただきましたVBAを試してみます。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.7

関数を使っては、原理的に(絶対)出来ません。 関数の何たるかを理解してください。 (1)関数は他のセルの値を使って加工した「値!!」を返すものである。 (2)関数の設定してあるセルへ値を入力すると、関数式 は消滅する。 A,B,C,Dのどれかのセルに値を入れるともし関数式があれば 消滅し、以後その関数式の値をセット出来ない。 他のセルから「値」を持ってくるのは、関数式しか出来ない。 ここで相互矛盾が起こりますから。 VBAは値を持ってくるのは、(セルの)関数式(だけ)ではない。だから出来る余地があります。 (VBA例) cl = Array(・・・)の()内は適当に同じ値にするセルを列挙してください。 Private Sub Worksheet_Change(ByVal Target As Range) cl = Array("$A$1", "$B$1", "$C$1", "$D$1") Application.EnableEvents = False For Each adr In cl If Target.Address = adr Then For i = 0 To UBound(cl) Range(cl(i)) = Target Next i End If Next Application.EnableEvents = True End Sub

ESME
質問者

お礼

論理的なおご説明を頂きありがとうございました。 ご提示いただきましたVBAを試してみます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.6

#2のmshr1962です。 A1に[100/p]ですか?これは単位と言うことでしょうか? その場合はA1:D1を選択 右クリックして「セルの書式設定」「表示形式」タブで 「分類」を「ユーザー定義」にした上で 「種類」欄に「0"/p"」として「OK」してください。 A1には100とだけ入力すれば表示が[100/p]になります。 も同様に数値だけ入力してください。

ESME
質問者

補足

#2のmshr1962様 入力する内容は単に「p」(あるいは任意の数値または文字)という意味です。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.4

1.Alt+F11でVBEを起動します。 2.左画面の機能させたいシートをダブルクリック 3.右画面に下のコードを貼り付けてください。 4.Alt+F11に戻る Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer If Target.Column > 4 Then Exit Sub Application.EnableEvents = False For i = 1 To 4 Me.Cells(Target.Row, i).Value = Target.Value Next i Application.EnableEvents = True End Sub 機能: 同じ行のA,B,C,Dのどの値を変更した場合も同じ値になります。 関数では無理だと思います。

ESME
質問者

お礼

ご回答有難うございます。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.3

セルに入れる事が出来るのは、値か数式(他への参照)のいずれかですね。 > 任意のセルA1に数値/文字列pを入れた場合、 > 他のセルB1,C1,D1でもその数値/文字列pを参照して の時点でA1には値が入りますから、A1を参照とする事は出来ません。 処理内容に矛盾のある事の例えとして、 例えば、E1,F1にq,rと言う文字が入っていたとして、それをA1,B1に貼り付けた場合、A1,B1,C1,D1には何が表示されるべきですか? -- 質問内容のような事を実現する手段として、 A1~D1を順にチェックして内容が変更された際、変更されたセルの内容をA1~D1にコピーする。 というのでは? こちらの場合、VBAで作成出来ると思います。

ESME
質問者

お礼

ご回答ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

絶対参照にすればよいのでは? 「=A1」の場合コピーすると「=B1」とか「=A2」になると言うことですよね。 「=$A$1」ならコピーしても変化しません。 列だけ固定の場合は「=$A1」 行だけ固定の場合は「=A$1」 とすれば対応できます。

ESME
質問者

お礼

すみません。お手数ですが、もう少し具体的にご説明下さい。 例えば、A1,B1,C1,D1において、任意のセルA1に数値/文字列pを入れた場合、他のセルB1,C1,D1でもその数値/文字列pを参照してpと表示されるようにしたいのですが、循環問題を避けるには、各セルに、どういう数式を入れるべきでしょうか?

回答No.1

以前(といっても最近ですが)、同じようなことを質問しました。  もしぜんぜん違う場合はすいません。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=893531
ESME
質問者

お礼

早速のお答えありがとうございました。 掲示された「参考URL」を参照してみます。

関連するQ&A