gooドクター有料プランが1ヶ月間無料!

https://oshiete.goo.ne.jp/qa/12622109.html

こちらの質問の続きになります。
前回ご回答いただいた3名には感謝申し上げます。

今回は、この式を利用するとA1セルのみにしか反映されず、他のセルでは機能いたしません。
私の作業方法の問題でしょうか。

解決方法をご教授いただければ幸いです。

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

  • 前回は誠にありがとうございました。
    コードは直接貼り付けたら良いですか?あるいは画像の添付がよろしいでしょうか?
    Excelのバージョンは、今出先のため帰り次第上記に合わせてご返信いたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/10/14 11:23
  • ご返信ありがとうございます。
    おっしゃる通り通りでした。
    具体的にはB4:B10の(ひとまず)7つの縦に並ぶセルでの適応を考えております。
    今後はこれを応用し、拡張していけたらと思います。良かった

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/10/14 11:25
  • 追補ありがとうございます。
    一括入力ではなく個別入力です。
    例えばA1のセルにもA2のセルにも同じように田中太郎と打てば1が、田中二郎と打てば2が入力されるような仕組みを作りたいと考えています。

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/10/14 11:28
  • ご返信ありがとうございます。

    画像で上げていますが、A2以降は機能していません。
    エクセルのバージョンは、サブスクリプション製品 Microsoft365 ということで、よく分かりません。すみません。

    また、一度「田中太郎」と入力し、「2」が入力されたセル(機能したセル)に、次は「田中二郎」と入力しても機能しません。。。

    コードは文字数制限のため貼り付けできませんが以前ご教授頂いたものをコピペしたのみです。

    ご多忙のところとはありがとうございます。

    「エクセルで文字を入力したら数字に変換され」の補足画像4
    No.4の回答に寄せられた補足コメントです。 補足日時:2021/10/14 13:07
gooドクター

A 回答 (10件)

こんにちは、横から失礼します。


>また、一度「田中太郎」と入力し、「2」が入力されたセル(機能したセル)に、次は「田中二郎」と入力しても機能しません。。。

この事象から、
Application.EnableEvents = Ture
が機能していない為と考えられます。
ご質問のリンク先コードの該当部分は、
失礼ながら、
入力ミスになっており、変数 true がセットされている様で 変数宣言がない場合、trueはFalse になっている為、イベントが発生しなくなっているものと想像できます。

よって
前のコードの該当部分
Application.EnableEvents = true を
Application.EnableEvents = Ture として実行してみてください。

イベント発生での処理対応範囲は#4様が示されている通りです。
また、結合セルを対象にしない場合は.cells(1,1)は不要とかと思いますが
予防の為あった方が良いかと思います。
    • good
    • 0
この回答へのお礼

Qchan1962さん
TureをTrueにすると実行できました。
全くスペルミスに気が付いておりませんでした。
自分でコードをまずは読み取れるようにならないといけないですね…
細かい点のご指摘ありがとうございました。

お礼日時:2021/10/14 22:13

No.1の者です。



大変失礼いたしました。

>Application.EnableEvents = Ture
 → 私の記載ミスですね。。。 申し訳ないです。。。
    • good
    • 0
この回答へのお礼

mygoonicknameさん
いえいえ、ご丁寧に教えていただきありがとうございました。

お礼日時:2021/10/15 06:59

#6さんの件にて。



該当するバージョン所持なので記載されているコードを実行してみた所、

If Intersect(Target, Range("A1:A5")) Is Nothing Then

がFalseの時に(Select Case へ流れるよう検証)エラーになりました。

箇所は

Application.EnableEvents = Ture



Application.EnableEvents = True

に修正したら問題なく動きました。
リンク先も拝見しましたが私は該当するトラブルにあった事はないですね。

検証結果のご報告まで。
    • good
    • 0
この回答へのお礼

めぐみん_さん

ご指摘の箇所を修正することで問題なく動きました。
TureとTrueの違いに気が付かないとは、自分でも呆れてしまうほどのミスでした…
度々のご回答ありがとうございました。

お礼日時:2021/10/14 22:17

連投すみません


デバッグ確認して間違った情報を訂正します
> trueはFalse になっている為
trueはEmpty でした。。
なぜエラーが返らないのかは、判りませんので調べてみてください。

このような事を防ぐ為、VBAの開発時には
Option Explicit を宣言しましょう。
「VBA Option Explicit」などで調べてください。
    • good
    • 0
この回答へのお礼

Qchan1962さん

このようなド素人に度々ありがとうございました。

お礼日時:2021/10/14 22:14

No.1の者です。



