• ベストアンサー

エクセルの自動入力

エクセルでデータを管理している者です。 今回は、ある列である文字列を入力すると、違う列の値も自動的に変わるように変更したいと考えています。 具体的には以下のような例です。 A1が"NO"の場合はA2は"必要"、A3は"入力"に自動的に変更する。 *ただし、A2、A3には既に値が入力されており、関数のIFは使えないと考えています。 文章が下手ですいません。何か疑問があれば質問してください。 よろしくお願いします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

マクロを使った一例です。 マクロはやり直しができないので、データバックアップの上で 試してみてください。 おそらく質問は単純化した例だと思いますので、 必要に応じて改良してください。 その際、うまくいかなければ補足してください。 Private Sub Worksheet_Change(ByVal Target As Range)  On Error GoTo line  If Selection.Count > 1 Then Exit Sub  Application.ScreenUpdating = False  If Target.Address = "$A$1" And Target.Value = "NO" Then   Range("A2").Value = "必要"   Range("A3").Value = "入力"  End If  Application.ScreenUpdating = True  Exit Sub line:  Application.ScreenUpdating = True  Resume Next End Sub <使い方> 1)下のシート名のタブの上で右クリック 2)「コードの表示」をクリック 3)左側のプロジェクトエクスプローラーで、   VBAProjectの中に複数のシートがあると思いますが、   今、自動入力したいシートをダブルクリック  (プロジェクトエクスプローラーが表示されていなければ、   上部の「表示」メニューから選択表示できます。) 4)右側にコードを貼り付けます。   実行は、A1セルにNOを入力確定すれば自動的に行われます。

hiro0163
質問者

お礼

お礼までの時間がかかってしまいすいませんでした。 教えていただいたコードを参考に、自分のやりたい作業はできるようになりました。 ワークシートが変わることを監視する関数は他にも使えそうなので、今後も参考にしたいと思います。 ありがとうございました。

その他の回答 (2)

noname#79209
noname#79209
回答No.3

エクセルのワークシート関数群には、他のセルの値をどうにかするという機能はありません。 他のセルをどうにかするのはマクロでしょうが、 > *ただし、A2、A3には既に値が入力されており、 > 関数のIFは使えないと考えています。 といっておられるなら、マクロでも同じでしょう。 IF関数が使えないということは、A2、A3をいじりたくないのでしょう? それと「列」と言っておられるのに、実際は「行」のようだし、 もう少し、表の構成の具体例をお書きいいただけないでしょうか。

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

良い仕掛けは無いように思います。 (1)セルの値の上に、別の値を表示するのは、難しい (2)セルのコメントに設定する方法 (3)IF文を加える (4)VBAのイベント(コードを書き)利用 (5)コントロールを貼り付ける (6)セルの書式利用 VBAなら下記の(6)がお勧め。 ーー (3)状況がわからないが、 A2に=IF(A1="NO","必要",現在の本来の式) はどうですか。ダメな気もするが。 A3も同じ=IF(A1="NO","入力",現在の本来の式) (4)(5) Sheet1にテキストボックスを貼り付ける。 Sheet1のChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target = "NO" Then Worksheets("Sheet1").TextBox1.Top = Worksheets("Sheet1").Range("A2").Top Worksheets("Sheet1").TextBox1.Left = Worksheets("Sheet1").Range("A2").Left Worksheets("Sheet1").TextBox1.Width = Worksheets("Sheet1").Range("A2").Width Worksheets("Sheet1").TextBox1.Visible = True Worksheets("Sheet1").TextBox1.Text = "必要" Else Worksheets("Sheet1").TextBox1.Visible = False End If End Sub を貼り付ける。 A1に「NO」と入れると A2にテキストで「必要」と出て、「NO」以外だとテキストボックスを見えなくする。 (6)は Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target = "NO" Then Worksheets("Sheet1").Range("A2").NumberFormat = "必要" Else Worksheets("Sheet1").Range("A2").NumberFormat = "#,###" End If End Sub (2)コメントの場合も上記コードオ似たものになるでしょう。 表示位置はA2の真上ができたかどうか。略。