[[20210928090844]] 『セルに何か入力されたら「吹替」と記入したい』(KonNo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルに何か入力されたら「吹替」と記入したい』(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


もこな2さん、回答ありがとうございます。

既に提示したとおり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


hatanaさん、
 セルの表示設定の「ユーザー定義」と同じ意味だったのですね。

良く分かりました。
(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.