[[20040818144128]] 『整数、小数、文字列の表示』(K) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『整数、小数、文字列の表示』(K)

セルA1に条件付の3種類のパターンを打ち込み、
そのままセルB1に表示したいです。

3種類のパターンは、

1.整数→通貨のような桁区切り。(ただし、¥マークなし。)
また、A1には整数を打ち込むと自動で桁区切りをするように書式設定する。

2.小数→小数を、そのまま表示。条件として、1.000のように末尾が0でも3桁まで
小数を表示します。また、A1も末尾が0でも小数を表示したい。

3.文字列→そのまま表示。また、セルA1が空白のときはB1も空白で表示。

セル内が、整数の場合、少数の場合、文字列の場合と判別させればいいと思うのですが
論理式がいまいちわかりません。
教えてください。

*すみません、多少修正しました。

[エクセルのバージョン]
Excel2003
[OSのバージョン]
WindowsXP


 A1に入力するとして、入力したA1セルの書式を変える事はマクロを使わないと出来ません。
 A1の書式はあっちに置いといて・・・・                                       『A1書式』
 =IF(A1="","",IF(ISERR(MOD(A1,1)),TEXT(A1,"@"),IF(MOD(A1,1)=0,VALUE(TEXT(A1,"#,##0")),VALUE(TEXT(A1,"0.000")))))
 D1に=IF(A1="","",IF(ISERR(MOD(A1,1)),"",B1*C1))
 で、どうでしょう。
