- ベストアンサー
エクセルの自動入力
エクセルでデータを管理している者です。 今回は、ある列である文字列を入力すると、違う列の値も自動的に変わるように変更したいと考えています。 具体的には以下のような例です。 A1が"NO"の場合はA2は"必要"、A3は"入力"に自動的に変更する。 *ただし、A2、A3には既に値が入力されており、関数のIFは使えないと考えています。 文章が下手ですいません。何か疑問があれば質問してください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マクロを使った一例です。 マクロはやり直しができないので、データバックアップの上で 試してみてください。 おそらく質問は単純化した例だと思いますので、 必要に応じて改良してください。 その際、うまくいかなければ補足してください。 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を入力確定すれば自動的に行われます。
その他の回答 (2)
エクセルのワークシート関数群には、他のセルの値をどうにかするという機能はありません。 他のセルをどうにかするのはマクロでしょうが、 > *ただし、A2、A3には既に値が入力されており、 > 関数のIFは使えないと考えています。 といっておられるなら、マクロでも同じでしょう。 IF関数が使えないということは、A2、A3をいじりたくないのでしょう? それと「列」と言っておられるのに、実際は「行」のようだし、 もう少し、表の構成の具体例をお書きいいただけないでしょうか。
- imogasi
- ベストアンサー率27% (4737/17069)
良い仕掛けは無いように思います。 (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の真上ができたかどうか。略。
お礼
お礼までの時間がかかってしまいすいませんでした。 教えていただいたコードを参考に、自分のやりたい作業はできるようになりました。 ワークシートが変わることを監視する関数は他にも使えそうなので、今後も参考にしたいと思います。 ありがとうございました。