• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル使用時のIMEの設定について)

エクセル使用時のIMEの設定について

このQ&Aのポイント
  • エクセルを使用する際にIMEの設定方法について説明します。
  • 特定のセル範囲で入力した数字を変換せずに確定し、同時に移動する方法について教えてください。
  • VLOOKUP関数を使用せずに、検索用の数字を入力するセルと検索結果を表示するセルを同じにする方法を知りたいです。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#3、cjです。 > その、すこしが難しい よくご存じのようで、安心しました。 一応、仕様等私好みで整理してみました。 #好きでやってるので、気にしないで下さいね。あのままじゃ余りにもアレなので。 インデックスをセル値に指定するだけで事足りる話だったなら、それはそれでいいので。 ' ' ===ThisWorkbookモジュール=== Option Explicit ' ' ============================ 7767828we2 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)   Sheets("Sheet1").FrmTBox.Visible = False '◆ Sheet名を指定 End Sub ' ' ============================ ' ' ======Sheet モジュール====== Option Explicit Private aList ' List配列 Private nUB As Long ' List配列のサイズ Private n As Long ' List配列用インデックス Private Const S_REF = "D5:D10" '◆処理対象範囲を参照文字列指定 ' ' ============================ 7767828shEv Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Intersect(Target, Range(S_REF)) Is Nothing Or Target.Count > 1 Then     If FrmTBox.Visible Then FrmTBox.Visible = False   Else     Call ActTBox(Target)   End If End Sub ' ' ---------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Intersect(Target, Range(S_REF)) Is Nothing Then Exit Sub   Cancel = True   Call ActTBox(Target) End Sub ' ' ============================ 7767828tbEv Private Sub FrmTBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   With FrmTBox     Select Case KeyCode     Case 27: Application.OnTime Now(), Me.Name & ".HideTBox" ' ▼"ESC"     Case 37: ActiveCell.Offset(, -1).Select ' ▼"←"     Case 38: ActiveCell(0).Select ' ▼"↑"     Case 39: ActiveCell(1, 2).Select ' ▼"→"     Case 40: ActiveCell(2).Select ' ▼"↓"     End Select   End With End Sub ' ' ---------------------------- Private Sub FrmTBox_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) On Error GoTo CrArr_   nUB = UBound(aList) On Error GoTo 0   With FrmTBox     Select Case KeyCode     Case 48 To 57, 96 To 105: Call ValVal(n & KeyCode Mod 48) ' ▲"0" To "9", "0" To "9"(NumLockedTenKey)     Case 107, 187: Call ValVal(n + 1) ' ▲Shift+"+", "+"(TenKey)     Case 109, 189: Call ValVal(n - 1)  ' ▲"-", "-"(TenKey)     Case 8: Call ValVal(n \ 10)  ' ▲"BACKSPACE"     Case 46: Call ValVal(0)  ' ▲"DEL"     Case 9, 13  ' ▲"TAB", "ENTER"       If .Value <> "" Then ActiveCell.Value = .Value       If Shift Then ' "SHIFT"         ActiveCell(0).Select       Else         ActiveCell(2).Select       End If     End Select   End With   DoEvents Exit Sub CrArr_:   Call SetList Resume End Sub ' ' ============================ 7767828subR Sub SetList() ' ◆ List内容を一次元配列で設定。方法、内容は運用に合わせて適宜。Null値不可。   aList = VBA.Array(Empty, "炭俵灰之介", "Alfred", "Benjamin", "Charlie", "David", "Edward" _           , "Frank", "George", "Harry", "Isaac", "Jack", Empty, "King", "London" _           , "Mary", "Nellie", "Oliver", "Peter", "Queen", "Robert", "Samuel", "Tommy") End Sub ' ' ---------------------------- Sub ActTBox(Target As Range) ' FrmTBox 初期化 位置設定 表示 等   n = 0   With FrmTBox     .Object.Value = Empty     .Object.IMEMode = fmIMEModeOff     .Top = Target(1).Top     .Left = Target(1).Left     .Activate     If Not .Visible Then .Visible = True   End With End Sub ' ' ---------------------------- Private Sub HideTBox() ' ESC 処理   DoEvents: DoEvents   FrmTBox.Visible = False   ActiveCell.Activate End Sub ' ' ---------------------------- Sub ValVal(nn As Long) ' List用インデックス n と FrmTBox.Value の管理   If nn < 0 Then nn = 0   n = nn   With FrmTBox     If n > nUB Then ' 割り当ての無いインデックスは数値のまま       .Value = n     ElseIf n = 0 Then       .Value = Empty     ElseIf aList(n) = "" Then       .Value = n     Else       .Value = aList(n)     End If   End With End Sub ' ' ============================ ' ' ============================ 7767828prep Private Sub Prep7767828() ' TextBox 初期設定 利用開始時に一度だけ実行   With OLEObjects.Add(ClassType:="Forms.TextBox.1")     With .Object       .BackColor = &HC0FFFF       .SpecialEffect = fmSpecialEffectFlat     End With     .Height = Range("D5").Height '◆     .Width = Range("D5").Width '◆     .Name = "FrmTBox"     .PrintObject = False     .Visible = False   End With End Sub ' ' ===========================

