
No.6ベストアンサー
- 回答日時:
当方、Excel2010です。
2003でどこまで出来るか分からないのですが、次のことを試してみて頂けないでしょうか。ちなみに2010では動作確認済みです。まず、該当シートのWorksheet_Changeイベントプロシジャに、次のマクロを張り付けます。
入力データはA3セルとしました。A1、A2セルにはA3セルを参照した数式が入っているものとします。
このマクロは、A3セルの値が変更された時に、その小数点以下の桁数を判定して、A1、A2セルの書式を動的に変更します。シートは保護されていると云うことなので、処理の前後に解除/保護を行っています。
それから、1点、確認なのですが、「入力データ:2.00」を入力すると「2」となってしまいます。この場合、小数点以下2桁とは見做せません。これって、文字扱いで入力すると云うことでしょうか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim L As Long
If Intersect(Target, Range("A3")) Is Nothing Then Exit Sub
L = InStrRev(Range("A3").Text, ".")
If L <> 0 Then L = Len(Range("A3").Text) - L
Me.Unprotect
Range("A1").NumberFormatLocal = "0." & String(L + 1, "0") & "_ "
Range("A2").NumberFormatLocal = "0." & String(L + 2, "0") & "_ "
Me.Protect
End Sub
ママチャリ 様
回答ありがとうございます。
私にはやや高度なテクニックなので、検証に手間取りました。
1.2003でも実施可能
早速2010、2003で試してみましたが、どちらもうまく動きました。
適応範囲をセルではなく範囲に設定しても動きますので、私の要望にぴったりでした。
実際のケースでは入力データを離れた場所にあることが多いので、それも試しました。
まずA3に入力して確認した後、A10に変更したところ、2003ではうまく切り替わりま
したが、2010ではA3とA10の両方に反応したかと思うと、A10には反応しないなど、
あれっと思うことがありました。
2.入力データが2.00ではなく2になる問題
実際のケースではあまりないことですが、入力データが整数の場合があるので、この時
は2.00として扱ってほしいのに、2として扱われるのが唯一の難点かと思います。
これが起こりうるのは、例えば10個の入力データのうち、その一つを代表としてA3に
コピーして示す場合を考えます。他の9個は2桁なのに、たまたまそのサンプルセルには、
2.00と打ち込まれても2と表示され、整数として処理されてしまいます。
3.欲を言えばこんなことができないでしょうか?
入力データが10個ある場合、10個すべてが同じ桁数であることをチェックし、違う場合は
警告を発する。その上で、そこで取得した小数点以下桁数を用いて他のセルの表示を設定する。
こうするとさらに実用性が高まるし、2の難点を避けることも可能になります。
小数点以下の桁数は次式で検出できます。=LEN(A1)-FIND(".",A1)
大変実用性のある技をご紹介いただきまして誠にありがとうございました。助かりました。
No.7
- 回答日時:
No.4 ママチャリです。
「欲を言えば…」の件ですが、こんな感じですかね。
入力データのセルは、A3およびB1~B9の10ヶ所としました。その中で小数点以下の桁数が一番多いものに合わせて表示するようにしています。警告は出していません。
前回の回答を検証されているようなので、細かい説明は省略させていただきます。
ちなみに、「=LEN(A1)-FIND(".",A1)」って、小数点が無い場合、ゼロになりますか?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Dim r As Range
Dim maxLen As Long
Dim L As Long
Set myRng = Range("A3,B1:B9")
If Intersect(Target, myRng) Is Nothing Then Exit Sub
For Each r In myRng
L = InStrRev(CStr(r.Value), ".")
If L <> 0 Then L = Len(CStr(r.Value)) - L
If L > maxLen Then maxLen = L
Next
Me.Unprotect
myRng.NumberFormatLocal = "0." & String(maxLen, "0") & "_ "
Range("A1").NumberFormatLocal = "0." & String(maxLen + 1, "0") & "_ "
Range("A2").NumberFormatLocal = "0." & String(maxLen + 2, "0") & "_ "
Me.Protect
End Sub
ママチャリ 様
またまたありがとうございます。
「=LEN(A1)-FIND(".",A1)」はマクロの中ではなく、セル計算の中で入力時に警告を発するように
設定して見ようと考えております。小数点のない場合は表示されませんので、その中で工夫してみます。
これで完璧になりました。
No.5
- 回答日時:
> 計算表は保護されているため、使用者は各種の設定を変更することができません。
> ですので、入力データに応じて自動的に変化してほしいのです。
入力データに応じて自動的に変化するようにするには、設定を変えるしかないです。
関数を使うのでも、シートのセルにその関数を組み込む、マクロを使う等しか思いつきません。
abcdefgh.ijklmnopqr のようなもともと長い桁数表示が必要な場合で、それを、abcd efhg .ijkl mnop rq と入力したセルとは別の複数のセルにも分割表示させることは、関数だけでも可能です。 しかし、関数をあらかじめ組み込むには、シートをいじるしかないです。
前に回答した表示変更も、該当セルにあらかじめ書式を指数に指定するだけですが、使用者にそうしたことが許されず、ベースとなるシートを配布している者も設定変更が出来なければ、手の打ちようがないです。
既に計算表は保護されていて、許容されたセルへのデータ入力しかできないのであれば、ちょっと、入力データに応じて自動的に変化するようにする方法は考えつきません。
なおセル幅(列幅)を一時的に広げてデータ内容を目視確認出来ればいいのであれば、「縮小して全体を表示する」になっていても、目的は達成出来そうです。
幅を一時的に広げて確認し、その後に戻すのもダメなんですか。
moto_koukousei 様
重ね重ねありがとうございます。 やはりだめでしょうか?
この件を投稿する前に、ネット検索をかなりしたのですが良いサイトが見つかりませんでした。
割合と単純でかつ多くの人に必要とされる要求だと思うのですが、それに対応できる策がないのですね。
皆様には大変なご足労をおかけして申し訳なく思っております。でもまだあきらめた訳ではないのですが・・・。
No.4
- 回答日時:
こんばんは
一応、関数だけでご希望のことはできると思います。
①入力値の2と2.00を区別するためには、入力セルの表示形式を文字列にします。
次に表示セルですが、入力セルの文字数に合わせて表示すれば良いので、Left関数を使うことを考えました。
Left(計算結果 , Len(入力セル)+1)
なお、これだと小数点(.)も文字数としてカウントされるので、2と2.00のあいだでうまく行きませんでした。
小数点を含むときと含まないときで分岐します。
②If(Iserror(Find( "." , 入力セル , 1 )) , Left(計算結果,Len(入力セル)+2) , Left(計算結果,Len(入力セル)+1))
↓ 入力セルをA列、計算式をA1*6/7でやってみた結果です。
※なお、これだと切り捨てられた数値が使用できなくなるので、引き続きこの数値を使用する場合には、隠しセルを利用するなど工夫してください。

