プロが教えるわが家の防犯対策術!

EXCEL VBAのインプットボックスのことで教えていただきたいことがあります。

Dim 行数 As Variant
行数 = Application.InputBox("数字を入力してください")

インプットボックスを設置しているのですが、
このインプットボックスがアップされたときにIMEをオフにすることは出来るのでしょうか。
インプットボックスに入力する数字を強制的に半角で入力するようにしたいと考えています。
IMEMode = fmIMEModeOff
をどこかに入れたら出来るのではないかと思って色々やってみましたが、どうしても上手く作動してくれません。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

a = Application.InputBox("数値を入力", Type:=1)


で全角で数値を入力してもaには半角の数字の値が入ります。(ただし数宇以外は入力できない)
Inputboxで
IMEMode = fmIMEModeOff
は無理です。
Inputboxにそっくりのユーザーフォームを作れば可能です。
    • good
    • 1
この回答へのお礼

なるほど、ユーザーフォームをインプットボックス代わりに使えばいいんですね。
コロンブスの卵というか。
a = Application.InputBox("数値を入力", Type:=1)
のやり方でもよかったのですが、エンターキーを押さなくても良いやリ方がないか探していました。
ありがとうございました。

お礼日時:2008/03/20 21:50

私の場合は、作業とは関係ないセルで入力規則をxlIMEModeOffにしてInputBoxを表示させています。


例はA1で入力規則をオフにしてInputBoxを表示させています。

Dim 行数 As Variant
Sheets("sheet1").Range("A1").Select
Selection.Validation.IMEMode = xlIMEModeOff
行数 = Application.InputBox("数字を入力してください。")
    • good
    • 1
この回答へのお礼

なるほど。セルを指定してオフにするというやり方がありましたか!
全然気づきませんでした。
ありがとうございました。

お礼日時:2008/03/20 21:52

http://www.penhagi.com/access/ota2000/204.htm
で載っている。それだけ有名ということかも。
APIを使わないと、IMEモードを触ることは、(一部取り入れられた機能(入力規則など)以外は)無理のようだ。
それとか上記に載っている便法を使うとか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
とりあえず上で教えていただいたやり方でやってみます。

お礼日時:2008/03/20 21:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QInputBoxの入力値を半角数字のみと限定する方法

Excel_VBAで、InputBoxにより半角数字の入力を求めています。入力値が半角数字でない判定をするのに、最も容易な方法はありませんか?"CInt"だと文字列ではダメですし、悩んでおります。

InputBoxに、半角数字のみと限定するようなオプションがあれば良いのですが・・・。

Aベストアンサー

WinXP、IE6、Excel2003では以下のコードで動きました.
正規表現の意味はいろいろサイトをめぐってみてください.

Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = "^\d+$"
strVal = InputBox("何か入力して下さい.")
If regEx.Test(strVal) Then
MsgBox ("OK")
Else
MsgBox ("NG")
End If

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QエクセルVBAでIME入力モードの制御

エクセルVBAでIME入力モードの制御について教えてください。

Sub IMEの現在の状態()
状態 = IMEStatus()
MsgBox 状態 & "です", vbInformation, "IMEの現在の状態"
End Sub

これでIMEStatus関数の戻り値が
1 オンの状態
2 オフの状態
4 全角ひらがな入力モード
5 全角カタカナ入力モード
6 半角カタカナ入力モード
7 全角英数入力モード
8 半角英数入力モード

であることがわかりましたが、逆にIMEの状態を設定するにはどのように記述すればいいのでしょうか?

たとえば、Sheets("AAA").Range("B1:B20")は「半角英数入力モード」にする場合。
DialogSheets("GGG")のダイアローグを呼び出したとき、その中のEditboxes("HHH")には「全角ひらがな入力モード」。

などです。
よろしくお願いします。

Aベストアンサー

えーっと・・・基礎はないけど実践だけで何とかやってるというレベルなんですねぇ。まぁ私も似たようなもんなんですが。
VBAの本など読まれることをお勧めしますよ。貴方の場合、全くの初心者が読むよりは遥かに得られるものがあるかと思います。


