Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5020 / 13644 ツリー ←次へ | 前へ→

【53058】セルの表示形式の変更 多摩川 07/12/13(木) 10:08 質問[未読]
【53061】Re:セルの表示形式の変更 ハト 07/12/13(木) 10:55 発言[未読]
【53062】Re:セルの表示形式の変更 多摩川 07/12/13(木) 11:25 お礼[未読]

【53058】セルの表示形式の変更
質問  多摩川  - 07/12/13(木) 10:08 -

引用なし
パスワード
   こんにちは。
また質問させてください。

整数の場合は小数第1位まで表示でそれ以外はそのままの表示形式に変更したいと思っています。
 変更前 変更後
 0    0.0
 1    1.0
 12345  12345.0
 1.23  1.23 (そのまま)
 1.3E+03 1.3E+03 (そのまま)

そこで以下のようなコードを考えたました。
Sub test()
  Dim i As Long
  For i = 0 To 2
    Debug.Print Selection.Offset(, i) Mod 1
    If Selection.Offset(, i) Mod 1 = 0 Then
      Selection.Offset(, i).NumberFormatLocal = "0.0"
    Else
      Selection.Offset(, i).NumberFormatLocal = "G/標準"
    End If
  Next i
End Sub

ワークシート関数のModでは 1.23 は 0.23 と得られるのですが、上記コードでは、0 が帰ってきます。
このため、予想通りの表示形式になりません。

Mod演算子のヘルプを読むと「浮動小数点数は整数に丸められます」とかかれており、これが原因だと思うのですが・・・
どのようにしたら良いのでしょうか?
ご教授願います。

【53061】Re:セルの表示形式の変更
発言  ハト  - 07/12/13(木) 10:55 -

引用なし
パスワード
   ▼多摩川 さん:

Modを使うのは諦めて、考え方を変えてみましょう
>    If Selection.Offset(, i) Mod 1 = 0 Then
ここで判断したいのは、整数かどうかですよね?
INT関数とか使えば、その数の整数部分だけだ抽出できますから
それと元の値を比べてみてはどうでしょうか?

【53062】Re:セルの表示形式の変更
お礼  多摩川  - 07/12/13(木) 11:25 -

引用なし
パスワード
   ▼ハト さん:
こんにちは。

>INT関数とか使えば、その数の整数部分だけだ抽出できますから
>それと元の値を比べてみてはどうでしょうか?

Mod は諦めて Int で下記のようにしてみました。

Sub test()
  Dim i As Long
  For i = 0 To 2
    If Int(Selection.Offset(, i)) = Selection.Offset(, i) Then
      Selection.Offset(, i).NumberFormatLocal = "0.0"
    Else
      Selection.Offset(, i).NumberFormatLocal = "G/標準"
    End If
  Next i
End Sub

希望通りの結果が得られました。
ありがとうございました。

5020 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free