みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルでセルにひらがな一文字を入力した途端に移動

いま、ローマ字入力・ひらがな入力の内、ひらがな入力の練習をしています。

入力設定をローマ字・ひらがなの内、ひらがな入力に設定しています。

なにかひらがなを入力しエンターキーを1回押してひらがなのまま入力と確定して、もう一度エンターキーを押してすぐ下のセルに移動する作業(「ひらがな入力+エンターキー2回」の作業)をなんども繰り返して練習しています。

練習のスピードを上げるため、
エクセルでセルにひらがな一文字を入力した途端にひらがなのまま確定しすぐ下のセルへ移動する方法(「ひらがな入力+エンターキー2回」の内「エンターキー2回」の操作を省略出来る方法)を希望しています。


VBAを伴う方法でも構いません。

ご教授をお願い致します。

投稿日時 - 2011-08-06 16:10:08

QNo.6925312

困ってます

質問者が選んだベストアンサー

ワークシートでは難しいと思います。
実用性は疑問ですが、「まがい物」で回答いたします。
ワークシートに、セルのサイズに合わせてコントロールツールボックスのテキストボックスを置きます。
テキストボックスに一文字(アルファベット)を入力すると、かなに変換してセルに表示し、一つ下のセルにテキストボックスも含め移動します。
初期化は、シートの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

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

投稿日時 - 2011-08-06 20:06:46

お礼

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

質問が二つありますので、お願いいたします。

<<<1、入力手順は下記の手順でよろしいでしょうか。>>>

表示、
ツールバー、
コントロールツールボックス、
テキストボックスとたどって、
ドラックアンドドロップして、
出てきたボックスを右クリック、
テキストボックスオブジェクト、
編集、とたどる。
すると、カーソルが点滅する「I」字形の棒として示されるので、入力を始める。



<<<2、マクロのコードの挿入箇所は下記の手順でよろしいでしょうか。>>>

ツール、
マクロ、
新しいマクロの記録、
とたどって、何かのマクロを記録する。
その後、ツール、
マクロ、
マクロ、
今さっき保存したマクロを選択、
編集とたどる。
すると、Microsoft Visual Basicの画面が表示され、記録したマクロのコードが表示される。
そのすぐ下に、
「Private Sub TextBox1_Change()」から始まって、
「TextBox1.Activate
End Sub」で終わるマクロのコードを挿入する。

上記の入力方法とマクロの挿入を試してみましたが、成功できませんでした。

どうぞ宜しくお願い致します。

投稿日時 - 2011-08-06 21:11:11

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

#1~です。
イベントが機能していませんね。
xl2010でも試してみましたが、特にイベントを動作させるのに苦労もしませんでした。
という事で、原因が分かりません。
念の為ですが、マクロは有効になっていますね?
後は、質問者様のエクセルのバージョンに合わせてWeb上のイベントの記事を調査して、
試行してみてくださいとしか言い様がありません。
あしからず。

投稿日時 - 2011-08-11 22:14:35

お礼

ご回答をありがとうございます。

○○○念の為ですが、マクロは有効になっていますね?
↓   ↓   ↓
はい、有効になっています。


○○○イベントが機能していませんね。
○○○後は、質問者様のエクセルのバージョンに合わせてWeb上のイベントの記事を調査して、
試行してみてください
↓   ↓   ↓
イベントが機能していないとのことですので、この機能について、調べてみます。


大変勉強になりました。
今まで何度も教えていただき、本当にありがとうございました。

投稿日時 - 2011-08-13 11:48:55

ANo.3

#1です。
コードのコピー先は問題ないと思います。
どの様にうまくいかないのか教えて下さい。
例)テキストボックスに何か文字を打ち込むと、どんなエラーが出る等

また、下記によりイベントが機能しているか試してみて下さい。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Event!"
End Sub

を入力して、目的のシートのどれかのセルを選択したとき、「Event!」という、メッセージボックスは表示されますか?
Application.EnableEvents = False
というコードを実行していますので、正常終了しなかったときに、以降イベントが無効になります。簡便にはエクセルを一旦終了して再度起動すると有効になります。
さもなければ、シートモジュール上でも、標準モジュール上でも良いですが、下記コードを実行して下さい。
Sub test()
Application.EnableEvents = True
End Sub

投稿日時 - 2011-08-10 19:38:47

お礼

質問者です。なんども回答をありがとうございます。



○○○コードのコピー先は問題ないと思います。
どの様にうまくいかないのか教えて下さい。
例)テキストボックスに何か文字を打ち込むと、どんなエラーが出る等
↓   ↓   ↓
テキストボックスに何か文字を打ち込んでも、入力したままの文字が表示されるだけで、何も変化が起こりません。
メモ帳やワードなどに文字を入力していけば、入力通りの文字が表示されるのと同じ状態です。

○○○また、下記によりイベントが機能しているか試してみて下さい。

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)」の行が自動的に選択されていました。



どうぞ宜しくお願い致します。

投稿日時 - 2011-08-11 12:05:19

ANo.2

#1です。
マクロの記述先が違っています。
補足に書かれている手順ですと、標準モジュールになりますが、そこではダメです。
目的のシートのシートモジュールに記述する必要があります。
参考URLに画像入りで説明がありますので、そちらを熟読下さい。

投稿日時 - 2011-08-06 22:31:09

お礼

<<<質問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」
をコピー・貼り付けをする。

この方法で試してみましたが、成功しませんでした。
お手数をおかけいたしますが、対処方法を教えていただけないでしょうか。
どうぞ宜しくお願い致します。

投稿日時 - 2011-08-10 13:27:40

あなたにオススメの質問