IMEモードの切り替えがマクロに記録されない点については、IMEの管轄はエクセルではないためです。まぁそれでもコードから直接操作することは可能なんですが。
前回のマクロはデータ>入力規則からした作業をマクロで記録しただけです。細かく解説すると
特定のセル(Range("A1")とか)に
入力規則(Validation)を
追加する(Add)
という意味合いなんですよ。

で「Editboxes」というのはおそらくTEXTBOXの一種ですよね。その上に入力規則を追加しようとしても反映されないのは当然で、セルにはValidationというプロパティが用意されていますが、TEXTBOXにはありません。
但しTEXTBOXはIMEmodeのプロパティを直接持っていますから
TEXTBOX.IMEmode=1
というような感じで設定できます。

しかしおそらくですが、組み込みダイアログはその辺の自由度がありませんので、Editboxesのプロパティが操作できない、というか元からIMEmodeを持ってないのじゃないのかなと。
ですので最初からフォームで作れと何度も言ってる訳なんですが。今更95時代の遺産を使うのもなんですし。

えーっと・・・基礎はないけど実践だけで何とかやってるというレベルなんですねぇ。まぁ私も似たようなもんなんですが。
VBAの本など読まれることをお勧めしますよ。貴方の場合、全くの初心者が読むよりは遥かに得られるものがあるかと思います。


IMEモードの切り替えがマクロに記録されない点については、IMEの管轄はエクセルではないためです。まぁそれでもコードから直接操作することは可能なんですが。
前回のマクロはデータ>入力規則からした作業をマクロで記録しただけです。細かく解説すると
特...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル マクロで指定フォルダを開く

エクセルにて
指定フォルダを開く、マクロがあれば教えて頂けないでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

こういうものですか?
開くフォルダを変えたいときは targ に与えるパスを変更します。

Sub OpenFolders()
Dim targ As String
targ = "C:\"
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QEXCEL VBAで全選択範囲の解除

EXCEL VBAで
Cells.Select
と書くと、全セルが選択状態になりますが、
これを解除するには、どう書けばよいのでしょうか?

Aベストアンサー

その1
A1 など、適当なセルを選択する。
(回答#1と同じ)

その2
全選択する前の選択範囲に戻る。

全選択前に
変数 = Selection.Address で記憶

全選択後
Range(変数).Select で元の選択範囲を選択

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVBAにてデータが数字か文字かを判定するには

VBAにてデータが数字か文字かを判定するには、
どうすれば良いのでしょうか?

文字数は任意で決まっていません。


123 ← 数字
あい ← 文字
1F  ← 文字
G  ← 文字

Aベストアンサー

こんにちは。

数字か文字かなら、IsNumeric でよいと思いますが、数値か文字かでしたら、VarType を使います。私の場合は、IsNumericは、めったに使いません。VarTypeのほうが多いですね。IsNumeric は、文字通り、文字か数字かで、文字列書式の数字も含まれます。なお、VBAでは、数字は、数値型に型キャストされますので、特に問題は発生しません。

ご参考までに。

Sub Test()
 If VarType(Range("A1").Value) = vbDouble Then
  MsgBox "数値"
 ElseIf VarType(Range("A1").Value) = vbString Then
  MsgBox "文字列"
 Else
  MsgBox "その他" '代表的なものはエラー値です
 End If
End Sub

-----------------------------------------
こちらの場合は、全角数字も、数字として扱われます。

Sub Test2()
 If IsNumeric(Range("A1").Value) Then
   MsgBox "数字"
 Else
   MsgBox "数字ではない"
 End If
End Sub

こんにちは。

数字か文字かなら、IsNumeric でよいと思いますが、数値か文字かでしたら、VarType を使います。私の場合は、IsNumericは、めったに使いません。VarTypeのほうが多いですね。IsNumeric は、文字通り、文字か数字かで、文字列書式の数字も含まれます。なお、VBAでは、数字は、数値型に型キャストされますので、特に問題は発生しません。

ご参考までに。

Sub Test()
 If VarType(Range("A1").Value) = vbDouble Then
  MsgBox "数値"
 ElseIf VarType(Range("A1").Value) = vbString Th...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング