[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルに何か入力されたら「吹替」と記入したい』(KonNo)
Renge("D2:D34")中を対象にターゲットセルに何か記入したら
「吹替」と記入したい
最終的には
Private Sub Auto_Open()
に追加予定
< 使用 Excel:Excel2019、使用 OS:Windows10 >
・【どこ】に「吹替」と記入したいのか ・現状どのようになっているのかとか(どこで詰まっているのとか)
内容だけ拝見するとchangeイベントで処理できそうな気もしますが、それではダメなのでしょうか?
(もこな2) 2021/09/28(火) 09:36
・【どこ】に「吹替」と記入したいのか
Renge("D2:D34")を対象に この対象セル内のセルをクリックして 選択状態にしてなんでも良いのでキーインして リターンキーで確定させる(又は他のセルに移動)すると キーインしたセルに「吹替」と記入する。
例えば、「z」と入力してリターンすると 「z」の代わりに「吹替」と入力される。
出来たコードを Private Sub Auto_Open() に登録する。
どこで詰まっているのとか
考え方としては下記の順番でしょうが
ヒントをお願いします。
(現在、ノーアイデア状態。。。)
対象セル(Renge("D2:D34"))を設定 その対象セル内のセルを選択 キーイン(文字入力) > 確定 入力した文字と「吹替」を入れ替える
(KonNo) 2021/09/28(火) 10:12
https://valmore.work/vba-create-dropdown-list/
(KonNo) 2021/09/28(火) 11:00
Private Sub Auto_Open()
Range("D2:D34").Validation.Delete Range("D2:D34").Validation.Add Type:=xlValidateList, Formula1:="吹替, "
End Sub
(KonNo) 2021/09/28(火) 11:12
■1
セルの値を書き換えたときにマクロを発動させたいなら、既に提示したとおりChangeイベントを使えばよいです。
たとえば、↓を対象シートのシートモジュールに記述すればお望みのことは実現できるのではないでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRNG As Range, bufRNG As Range
Set bufRNG = Intersect(Target, Range("D2:D34"))
If Not bufRNG Is Nothing Then Application.EnableEvents = False For Each MyRNG In bufRNG If MyRNG.Value <> "" Then MyRNG.Value = "吹替" Next MyRNG Application.EnableEvents = True End If End Sub
なお、Changeイベントを使われる場合の注意点をいくつか。
・複数セルが同時に書き換えられる(Targetが複数セルになる)ことがありますので、 ループ処理で1セルずつ判定して処理するように考えるとよいとおもいます。
・↑に関連して、Targetに対象害のセルが含まれることもあり得ます。 よって、Intersectメソッドを使うなどして、Targetのうち対象セルはどれなのかを 特定する必要もあるとおもいます。
・前述のようにChangeイベントはセルへの書き込みで発動します。 それはマクロによる書き込みも例外ではありません。 よって、書き込みを行う前に「EnableEvents」プロパティを操作して、一時的に イベント発生を無効化しておかないとセルに書き込んだことにより自身を呼び出す 無限再帰に陥ります。
■2
>最終的には Private Sub Auto_Open() に追加予定
仰っている意味が全く理解出来ませんでした。Auto_Openは、ブックを開いたときに発動します。
ブックを開いたときに何か処理をするのであれば理解出来ますが、仰っている処理のタイミングでは全く関係ないと思われます。
したがって、Auto_Openでなにをしたいのかが判らなかったので、現状どこで詰まっているのか?と確認した次第です。
■3
>以下で良いと思いますが、
ご自身がよければ問題無いでしょう。
個人的には、手作業で1回だけ【入力規則】を設定すれば終わりなので、「Auto_Open」というかマクロで処理する必要性がないとおもいますが・・・
(もこな2) 2021/09/28(火) 12:17
(マナ) 2021/09/28(火) 12:30
Sub 見た目だけ() ActiveSheet.Range("D2:D34").NumberFormatLocal = "吹替;吹替;吹替;吹替" End Sub
(もこな2) 2021/09/28(火) 12:34
既に提示したとおりChangeイベントを使えばよいです。
記述されたコードで思ったことができました。 (SUB 見た目だけ()もOKでした)
説明頂いた注意点は、初心者には難しい内容で 半分も理解が出来ませんが、問題が出た時に対処出来そうにないので 今回は、 「ご自身がよければ問題無いでしょう。」 とまんざら間違ったやり方ではなさそうなので自前を選択しようとしましたが
おっしゃるとうり、
手作業で1回だけ【入力規則】を設定すれば終わりなので、 「Auto_Open」というかマクロで処理する必要性が無いのは確かなので 【入力規則】で処理してマクロは止めました。
SUB 見た目だけ()もOKでした
"吹替;吹替;吹替;吹替"の意味が始め分かりませんでしたが 吹替が4バイトなので4つ必要との理解で良いのでしょうか ?
(KonNo) 2021/09/28(火) 13:09
エクセル セルの書式設定 ユーザー定義 セミコロン「;」の使用方法 | AMK 情報館
https://amksystem.com/office/excel-user-defined/
(hatena) 2021/09/28(火) 13:19
良く分かりました。
(KonNo) 2021/09/28(火) 14:30
■4
>吹替が4バイトなので4つ必要との理解で良いのでしょうか?
ちがいます。
hatenaさんが提示されたサイトでもきちんと説明されていますが、表示形式のユーザー定義の場合、左から順番に正の数値・負の数値・ゼロ・文字列の順番で指定するルールです。
https://prau-pc.jp/excel/user-defined-format/
何らかの【数値】だけならば「"吹替"」でもよかったのですが、そちらだと「z」などの文字列が入力されるとそのままになってしまうので
正の数が入力されたとき → "吹替"と表示 負の数が入力されたとき → "吹替"と表示 ゼロが入力されたとき → "吹替"と表示 文字列が入力されたとき → "吹替"と表示
のように全パターン書いた結果です。
(私知らないだけで、文字列が入力される可能性があっても全パターン指定しなくてもよい方法があるかもしれません。他の回答者さんのコメントも参照してください。)
(もこな2) 2021/09/28(火) 14:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.