su-darabusi
質問者

お礼

回答 ありがとうございます お礼が遅くなり、失礼しました このマクロは難しすぎます。 でも、最初の行から順に理解していけば、いつかは・・・・

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

' ' =========ThisWorkbookモジュール========= ' ' ※ Sheet名を正しく指定してください ※ Option Explicit ' ' ---------------------------------------- 7767828we1 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Sheets("Sheet1").OleTxtBx.Visible = False End Sub ' ' ---------------------------------------- 7767828we2 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)   Sheets("Sheet1").OleTxtBx.Visible = False End Sub ' ' =======以上ThisWorkbookモジュール======= ' ' ============Sheet モジュール============ Option Explicit Private n As Long Private aList ' ' ---------------------------------------- 7767828se1 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Intersect(Target, Range("D5:D10")) Is Nothing Or Target.Count > 1 Then ' ◆     If OleTxtBx.Visible Then       n = Empty       OleTxtBx.Visible = False     End If   Else     Call SetTxtBox(Target)   End If End Sub ' ' ---------------------------------------- 7767828se2 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)   If Intersect(Target, Range("D5:D10")) Is Nothing Then Exit Sub ' ◆   Cancel = True   Call SetTxtBox(Target) End Sub ' ' ---------------------------------------- 7767828sr Sub SetTxtBox(Target As Range)  ' TextBox 初期設定   With OleTxtBx     .Top = Target(1).Top     .Left = Target(1).Left     .Height = Target(1).Height     .Width = Target(1).Width     .IMEMode = fmIMEModeOff     .Value = Empty     .Activate     If Not .Visible Then .Visible = True   End With End Sub ' ' ---------------------------------------- 7767828te1 Private Sub OleTxtBx_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   If KeyCode = 27 Then  ' "ESC"     n = Empty     ' OleTxtBx.Visible = False     ActiveCell.Activate   End If End Sub ' ' ---------------------------------------- 7767828te1 ' ' 方向キーなど、未対応のキーがあります。未完成です。 Private Sub OleTxtBx_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   Dim nUB As Long On Error GoTo CrArr_   nUB = UBound(aList) On Error GoTo 0   With OleTxtBx     Select Case KeyCode     Case 48 To 57, 96 To 105  ' 0 To 9, 0 To 9(NumLockedTenKey)       n = Val(n & KeyCode Mod 48)       If n > nUB Then         .Value = n       ElseIf aList(n) = "" Then         .Value = n       Else         .Value = aList(n)       End If     Case 9, 13  ' "TAB", "ENTER"       n = Empty       If .Value <> "" Then ActiveCell.Value = .Value '      ActiveCell.Value = .Value ' ' ←↑ as U like       If Shift Then ' "SHIFT"         If ActiveCell.Row = 5 Then .Visible = False ' ◆         ActiveCell(0).Select       Else         If ActiveCell.Row = 10 Then .Visible = False ' ◆         ActiveCell(2).Select       End If     Case 8, 46  ' "BACKSPACE", "DEL"       n = Empty       .Value = Empty     End Select   End With   Exit Sub CrArr_: ' ' 一次元配列を設定します。方法、内容は運用に合わせて適宜。以下↓はダミー。   aList = VBA.Array(Empty, "炭俵灰之介", "Alfred", "Benjamin", "Charlie", "David", "Edward" _           , "Frank", "George", "Harry", "Isaac", "Jack", Empty, "King", "London" _           , "Mary", "Nellie", "Oliver", "Peter", "Queen", "Robert", "Samuel", "Tommy") Resume End Sub ' ' ==========以上Sheet モジュール========== ' ' ========初期設定(Sheet モジュール)======== ' ' 利用開始時にこのプロシージャだけを貼り付け、一度だけ実行 Private Sub Prep7767828()  ' TextBox 初期設定   Dim oObj As OLEObject   Set oObj = Me.OLEObjects.Add(ClassType:="Forms.TextBox.1")   With oObj     With .Object       .BackColor = &HC0FFFF       .SpecialEffect = fmSpecialEffectFlat     End With     .Name = "OleTxtBx"     .PrintObject = False     .Visible = False   End With End Sub ' ' ============== 初期設定 以上============== こんにちは。お邪魔します。 アイデアひとつでトライした習作みたいなもの(完全ではない)です。 試す場合の手順  新規のブックを用意して  まずSheet1のシートモジュールにSub Prep7767828だけを貼りつけて実行  Sub Prep7767828はもう不要なので削除  Sheet1シートモジュールにシートモジュール用コードを貼り付け  ThisWorkbookモジュールにThisWorkbookモジュール用コードを貼り付け  名前を付けて保存 "ウィンドウ枠固定"、"フィルター"、"アウトライン"などを常時適用したシート、 セルを隠したり描画位置を遷移させるような機能、 などとの併用は、相性悪い、というか奨められません。 本当はUserFormにした方が動作安定します。 でもまあ、ご要望に近い気はしているので、 試して貰えれば仕様を固める足掛かり程度には役に立つんじゃないかな?と。