(川野鮎太郎)
 あれ?いつのまにか計算するのが無くなりましたね(^_^A;
 (川野鮎太郎)

川野鮎太郎様

お返事ありがとうございます。(計算式は、いらなくなりました・・・。(^^;))
早速、試してみたのですが、A1に1.000を入力した場合にB1は1が表示されてしまいます。1.000を表示することは出来ますか?

また、A1の表示もなんとかなりませんでしょうか?
というのも、A1も整数の場合は桁区切り、小数の場合は3桁表示したいのですが、
書式設定してもどちらか片方しか設定できないので困ってます。
書式設定も条件付けることはマクロを使用すれば出来るのでしょうか?(k)


 不細工ですが、やってみました。
 該当シートを右クリックしてコードを表示させて、貼り付けてみてください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim col, r1 As Long

        If Target.Column <> 1 Then Exit Sub
        r1 = Target.Row
        col = Target.Column
        On Error Resume Next
        If Cells(r1, col).Value Mod 1 = 100 Then
           Cells(r1, col).NumberFormatLocal = "@"
        Else

                If Cells(r1, col).Value / Round(Cells(r1, col).Value, 0) = 1 Then
                   Cells(r1, col).NumberFormatLocal = "#,##0;-#,##0"
                Else

                    If Cells(r1, col).Value / Round(Cells(r1, col).Value, 0) > 0 Then
                       Cells(r1, col).NumberFormatLocal = "0.000"
                    Else
                    End If

                End If

        End If

 End Sub

 (川野鮎太郎)


川野鮎太郎様

重ね重ねありがとうございます。
早速、試してみたのですが、マクロについては初心者の為
コードを表示して貼り付けまで出来たのですが、
貼り付けてから、どのように使用すればよいかわかりません。
度々、申し訳ありませんが使用方法も教えて頂けませんでしょうか?
(k)


 貼り付けたら、該当シートのA列に何か入力してみてください。
 仮に1000と入力したら1,000となるはずです。

 少し修正したので下記をお使いください。

 Private Sub Worksheet_Change(ByVal Target As Range)
 'A列の表示形式を自動で変えるマクロ
        Dim c1, r1 As Long

        If Target.Column <> 1 Then Exit Sub
        r1 = Target.Row
        c1 = Target.Column
        On Error Resume Next
        If Target Mod 1 = 100 Then
           Cells(r1, c1).NumberFormatLocal = "@"
        Else

                If Target / Round(Target, 0) = 1 Then
                   Cells(r1, c1).NumberFormatLocal = "#,##0;-#,##0"
                Else

                    If Target / Round(Target, 0) > 0 Then
                       Cells(r1, c1).NumberFormatLocal = "0.000"
                    Else
                    End If

                End If

        End If

 End Sub

 (川野鮎太郎)

 弥太郎さん、これもSelect Case で分けれるんでしょうか(^_^A;
 名指しですみません_/ ̄|○ il||li
 (川野鮎太郎)

川野鮎太郎様

ありがとうございます。
早速、試してみたら見事条件をクリアできました。
ちなみに、参照セルの範囲が実は、E11〜E19までなのですが
この範囲内だけ、上記のマクロを設定はできますか?
本当に、度々注文してしまい申し訳ありませんが、宜しくお願いします。(k)

追伸

あ・・・。
やっぱり、1.000(小数)表示がこれもできません・・・。


範囲の変更は以下で、

 Private Sub Worksheet_Change(ByVal Target As Range)
 'E11:E19までの表示形式を自動で変えるマクロ
    Dim c1, r1 As Long

        If Target.Column <> 5 Then Exit Sub
        If Target.Row < 11 Then Exit Sub
        If Target.Row > 19 Then Exit Sub
        r1 = Target.Row
        c1 = Target.Column
        On Error Resume Next
        If Target Mod 1 = 100 Then
           Cells(r1, c1).NumberFormatLocal = "@"
        Else

                If Target / Round(Target, 0) = 1 Then
                   Cells(r1, c1).NumberFormatLocal = "#,##0;-#,##0"
                Else

                    If Target / Round(Target, 0) > 0 Then
                       Cells(r1, c1).NumberFormatLocal = "0.000"
                    Else
                    End If

                End If

        End If

 End Sub

 1は整数なので対応できませんのでm(_ _)m
 仮に1だけでよければ、少し待ってください。

 (川野鮎太郎)

 1だけは対応させました。1式入力の場合なのかな?(^_^A;

 Private Sub Worksheet_Change(ByVal Target As Range)
 'E11:E19までの表示形式を自動で変えるマクロ
    Dim c1, r1 As Long

        If If Target.Column <> 5 Or Target.Row < 11 Or Target.Row > 19 Then Exit Sub
        r1 = Target.Row
        c1 = Target.Column
        On Error Resume Next
        If Target Mod 1 = 100 Then
           Cells(r1, c1).NumberFormatLocal = "@"
        Else

            If Target = 1 Then
               Cells(r1, c1).NumberFormatLocal = "0.000"
            Else

                If Target / Round(Target, 0) = 1 Then
                   Cells(r1, c1).NumberFormatLocal = "#,##0;-#,##0"
                Else

                    If Target / Round(Target, 0) > 0 Then
                       Cells(r1, c1).NumberFormatLocal = "0.000"
                    Else
                    End If

                End If

            End If

        End If

 End Sub
 (川野鮎太郎)

 割り込み失礼いたします。
相談者、(k)さんの意図は
「1以下の数値であれば小数点以下3桁まで表示」
「入力値が1より大きい時は必ず整数値入力であり、表示は桁区切り」
「文字列は文字列として表示」
のように私は読み取ったんですが、違いますか?
「特定値が1以下」とした場合、上記3条件を
満たす表示形式のユーザー設定は下記。
 
[<=1]0.000;#,##0;@
[<-1]-#,##0;[<=1]0.000;#,##0;@  /// ←追加 ///( -1〜1 を0.000表示)
  
特定の数値を区切りとして表示形式を切り替える場合は
このような設定になります。
 
相談者、(k)さんの表現する「小数」が「小数部分を含
む数値」という意味であれば、表示形式では対処できません。
表示形式では「小数部分を含むかどうか」を判断する仕組みが
用意されていないためです。
川野さんにマクロでがんばってもらいましょう(笑)。
(KAMIYA)

 Σ('◇'*)エェッ!?
 >川野さんにマクロでがんばってもらいましょう(笑)。
 って・・・・_/ ̄|○ il||li
 もう頑張れませんよ〜>_<
 最後に提示したものでクリアできている事を祈って(((((* ̄0 ̄)†~~~ アーメン
 (川野鮎太郎)

川野鮎太郎様・KAMIYA様

お返事ありがとうございます。
レスが遅くなり申し訳ありません・・・。
実は、KAMIYAさんのおっしゃられるとおり、1.000の他の整数も小数が含む場合は
小数で表示をしたいのです・・・。(EX→2.000、35.000、100.000、・・・etc.)

条件のA1の表示はあきらめますので、B1への表示はなんとか上記のように整数でも小数が含む場合は小数を表示したいのです。

実際に表示したいセルを言いますと、上にも書きましたがAにあたるのが
E11〜E19で、BにあたるのがE33〜E41になり、ここに表示させたいのですが
小数を表示する時は、必ずF11〜F19には「㎥」を入力します。
なので、この条件を使って小数を表示させることは可能でしょうか?
また、E11〜E19は書式設定で文字列にして、小数の表示はさせて、桁区切りは
E33〜E41に表示できれば構わないことにします。
というのも、E11〜E19は書類の控えになって、E33〜E41はお客様にお出しする書類に
なるので、今回のようなことになっております。
ご面倒ですが、何卒宜しくお願いいたします。
(条件式でも、マクロでも簡単なほうで作ってください。)
(k)


 _/ ̄|○ il||liがくり、祈り虚しく条件に合いませんでしたか(^_^A;
 ㎥以外では.000表示は無いのですね。
 ㎥を入力することを条件にすれば何とかなるのかな?( ̄ー ̄;A アセアセ・・・
 >E11〜E19は書式設定で文字列にして、小数の表示はさせて、桁区切りは
 >E33〜E41に表示できれば構わないことにします
 これは、どういう意味でしょう。
 仮にE11が2000.000だった場合、E33の表示は?2,000? OR 2,000.000?

 (川野鮎太郎)

わかりづらくてすみません。。
E11が2000.000の場合は、E33は2,000.000になります。

最初に教えてもらった計算式をいじってみたら、なんとか出来ちゃいました!

E33=IF(F11="㎥",TEXT(E11,"#,###.000"),IF(E11="","",IF(ISERR(MOD(E11,1)),TEXT(E11,"@"),IF(MOD(E11,1)=0,TEXT(E11,"#,##0"),TEXT(E11,"0.000")))))

この式で、上の条件を満たすことは可能でしょうか???
(k)


 可能かどうか、いろいろと代入してみてお試しになって、不具合を教えていただいたほうがよろしいかと(^_^A;
 (川野鮎太郎)

 ㎥は、機種依存文字(?)みたいなので、マクロでは対応出来ないようです。
 従来どおりm3で入力は可能ですか?
 それでよければ、下記でお試しください。
  Private Sub Worksheet_Change(ByVal Target As Range)
 'E11:E19の表示形式を自動で変えるマクロ
  Dim c1, r1 As Long

  If Target.Column <> 5 Or Target.Row < 11 Or Target.Row > 19 Then GoTo Line01

  r1 = Target.Row
  c1 = Target.Column

  On Error Resume Next

     If Target Mod 1 = 100 Then
           Cells(r1, c1).NumberFormatLocal = "@"
        Else

            If Target - Int(Target) > 0 Or Cells(r1, c1 + 1) = "m3" Then
               Cells(r1, c1).NumberFormatLocal = "#,##0.000;-#,##0.000"
            Else

                If Target - Int(Target) = 0 Then
                   Cells(r1, c1).NumberFormatLocal = "#,##0;-#,##0"
                Else

                End If

            End If

        End If

 Line01:

 If Target.Column <> 6 Or Target.Row < 11 Or Target.Row > 19 Then Exit Sub

 r1 = Target.Row
 c1 = Target.Column

        If Cells(r1, c1) = "m3" Then
           Cells(r1, c1 - 1).NumberFormatLocal = "#,##0.000;-#,##0.000"
        Else

           Cells(r1, c1 - 1).NumberFormatLocal = "#,##0;-#,##0"

        End If

 End Sub

 E33の数式は
 =IF(F11="m3",TEXT(E11,"#,###.000"),IF(E11="","",IF(ISERR(MOD(E11,1)),TEXT(E11,"@"),IF(MOD(E11,1)=0,TEXT(E11,"#,##0"),TEXT(E11,"0.000")))))

 (川野鮎太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.