[[20200207233213]] 『エンターキーでマクロを実行』(マクロ初心者) ページの最後に飛ぶ

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

 

『エンターキーでマクロを実行』(マクロ初心者)

3日間、ネットや本で調べながらチャレンジしましたが、基礎がわかっていないので、専門家の方のご指導をお願いしたいと思います。

2つのシートで構成されたブックがあります。
Sheet2は非表示なので、Sheet1のみが表示されます。

C7〜L7のセル全部、またはそのいずれかに文字を入力しますが、漢字に変換して確定のためにリターンキーを押します。
カーソルは、リターンキーを押すことで各々1つ下のセル(C8〜L8)に移動することになりますが、この確定のためのリターンキーで特定のマクロを実行するようにしたいのです。

実行するマクロは完成していますが、リターンキーによる実行の方法がわかりません。

よろしくお願いします。

< 使用 Excel:Office365、使用 OS:Windows10 >


 おはよ〜ございます。 ^^
専門家ではありませんが、。。。^^;。。。m(_ _)m
GetAsyncKeyState 
とかいうむつかし〜APIを使い無限ループ回すと監視は出来るのでしょうが
ワークシートのチェンジイベントをお使いになった方が簡単、且つ効率的
なのではないか、。。。とか思うのですが ← 何故か弱気 (◎_◎;)
他の方の回答をお待ちくださいませ、私も共に学ばせて戴ければ幸甚です。
でわ。。。m(_ _)m
(隠居じーさん) 2020/02/08(土) 06:21

 application.onkey
というのがあります。
こちらを参考にされてみてはどうでしょうか?
https://ameblo.jp/blueskyame/entry-10278830817.html
(Soul Man) 2020/02/08(土) 07:15

 おはよ〜ございます。。。^^
なるほど。。。キー、にわりつけるのですね。
ハンドル。。変えられましたぁ?
SoulMan さん ⇒ Soul Man さん 。。。(#^^#)v
m(_ _)m
違うお方でしたら大変済みません。。。m(_ _)m
(隠居じーさん) 2020/02/08(土) 07:47

あっ、すみません
iPhoneから打つといつもこうなんですよね
直そうと思いましたが、お布団の中だったもんで
まぁいいかぁって(^^;;
(SoulMan) 2020/02/08(土) 08:07

そのブログにもありますが
私のは駄目でしたね
(SoulMan) 2020/02/08(土) 08:09

(SoulMan)さま  2020/02/08(土) 08:07 へ 
あ いや。。。こちらこそ すんまそ
(#^.^#)////
m(_ _)m

(隠居じーさん) 2020/02/08(土) 08:15


隠居さんの指摘にもあるようにWorksheet_Changeを使うのが良さそうですが
これが案外厄介な代物で初心者向きではありません。
適当に作ると、別のマクロを動かしたときにまたこのマクロが発動するなどして収拾がつかなくなることもしばしばです。
質問中にある、完成済みの別のマクロの内容がわかると新たな回答が得られるかもしれません。

(遠州灘) 2020/02/08(土) 09:37


C7〜L7のセル全部、またはそのいずれかに文字を入力しますが、漢字に変換して確定のためにリターンキーを押します。

Sheet1のシートモジュールに
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("C7:L7")) Is Nothing Then
        Application.OnKey "{ENTER}", "Test"
        Application.OnKey "~", "Test"
    Else
        Application.OnKey "{ENTER}"
        Application.OnKey "~"
    End If
End Sub

標準モジュールに
Sub Test()

    With ActiveCell
        .Offset(1).Select
        MsgBox .Address(0, 0) & "セルに「" & .Value & "」と入力しました。"
    End With
End Sub

(ピンク) 2020/02/08(土) 10:38


 おぉぉっぉ、、出来ましたぁ。。。
 >Application.OnKey "~"
 これを追加するのですね?
 勉強になりますねぇ(^^;

 ありがとうございます。
(SoulMan) 2020/02/08(土) 16:24

皆様

いろいろとご教授、ありがとうございます。

ピンク様のご回答内容で確認してみます。

遠州灘様のアドバイスにありましたが、
何をやりたいのかをご説明します。

何か良いやり方があれば、教えて下さい。

1.Sheet1のC7〜L7のセル全部、またはそのいずれか(1個セル〜10個セル)に
  文字を入力しますが、セルへの入力が完了したら、他のセル(A4)の値を変更

2.A4の値(0か1)を受けて、W8〜W3000にあるIF文の結果が変化する。(W列のIF文は基本同じ)

問題(悩んでいる事)は、C7〜L7のセルへの入力が未かどうかは、countblank関数を使って
10か10未満かで判断できるのですが、入力開始・完了のタイミングが判断できないので
「エンターキーでマクロを実行」で質問させて頂きました。

1回目のエンターキーは分かりますが、その後は0回なのか9回なのかが分からないので
エンターキーを押した回数をカウントしてcountblank関数の結果と照合しようかと考えて
いました。

しかし、よく考えると、1回目のエンターキーでA4の値(0か1)が入ったら、
2回目以降のエンターキーは無視できる(A4の値を再度変更させたくない)ので
そのように>Application.OnKey "~"をON/OFFできたら解決できるように思えてきました。

よろしくお願いします。

(マクロ初心者) 2020/02/08(土) 21:19


 ON OFFはピンクさんのコードの中に既にあるので
 ここからの設計思想は、ご自身じゃないとわからないんじゃないでしょうか?

 VBAでもCOUNTIFとかは使えますから、どんな条件にするかですよね?

 一度、日本語で文書化してみてはどうでしょうか?

 あるいは、Enter以外のKeyに割り付けるのもいいかもです。
(SoulMan) 2020/02/08(土) 21:34

 >1回目のエンターキーは分かりますが、その後は0回なのか9回なのかが分からないので
ん?
左から順番に入力ですか?
空欄があっても1回なのかな?
CountA関数で数えたらよくないですか?

しかし、よく考えると、1回目のエンターキーでA4の値(0か1)が入ったら、 2回目以降のエンターキーは無視できる

A4セルは数式を仕込んでいる?マクロで書き換えている?
0と1の違いは、他にどう影響します?

>W8〜W3000にあるIF文の結果が変化する。(W列のIF文は基本同じ)
IF文というのはVBAの話ですか?
それとも数式のIF関数のことですか?

回答側はあなたのパソコンが見えないので、
あなたは解っていても、他の人は解らないと思いますが。。。。?

あと、専門家はこんなとこで書き込みしている暇はないかと。。。。
皆で助け合って、いい方向に進めたらいいなと思います。
(まっつわん) 2020/02/08(土) 22:08


皆様

ありがとうございます。

今までのご回答を基に再度検討してみます。

(マクロ初心者) 2020/02/08(土) 22:17


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.