
No.5ベストアンサー
- 回答日時:
>Target.NumberFormat = "#,##0"
でエラーですか、なぜでしょう?
私の使っている環境(2002)ではエラーにならないです。
でも、単に書式の設定をしているだけなので、必要ないといえば必要ないですので削除すればいいと思います。
>状況に応じてチェックを増やすべきかもしれません
自分で言っておいてなんですが、適切な例を思いつかないのですが^^;
これを試していてすぐに、では、12m(12メートルとかの意)と入力したい場合はどうすりゃいいのかとか思いました。
そのために、「Not Target.HasFormula 」のチェックを付けてあります。
なので、先述のような場合は
="12m"
と入力すればいいことになります。
ただ、それでも通常文字列として入力する場合に使う'(アポストロフィを頭に付ける)を使っても変換されてしまいます。
そのような場合でなくても、最後がmでその前が数値として解釈できるが、そう解釈して貰ってはこまるという場合もあるかもしれません。
例えば、
&heemとか入力した時に、数値に変換されてしまいます。(通常だと文字列として評価されます)
あと、逆に10Mの様に大文字の場合も変換して欲しいということもあるかもしれません。
早速の丁寧なご回答ありがとうございます。「チェック」の意味はよくわかりました(ような気がします)。
ちなみに手元に2台のPCがあり、2000と2002両方があるので試してみたところ、先ほどのエラーは2002で出たのですが、2000でやってみたところエラーなしでいけました。BLUEPIXYさんとは逆です、不思議です。(?_?)
No.7
- 回答日時:
こんにちは。
私個人は、100万ギリの数字は、予算組みぐらいですから、年に1、2度ですね。
一通り、みなさんのスレッドを読んで、私も作ってみました。もう食傷気味でしょうから、さらに、みなさんのを押しのけるつもりはありませんので、良かったら試してみてください。
イベント・ドリブン型のように、マクロが外れる心配はありません。しかし、本来は、ワンストロークキーに割り当てたいと思うのですが、それは、入力中のマクロのWaiting 状態では、マクロは利きません。
以下のマクロで、使ってみた感触では、#3さんでおっしゃるようなスピード面で遅くなる、というような印象は感じません。マクロの種類にもよるかと思います。これは、Enterを入れたとたんに変換されています。文字列や文字列として認識されるものは、変換されません。
また、Target.NumberFormat = "#,##0" は、興味深いです。英語版では、ほとんど違いは出ないはずですが、日本語で使用する場合、通常、書式のプロパティは、NumberFormatLocal の方が安全のはずです。
ただ、今回は、書式そのものはワークシート上のユーザー側の設定の範疇ですから、それ必要はありませんね。
'<標準モジュールのみ>
'-----------------------------------------------------
Sub SettingKeys()
'キーの設定
Application.OnKey "{ENTER}", "MegaReplace"
Application.OnKey "~", "MegaReplace"
End Sub
Sub SettingKeysOff()
'キーの解除
Application.OnKey "{ENTER}"
Application.OnKey "~"
End Sub
Private Sub MegaReplace()
Dim myFormula As String
If ActiveCell.HasFormula Then Exit Sub
If ActiveCell.PrefixCharacter = "'" Or ActiveCell.NumberFormatLocal = "@" Then Exit Sub
If ActiveCell.Value Like "*#m*" Then
myFormula = WorksheetFunction.Substitute(ActiveCell.Value, "m", "*1000000")
On Error Resume Next
myFormula = Evaluate(myFormula)
If Err.Number = 0 Then
ActiveCell.Value = myFormula
End If
End If
''ただし、入力後のセルの移動は、下方に行くように設定されていること
ActiveCell.Offset(1).Select
End Sub
'-----------------------------------------------
Sub Auto_Open()
'ブック起動用
Dim Dummy As Long
Call SettingKeys
End Sub
Sub Auto_Close()
'ブック終了用
Call SettingKeysOff
End Sub
.
ありがとうございます。こちらも試してみてぜひ勉強させていただきます。それにしてもいろいろとやりかたがあるんですね、奥が深いです。ポイントつけられず申し訳ありません。確かWendy02さんには以前も何かで助けていただいた記憶があります。また宜しくお願いいたします。
PS 金融機関という仕事柄、自分の私生活には縁のないやたら大きな数字を扱っています。(;^_^A
No.6
- 回答日時:
No.4 takibo です。
こちらは Excel2002 で確認済みです。以下の点を確認してください。
●先程のコードではイベント発生範囲をA列のみに限定しています。A列で試してみてください。
>If Intersect(Target, Range("A:A")) Is Nothing Then
Target → 入力されたセル
Range("A:A") → 指定範囲
必要に応じて指定範囲を書き換えてください。
表が B5:H30 だとしたら Range("B5:H30")
または、B5:H30 に「入力エリア」と名前を定義して、 Range("入力エリア")
●先程のコードで「m」は半角小文字に限定しています。大文字や全角の場合は文字と認識します。
●何かのタイミングでイベントが止まっているかもしれません。
VBEの画面からイミディエイトウィンドウを開いて(Ctrl + G)
Application.EnableEvents=True
と入力して Enter を押してからやってみてください。
できました!!!ありがとうございます。書き込む場所を取り違えていたみたいです。半日もしないで解決できました。皆さんいろいろとありがとうございました。全員の方にポイントをつけたいのですが、ご容赦ください。
No.4
- 回答日時:
処理をするセル範囲を限定させています。
多少は負担を軽減できるかと思います。Range("A:A") の部分は Range("入力範囲") のように名前を使うことができますので範囲が可変の場合はその方が便利かもしれません。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo err1
Application.EnableEvents = False
If Intersect(Target, Range("A:A")) Is Nothing Then
Else
With Target
If Right(.Value, 1) = "m" Then
.Value = Left(.Value, Len(.Value) - 1) * 1000000
End If
End With
End If
Application.EnableEvents = True
err1:
Application.EnableEvents = True
End Sub
【今回の意図とは逸れているかもしれません。参考までに。】
「小数点位置を固定する」機能を切り替える方法 (ショートカットキーに割り当てて使う用に考えてみました)
[ツール]-[オプション]-[編集] の「小数点位置を固定する」設定をオン/オフ切り替えします。設定状況はステータスバーで確認できます。
テンキー以外のキーを使う必要が無いのですが小数点による操作の為、当然のことながら 0.5 → 500,000 とはなってくれません。
その場合は上記イベントと併用するか、設定と入力の桁数を変更するなどの必要があります。
Sub 入力切替()
If Application.FixedDecimal = False Then
Application.StatusBar = "×1,000,000"
Application.FixedDecimal = True
Application.FixedDecimalPlaces = -6
Else
Application.FixedDecimal = False
Application.StatusBar = False
End If
End Sub
ありがとうございます、takiboさんのも試してみたのですが、残念ながらうまくいきません。10mといれるとそのまま10mという文字になってしまいます。
No.3
- 回答日時:
こんにちは
私も、大きな数字を入力することがよくあります。
私は以下のようにしています。これで、目的はおおむね達せられると思います。VBAとかを使用しているのではありません。最初からこうなっています(多分仕様です)。
例)1e6→1,000,000
1e7→10,000,000
1.5e8→150,000,000
要するに、あeい(あ,いは任意の数値)と入力すると、あ×10^い(10のい乗)が入力されると言うことです。eは全角でも半角でも大文字でも小文字でもOKです。
(注意)
Excelのバージョンによっては上記の方法で入力すると、入力セルの表示形式が「標準」の場合、勝手に「指数」となってしまうことがあります。ただ、どうせコンマ区切り等の書式を設定しているでしょうから関係ないですよね。
マクロを使用しておっしゃる機能を実現することはできますが、セルに何かを入力するたびにマクロが起動する格好となるので、処理速度等の面からお勧めできません。
おぉ~(感動)、本当ですね、できます。ありがとうございます。エクセルをもう10年以上使っていますが全く知りませんでした。この方法もぜひ役立てたいと思います。
No.2
- 回答日時:
簡略的には、ThisWorkbookのSheetChangeイベントで以下の様にすればいいと思います。
(状況に応じてチェックを増やすべきかもしれません)Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim x
x = Target.Value
If Not Target.HasFormula Then
If Right(x, 1) = "m" Then
x = Left(x, Len(x) - 1)
If IsNumeric(x) Then
Target.Value = Val(x) * 1000000
Target.NumberFormat = "#,##0"
End If
End If
End If
End Sub
この回答への補足
ありがとうございます。できるようなのですが、エラーメッセージが出ます。
「実行時エラー’1004’:
Range クラスのNumber Formatプロパティを設定できません」
と出て、デバッグを押すと、
Target.NumberFormat = "#,##0"
にハイライトがかかります。
何かまだ設定が必要なのでしょうか?宜しくお願いいたします。
その後「Target.NumberFormat = "#,##0"」を削除してみたところ、エラーは出なくなりました。ありがとうございました。ちなみに(状況に応じてチェックを増やすべきかもしれません)というのは、何をすべきなのか教えていただけますか?VBA・マクロは見よう見真似でやっているもので、スイマセン。そろそろちゃんと勉強しようと考えてはいるのですが。。。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのifで 4 2023/05/16 14:21
- Excel(エクセル) エクセルのマクロについて質問があります。 sheet1に数字を入力してsheet2を印刷したいのです 2 2023/06/07 14:49
- Visual Basic(VBA) 先頭と末尾を指定して連続した数字を入力 1 2022/09/14 13:12
- Excel(エクセル) エクセルでセルに何らかの文字が入力されたらそれを任意の数値として認識させる方法がしりたいです。 3 2023/03/16 20:19
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Visual Basic(VBA) 別シートに順番で貼り付け 2 2023/04/13 19:53
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) エクセルの値を元に図形の色を変えたい 2 2022/05/11 01:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのセル内に全角数字を...
-
Excelで全角の数字が半角になっ...
-
エクセルで文字入力してEnterキ...
-
EXCEL セルの書式設定(ユーザー...
-
Excelの文字列の固定長埋め
-
エクセルで文字列としての指数...
-
平方センチメートルの入力の仕方
-
エクセルで自動的にイコール(...
-
Excelの日付型の入力規則
-
文字の上にバーをつけるには?
-
セルに数字を入れると×1000にな...
-
Excelで【1-1】【1-2】【1-3】...
-
Excelで時間順で並べ替えしたい
-
エクセルで時刻を全角かつコン...
-
入力規則でスペース入力を禁止...
-
excelVBA コンボボックスに時刻...
-
セルの定義
-
エクセルで原子記号等を入力す...
-
エクセルのセルや文字を点滅表...
-
エクセルの表に 「03.30」又は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのセル内に全角数字を...
-
Excelで全角の数字が半角になっ...
-
エクセルで文字入力してEnterキ...
-
エクセルで【0.5日と1日】を表...
-
エクセルのセルや文字を点滅表...
-
セルに数字を入れると×1000にな...
-
Excelで【1-1】【1-2】【1-3】...
-
エクセルで文字列としての指数...
-
Excelで時間順で並べ替えしたい
-
EXCELで特定の文字列を入力→エ...
-
入力規則でスペース入力を禁止...
-
WORD2010 差し込み印刷の時間...
-
Excelで時間を1:30→1.3で表示し...
-
平方センチメートルの入力の仕方
-
少数点以下2桁以上の入力でエ...
-
エクセルで分や秒の合計や平均...
-
EXCEL セルの書式設定(ユーザー...
-
エクセルで自動的にイコール(...
-
文字の上にバーをつけるには?
-
EXCELで勝手に予測入力される
おすすめ情報