su-darabusi
質問者

お礼

回答、ありがとうございます マクロはどうにも手がつけかねています。 >ご要望に近い気はしているので はい、これをすこし変えれば、完成しそうですが、その、すこしが難しい。 でも、これを機会にマクロを勉強してみます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

表示だけで良いなら、対象セル範囲を選択して右クリックし、「セルの書式設定」から表示形式を「ユーザー定義」にして、種類の欄に「[=1]"炭俵灰之介";[2]"2の時の文字列"」と入力してみてください。

su-darabusi
質問者

お礼

回答、ありがとうございます さっそく利用してみました。なんだか、拍子抜けするぐらい簡単にできました。 なんでも、やってみなくてはわからない、とはいうものの、教わらなくてはわからないことも たくさんありますよね。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

こんばんは。 >D5からD10のみにおいて これがご相談の核心部分という事ですか? それならまず、IMEにはそういう器用なマネは出来ません。 またご相談の内容自体はエクセルの「オートコレクト」によって実現可能ですが、こちらも「特定のセル範囲」限定は不可能です。 出来ることその1) >1を入力→他の変換候補を表示させることなく、ENTERで確定、 >同時に直下のセルに移動できるようにしたい それがヤリタイ事であるのなら、次のようにしておくと出来ます。 (極めて限定的な機能なので、何でも自由にできるワケじゃありません。という意味です) 手順: 所定のセル範囲を選択 セルの書式設定の表示形式でユーザー定義を選び [=1]"炭俵灰之介";G/標準 と設定しておく 出来ることその2) シート名タブを右クリック、コードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub worksheet_change(byval Target as excel.range)  dim h as range  on error resume next  for each h in application.intersect(target, range("D5:D10"))  if h = 1 then   h = "炭俵灰之介"  elseif h = "abc" then   h = 999  end if  next end sub ファイルメニューから終了してエクセルに戻る 所定のセルに所定の記入を行う。 #参考 ご相談の書き振りが「1ならこれを記入」しかないので、ハードコードしています。 何か一覧表を別に用意できて、それぞれ対応する言葉に書き換えたいと言いたかったのでしたら、上述のようなマクロをちょっと応用すれば簡単に実現できます。特にフォローはしませんので、必要なら自力で挑戦してみて下さい。

su-darabusi
質問者

お礼

回答 ありがとうございます 出来ることその1)を使わせていただきます。その2)のほうは、マクロの敷居が高くて・・・ でも、マクロを自在に使えれば、市販のソフトに負けないくらいのことができるそうで マクロを勉強してみます。

関連するQ&A