tyusonic 様
回答ありがとうございます。
種々工夫していただいて恐縮です。
実はこの計算はまだまだ延々と続きますので、四捨五入や切り捨てなどをすると誤差がたまる結果となり、好ましくありません。
ありがとうございました。
No.3
- 回答日時:
例えば、1234.567890123のような14個の文字列になるときは、全体縮小表示だと、セル幅によっては、小さくなりすぎにはなると思います。
四捨五入や切り捨てなどの丸め処理をせずに、「表示だけを少なくする」とはどのようなイメージでしょうか。
エクセルの数値の場合、「1234.567890123」は、「1234.56789」と表示するのが標準です。
小数点以下の表示を二桁に指定すれば、「1234.57」と表示されます。
小数点以下の表示を11桁に指定すれば、「1234.56789012300」と表示されます。
表示形式を指数指定し、小数点以下の表示を2桁に指定すれば、「1.23E+03」と表示されます。
これらは"表示"なので、セルの中にある計算結果や直接入力した数値の値を変更したことにはなりません。
エクセルの該当セルにあらかじめ表示形式の指定をしてから、入力を依頼した場合には、そのセルの表示だけは短くも出来ます。
http://www.slownet.ne.jp/sns/area/pc/reading/pc_ …

moto_koukousei 様
回答ありがとうございます。
No.2の返礼欄に書きましたように、入力データの桁数は様々です。
No.1の返礼欄に書きましたように、計算表は保護されているため、使用者は各種の設定を変更することができません。
ですので、入力データに応じて自動的に変化してほしいのです。
よろしくお願いします。
No.2
- 回答日時:
2003ですから条件付き書式は使えませんね…
1つのセルでデータによって表示を変えたいんですよね?
入力セルと表示セルを分けるとかくらいしかできないのではないでしょうか。
表示セルにはTEXT関数でデータの種類ごとに表示形式を分岐して入れるようにして。
後はVBAでしょうかね。
例えばどんな場合があるのでしょうか?
データの内容によってはデータは整数でも1.00などのように必ず小数第2位まで表示しなければいけないとかですか?
chonami 様
回答ありがとうございます。
例を書きます。
例1
入力データ:2.32
計算結果セルA1:3.24368978 ⇒ 望ましい表示は 3.243 (入力データより1桁多い)
計算結果セルA2:1.56432534 ⇒ 望ましい表示は 1.5643 (入力データより2桁多い)
例2
入力データ:2
計算結果セルA1:2.43678452 ⇒ 望ましい表示は 2.4 (入力データより1桁多い)
計算結果セルA2:1.24389463 ⇒ 望ましい表示は 1.24 (入力データより2桁多い)
例3
入力データ:2.00
計算結果セルA1:2.43678452 ⇒ 望ましい表示は 2.436 (入力データより1桁多い)
計算結果セルA2:1.24389463 ⇒ 望ましい表示は 1.2438 (入力データより2桁多い)
こういう表示が関数を使って可能であれば、教えてください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのセルの書式設定・ユーザー定義の条件設定について 1 2022/08/17 21:56
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- 教育学 エクセルで小数点以下を四捨五入について教えてください。 2 2023/04/05 17:33
- 数学 小数点の計算についてです。 答えは与えられた数字の中で最も少ない桁に四捨五入で合わせるのですが、ひと 2 2023/04/04 15:19
- Excel(エクセル) Excelのtextboxへの入力で小数点以下に0が続く場合でも正しく表示したい 3 2022/04/11 13:53
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- 統計学 教えてください! あるくじ引きには5枚に1枚の割合でアタリが入っていると宣伝しているが、実際には20 7 2023/05/29 09:10
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで同じセルに箇条書きをし...
-
A1セルに入力したら、入力時間...
-
空白でないセルの値を返す方法...
-
エクセルで既に入力してある文...
-
【Excel】セル内の時間帯が特定...
-
エクセル:コメントのようなも...
-
入力したところまでを自動的に...
-
【エクセル】指定したセルに入...
-
Excelでセルに入力されたカラー...
-
IF関数で0より大きい数値が入力...
-
excel 関数にて文字を0として認...
-
エクセルの数式がかぶって、選...
-
【マクロ】開いているブックの...
-
Excel:文字と数字の組合せ、次...
-
参照先セルに値が入っていない...
-
ExcelVBAでセルを編集状態にす...
-
スプレッドシートで 時間入力の...
-
yyyy/mm/ddからyyyy/mmへの変換
-
エクセルで、数値を月として認...
-
Excel 大小比較演算子による「...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じセルに箇条書きをし...
-
A1セルに入力したら、入力時間...
-
エクセルで既に入力してある文...
-
空白でないセルの値を返す方法...
-
入力したところまでを自動的に...
-
Excelでセルに入力されたカラー...
-
IF関数で0より大きい数値が入力...
-
yyyy/mm/ddからyyyy/mmへの変換
-
【Excel】セル内の時間帯が特定...
-
excel 関数にて文字を0として認...
-
Excel:文字と数字の組合せ、次...
-
エクセル セルに文字を入力した...
-
参照先セルに値が入っていない...
-
マクロ無しで時間自動で記入を...
-
エクセルで一定の数値を超えた...
-
エクセルの数式がかぶって、選...
-
Excel 大小比較演算子による「...
-
エクセル:コメントのようなも...
-
【エクセル】指定したセルに入...
-
エクセルで、特定のセルの内容...
おすすめ情報