>エクセルのバージョンは、サブスクリプション製品 Microsoft365
 → 原因は、これですね。。。
検索で、Excel VBA 365 不具合 などで調べると色々と出るかと。。。

https://jp.quora.com/office365%E3%81%A7VBA%E3%81 …

私のPCではその環境がないので、対応が難しいですが、どこまで正常に動作
して、どこで想定外の動作をしているかを調べる必要があります。


Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A5")) Is Nothing Then
msgbox target.address & "/Intersect:Nothing"
Exit Sub
Else
msgbox target.address & "/Intersect:OK!"
Application.EnableEvents = False
with target.cells(1,1)
Select case .value
Case "田中太郎"
.value = 1
Case "田中二郎"
.value = 2
Case "田中三郎"
.value = 3
End Select
End With
Application.EnableEvents = Ture
End If
End Sub

上記マクロをコピペして、
A1の時は、メッセージで、$A$1/Intersect:OK! と出るかと。
その後、1とかになると思います。

A2の時は、メッセージは、どうでしょうか?
$A$2/Intersect:OK! なら、Select Caseの直前まで動作しています。
$A$2/Intersect:Nothing なら、Intersectで弾かれています。


時間のある時に、上記の結果を教えて下さい。 他のコードで代替えが
できれば、それを使ってコードを組むしかないかと。。。
    • good
    • 0
この回答へのお礼

mygoonicknameさん
ご返信ありがとうございます。
Excel2016版で実施したところ、うまくいきました。
メッセージもきちんと表示されています。
他の方のご指摘にもありますが、TureとTrueのスペルミスの自動修正が働いたかどうかで機能する/しないの差が出たのかもしれません。ありがとうございました。

お礼日時:2021/10/14 22:10

この手の質問で過去に気になった事のある点。


・対象値&変更値をコード内に書けるほどその内容は少ないのであろうか?
・複数のセルを選択し値クリアした際の挙動対処。
は20年位前からやり取りしてたのを良く見かけましたね。

前者は特に組み合わせが多くあるなら、別シートにでも一覧表を作成してって回答が目立ちましたね。(先輩回答者様方は)

なので1列のコードを得てそれを7列にってのは確かに勉強熱心と感じますが、逆に7列(組み合わせ一覧表含め)に対応できるような形で1列のアドバイスを受けられた方が良いのでは?と感じます。

初級レベルなジジィの戯言です。
    • good
    • 0
この回答へのお礼

めぐみん_さん

私にはまだまだ分からない用語ばかりでご指摘いただいた文章の半分も理解できません。。。
勉強させていただきます。
ご返信ありがとうございます。

お礼日時:2021/10/14 22:11

No.1の者です。



以前のマクロでしたら、セルA1~A5まで、1つずつのセルに入力すれば、
質問者さんのいう事ができると思うのですが。。。
今朝、私のPCで実際に試して、問題なく動いたのですが。。。

If Intersect(Target, Range("A1:A5")) Is Nothing Then
セルの対象範囲 → A1:A5を変更すれば、それだけでできると思います。

質問者さんが、作成されているマクロがあれば、それを上げて貰った方が良いかも知れません。

コードは直接貼り付けが良いかと。 タイミングが合えば、回答します。
(画像ですと、見難い時がありますので。。。)
この回答への補足あり
    • good
    • 0

No.1の者です。



もしかして、複数範囲を一括で入力しようとしているでしょうか?
一括入力の場合は、一番上のセルだけを対象にしています。

もし一括入力に対応するなら、更に作り込みが必要になります。

一括で入力した場合でも、マクロ側では1つずつセルでの処理が必要に
なります。セルの個数分、内部で繰り返し処理が必要になります。
この回答への補足あり
    • good
    • 0

横から失礼いたします。



元々の質問では使用するのはA~D列のように感じますが、その後の質問ではA列限定になられたのでしょうか?

正確な使用するセル範囲を提示された方が宜しいと思いますよ。

では初級レベルなジジィはここまでです。
この回答への補足あり
    • good
    • 0

おはようございます。



前回コードを載せた者です。
前回は手書きで動作確認していませんでしたが、念のため、実際にPC上で
確認しましたが、問題なく動作しますね。。。

コードの入力間違いはないでしょうか?
特に、下記コードの2か所が、関連が高いところになりますが。

①If Intersect(Target, Range("A1:A5")) Is Nothing Then
②with target.cells(1,1) ← targetの記載漏れはないでしょうか?

一度、コードを載せて貰えたら、確認する事ができるかも知れません。
あと、Excelのバージョンも、念のために載せて貰えると良いかも。
この回答への補足あり
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング