アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。
セルに再入力(データ上書き)でエンターを押すと、
「データが入っています。本当に入力しますか?」と確定する前に
メッセージを表示させたいのですが、方法を教えていただけないでしょうか。
空白セルはそのまま普通に入力したいです。
microsoft365のエクセルを使用しています。
よろしくお願いいたします。

質問者からの補足コメント

  • 回答ありがとうございます。
    VBAの方を使ってみました。
    すみません、対象の場所を記載するのを忘れてました。
    シート全体ではなく、O列のみが対象となるのでした。
    あと、エンターを押してセルの値が変わった後にメッセージが表示されたのですが、値が変わる前にメッセージとYES,NOを表示させることは可能でしょうか?
    すみませんが、よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/04/02 12:03
  • 回答ありがとうございます
    >これは、エクセルの制限事項です。
    すみません、失礼しました。

    あと、入力済みのセルにコピペすると、データの一致、不一致にかかわらず、
    実行時エラー'424':
    オブジェクトが必要です。
    とメッセージが表示され、コードの画面を見ると
    For Each Cell In Application.Intersect(Target, UsedRange, Columns("O"))
    が黄色に着色されてました。
    何故でしょうか?
    何度もお手数おかけして申し訳ございませんが、よろしくお願いいたします。

    No.4の回答に寄せられた補足コメントです。 補足日時:2022/04/02 19:04

A 回答 (5件)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Dim Cell As Range
Set Target = Application.Intersect(Target, UsedRange, Columns("O"))
If Target Is Nothing Then Exit Sub
For Each Cell In Target
Cell.ID = Cell.Value
Next Cell
End Sub
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました。
とても助かりました。

お礼日時:2022/04/02 19:36

編集状態(カーソルがセル内にある状態)では、マクロは動きません。


これは、エクセルの制限事項です。

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Application.Intersect(Target, UsedRange, Columns("O"))
If Target Is Nothing Then Exit Sub
Dim Cell As Range
For Each Cell In Target
If Cell.ID <> "" And Cell.ID <> Cell.Value Then
If vbCancel = MsgBox("データが入っています。本当に入力しますか?", vbOKCancel) Then
Application.Undo
End If
End If
Cell.ID = Cell.Value
Next Cell
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Application.Intersect(Target, UsedRange, Columns("O"))
Cell.ID = Cell.Value
Next Cell
End Sub
この回答への補足あり
    • good
    • 0

No.2 です。


VBA を使わない方法 は、自動再計算をオフにしておいてください。
    • good
    • 0

VBA を使わない方法:


予め対象範囲を別シートにリンク貼り付けしておく。
入力規則:=OR(Sheet2!A1=0,A1=Sheet2!A1)

VBA を使う方法:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
If Cell.ID <> "" And Cell.ID <> Cell.Value Then
If vbCancel = MsgBox("データが入っています。本当に入力しますか?", vbOKCancel) Then
Application.Undo
End If
End If
Cell.ID = Cell.Value
Next Cell
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
Cell.ID = Cell.Value
Next Cell
End Sub
この回答への補足あり
    • good
    • 0

残念ですが、標準でそのような機能はありません。



マクロで指定する必要があります。
マクロについての知識が無いのでしたら、
 ・マクロについて勉強してからマクロ機能を使う。
 ・誰かほかの人に作ってもらう。
 ・無理って事で諦める。
 ・他の方法を検討する。
の中から選択することになります。

ただし、マクロを作るうえで分からない点を質問するのはOKですが、
ここは自力で問題を解決することができるようにアドバイスをもらうところですので、
 ・誰かほかの人に作ってもらう。
を選択する場合は有料で作業依頼を受けてくれる場所でお願いするようにしましょう。

・・・

ごめんね。
質問者さん的にはそのマクロを作って欲しいという事は理解できるのですが、
危険なコードを組み込まれたマクロをそのまま利用することになるかもしれないのです。
自身では何をされているのか分からないと被害が大きくなるので、
何をしている物なのかを理解できないうちは、マクロには手を出さないようにしましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!