- ベストアンサー
エクセルでひらがな入力時にセルを自動で移動する方法
- エクセルでひらがなを入力し、エンターキーを押してもう一度エンターキーを押すと、自動で下のセルに移動できる方法をご教授願いたいです。練習のスピードを上げるため、この方法を探しています。
- ひらがなの入力設定にして、エクセルのセルにひらがなを1文字入力し、エンターキーを押してひらがなを確定させます。そしてもう一度エンターキーを押すと、自動的に下のセルに移動する方法を教えてください。
- VBAを使って、エクセルでひらがなを入力し、エンターキーを2回押すことなく自動でセルを移動する方法を教えてください。練習の効率を上げたいので、ぜひ教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ワークシートでは難しいと思います。 実用性は疑問ですが、「まがい物」で回答いたします。 ワークシートに、セルのサイズに合わせてコントロールツールボックスのテキストボックスを置きます。 テキストボックスに一文字(アルファベット)を入力すると、かなに変換してセルに表示し、一つ下のセルにテキストボックスも含め移動します。 初期化は、シートのActivateイベントで行う様にしてみました。(別シートに一旦移って戻る必要があります) なお、致命的な欠陥があり、「を」の練習が出来ませんので悪しからず。 ワークシートのイベントについては参考URLをご覧下さい。 Private Sub TextBox1_Change() Const strRef As String = "3e456tgh:bxdrpcqazwsui1,kfv2^-jn]/m789ol.;\0y" Const strKana As String = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん" TextBox1.Font.Size = 1 If TextBox1.Value = "" Then Exit Sub Application.EnableEvents = False TextBox1.TopLeftCell.Activate ActiveCell.Value = Mid(strKana, InStr(strRef, TextBox1.Value), 1) TextBox1.Top = ActiveCell.Offset(1, 0).Top TextBox1.Value = "" TextBox1.Activate Application.EnableEvents = True End Sub Private Sub Worksheet_Activate() ActiveSheet.Cells.ClearContents Range("A1").Activate TextBox1.Top = 0 TextBox1.Left = 0 TextBox1.Activate End Sub
その他の回答 (3)
- mitarashi
- ベストアンサー率59% (574/965)
#1~です。 イベントが機能していませんね。 xl2010でも試してみましたが、特にイベントを動作させるのに苦労もしませんでした。 という事で、原因が分かりません。 念の為ですが、マクロは有効になっていますね? 後は、質問者様のエクセルのバージョンに合わせてWeb上のイベントの記事を調査して、 試行してみてくださいとしか言い様がありません。 あしからず。
お礼
ご回答をありがとうございます。 ○○○念の為ですが、マクロは有効になっていますね? ↓ ↓ ↓ はい、有効になっています。 ○○○イベントが機能していませんね。 ○○○後は、質問者様のエクセルのバージョンに合わせてWeb上のイベントの記事を調査して、 試行してみてください ↓ ↓ ↓ イベントが機能していないとのことですので、この機能について、調べてみます。 大変勉強になりました。 今まで何度も教えていただき、本当にありがとうございました。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 コードのコピー先は問題ないと思います。 どの様にうまくいかないのか教えて下さい。 例)テキストボックスに何か文字を打ち込むと、どんなエラーが出る等 また、下記によりイベントが機能しているか試してみて下さい。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "Event!" End Sub を入力して、目的のシートのどれかのセルを選択したとき、「Event!」という、メッセージボックスは表示されますか? Application.EnableEvents = False というコードを実行していますので、正常終了しなかったときに、以降イベントが無効になります。簡便にはエクセルを一旦終了して再度起動すると有効になります。 さもなければ、シートモジュール上でも、標準モジュール上でも良いですが、下記コードを実行して下さい。 Sub test() Application.EnableEvents = True End Sub
お礼
質問者です。なんども回答をありがとうございます。 ○○○コードのコピー先は問題ないと思います。 どの様にうまくいかないのか教えて下さい。 例)テキストボックスに何か文字を打ち込むと、どんなエラーが出る等 ↓ ↓ ↓ テキストボックスに何か文字を打ち込んでも、入力したままの文字が表示されるだけで、何も変化が起こりません。 メモ帳やワードなどに文字を入力していけば、入力通りの文字が表示されるのと同じ状態です。 ○○○また、下記によりイベントが機能しているか試してみて下さい。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox "Event!" End Sub を入力して、目的のシートのどれかのセルを選択したとき、「Event!」という、メッセージボックスは表示されますか? ↓ ↓ ↓ 「Event!」という、メッセージボックスは表示されません。 セルを選択したり、セルに何か文字を入力しても、何も変化がありません。 ○さもなければ、シートモジュール上でも、標準モジュール上でも良いですが、下記コードを実行して下さい。 Sub test() Application.EnableEvents = True End Sub ↓ ↓ ↓ この3行をクリックしたのちに、 Visuial Basic Editorの画面にて、画面上部にある、右向きの三角形(Sub/ユーザーフォームの実行)をクリックすると、 Microsoft Visual Basicと題する小さな画面が表示され、その中には、 「コンパイルエラー 名前が適切ではありません Worksheet_SelectionChange OK ヘルプ」 と表示されます。 なお、 Visuial Basic Editorの画面では、 「Private Sub Worksheet_SelectionChange(ByVal Target As Range)」の行が自動的に選択されていました。 どうぞ宜しくお願い致します。
- mitarashi
- ベストアンサー率59% (574/965)
#1です。 マクロの記述先が違っています。 補足に書かれている手順ですと、標準モジュールになりますが、そこではダメです。 目的のシートのシートモジュールに記述する必要があります。 参考URLに画像入りで説明がありますので、そちらを熟読下さい。
お礼
<<<質問3>>> ○シート3にて、 ○表示、 ○ツールバー、 ○コントロールツールボックス、 ○テキストボックスとたどって、 ○ドラックアンドドロップして、 ○テキストボックスを作成。 ○ツール、 ○マクロ、 ○Visuial Basic Editor、とたどって、 ○Visuial Basic Editorの画面を表示させる。 このVisuial Basic Editorの画面にて、左上から、 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html のなかに、 「オブジェクトボックスで「Worksheet」を選択すると、プロシージボックスから9つのイベントが選択できます。」 と書かれた行のすぐ下にある図の左側に 最上部から、 ******** Microsoft Visual Basic・・・ ファイル、編集、表示・・・ プロジェクト-VBAProjects Microsoft Excel Objects Sheet1(Sheet1) Sheet2(個人票) Sheet3(判定票) Sheet4(Sheet2)・・・・ ******** と書かれた部分があります。 この部分に該当する箇所にて、 ○テキストボックスを作成した、Sheet3(Sheet3)をクリック、 ○「オブジェクトボックス」にて「TextBox1」を選択、 ○「プロシージャボックス」にて「Change」を選択、 ○すると、 「Private Sub TextBox1_Change() End Sub」 と表示される。 ○この2行の間に、 「Const strRef As String = "3e456tgh:bxdrpcqazwsui1,kfv2^-jn]/m789ol.;\0y" Const strKana As String = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん" TextBox1.Font.Size = 1 If TextBox1.Value = "" Then Exit Sub Application.EnableEvents = False TextBox1.TopLeftCell.Activate ActiveCell.Value = Mid(strKana, InStr(strRef, TextBox1.Value), 1) TextBox1.Top = ActiveCell.Offset(1, 0).Top TextBox1.Value = "" TextBox1.Activate Application.EnableEvents = True」 をコピー・貼り付けをする。 ○「オブジェクトボックス」にて「Worksheet」を選択、 ○「プロシージャボックス」にて「Activate」を選択、 ○すると、 「Private Sub Worksheet_Activate() End Sub」 と表示される。 ○この2行の間に、 「ActiveSheet.Cells.ClearContents Range("A1").Activate TextBox1.Top = 0 TextBox1.Left = 0 TextBox1.Activate」 をコピー・貼り付けをする。 この方法で試してみましたが、成功しませんでした。 お手数をおかけいたしますが、対処方法を教えていただけないでしょうか。 どうぞ宜しくお願い致します。
お礼
ご教授をありがとうございます。 質問が二つありますので、お願いいたします。 <<<1、入力手順は下記の手順でよろしいでしょうか。>>> 表示、 ツールバー、 コントロールツールボックス、 テキストボックスとたどって、 ドラックアンドドロップして、 出てきたボックスを右クリック、 テキストボックスオブジェクト、 編集、とたどる。 すると、カーソルが点滅する「I」字形の棒として示されるので、入力を始める。 <<<2、マクロのコードの挿入箇所は下記の手順でよろしいでしょうか。>>> ツール、 マクロ、 新しいマクロの記録、 とたどって、何かのマクロを記録する。 その後、ツール、 マクロ、 マクロ、 今さっき保存したマクロを選択、 編集とたどる。 すると、Microsoft Visual Basicの画面が表示され、記録したマクロのコードが表示される。 そのすぐ下に、 「Private Sub TextBox1_Change()」から始まって、 「TextBox1.Activate End Sub」で終わるマクロのコードを挿入する。 上記の入力方法とマクロの挿入を試してみましたが、成功できませんでした。 どうぞ宜しくお願い致します。