- ベストアンサー
EXCELで「小数の入ったセル」だけを見つけたいのです
EXCEL2000を用いて統計表を作成しています。 そのとき「1人あたり販売額」など小数点以下の値が出る項目があります。 今までは印刷物を納入していたため特に問題にはならなかったのですが、 発注先から「小数点以下はROUNDし、数式も全て値にしてから納入すべし」 との指示が来ました。 数式はコピー→形式を選択して貼り付け→値複写 でなくなりますが、 小数点以下の値が入っているセルを見つけるのがわずらわしくて困っています。 こうした場合、編集→ジャンプ 等、簡便な方法はないでしょうか。 ご存知の方、どうぞよろしくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 基本的には、#5 の mike_g さんに賛成なのですが、、今後のものならなおさら 作り変えれば済む話ですしね。 が、取り合えず、表示形式で小数点が隠されていると結構見つけるの大変かも しれないので、VBA でやってみました。 Option Explicit Sub 少数をもつセルを選択() Const cnsPROC_NAME = "少数をもつセル" Dim rngNum As Range Dim C As Range Dim rngRet As Range Dim blnFlag As Boolean Dim intRes As Integer On Error Resume Next If UCase$(TypeName(Selection)) <> "RANGE" Then Exit Sub If Selection.Count = 1 Then ' 全セルの内、数値のあるセルのみ検索対象とする Set rngNum = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants, xlNumbers) Else ' セルの使用領域かつ選択範囲の内、数値のあるセルのみ検索対象とする Set rngNum = Intersect(Selection, ActiveSheet.UsedRange) Set rngNum = rngNum.Cells.SpecialCells(xlCellTypeConstants, xlNumbers) End If ' 少数をもつセルを検索 If Not rngNum Is Nothing Then For Each C In rngNum With C ' シリアル値は対象外とする If Not IsDate(.Value) And InStr(.Text, ":") = 0 And _ .Value - Int(.Value) > 0 Then If rngRet Is Nothing Then Set rngRet = C Else Set rngRet = Union(rngRet, C) End If End If End With Next C If Not rngRet Is Nothing Then blnFlag = True rngRet.Select End If End If ' 問い合わせて終了処理 If Not blnFlag Then MsgBox "該当セルはありません", vbInformation, cnsPROC_NAME Else intRes = MsgBox( _ Prompt:="該当セルを選択しました。" & vbLf & vbLf _ & "・[はい] Round 関数で数値を丸めます" & vbLf _ & "・[いいえ] このまま終了します", _ Buttons:=vbYesNo + vbExclamation + vbDefaultButton2, _ Title:=cnsPROC_NAME) If intRes = vbYes Then Application.ScreenUpdating = False For Each C In rngRet C.Value = Application.Round(CCur(C.Value), 0) Next C Application.ScreenUpdating = True MsgBox "終了しました。" & vbLf & vbLf _ & "合計欄等が端数で変化しているかもしれません。" & vbLf _ & "ご注意下さい。", vbInformation, cnsPROC_NAME End If End If Set rngRet = Nothing Set rngNum = Nothing End Sub
その他の回答 (6)
- NCU
- ベストアンサー率10% (32/318)
ま、こんなものでよいのではないかと。 Sub 表示未満の端数除去() Application.ScreenUpdating = False Dim rng As Range With ActiveSheet.UsedRange .Value = .Value For Each rng In .SpecialCells(xlCellTypeConstants, xlNumbers) rng.Value = rng.Text Next End With MsgBox "正常に終了しました。", , "表示未満の端数除去" End Sub
対策は簡単です。 最初から全ての計算式の結果が、小数点以下をROUNDして、整数になるようにしておけば良いのです。 「小数点以下の値が入っているセルを見つける」なんてのは愚の骨頂かと。
- takachan7272
- ベストアンサー率29% (179/616)
No.1のtakachan7272です。 表示だけ変えてもダメなんですね。 =IF(MOD(A1,1),ROUND(A1,0),A1)ではどうでしょうか? この例は、別セルに結果を出すやり方ですが・・・ 小数点以下が有るか無いかは、数値の1で割って余りが出るかどうかで判断します。 余りが有る場合はROUND関数で四捨五入。 余りが無い場合は、そのまま対象セル値を表示です。 ちょっと手を加えれば、別セルへ結果を出さない方法も可能ですね。
- takkuni
- ベストアンサー率24% (166/676)
ROUND関数で値を求め、値複写で貼り付け。 不要な列なり行は非表示にするか削除する。 この方が楽な気がします。
- 4500rpm
- ベストアンサー率51% (3211/6286)
2002ですが、同じだと思います。 編集→検索で「.」を検索すると入力した小数点以下の値が入っているセルが見つかります。 それと >「小数点以下はROUNDし、数式も全て値にしてから納入すべし」 元の数式で四捨五入しておかないと計算結果に誤差を生じませんか? 数式で計算したものを更に計算すると見かけの値と実際の値が違うことによってつじつまが合わない事がありましたので。 それと元の値をround関数を使って整数にしておかなければ、コピぺしても小数点が残ります。
- takachan7272
- ベストアンサー率29% (179/616)
〔編集〕→〔検索〕でピリオドを検索する方法が1つ しかし、面倒ですよね。 数値が指定されているセル範囲を選択して、書式設定バーの中の小数点表示桁上げを何回か押します。 (小数点以下の表示を揃える為) 次に小数点表示桁下げを押します。 小数点以下は四捨五入されて整数になります。 関数を使用する必要はありません。 ダメですかね?
お礼
早速のご回答ありがとうございました。 >〔編集〕→〔検索〕でピリオドを検索する方法が1つ なるほど、その手がありましたか。有難うございました。 >数値が指定されているセル範囲を選択して、書式設定バーの中の小数点表示>桁上げを何回か押します(小数点以下の表示を揃える為) >次に小数点表示桁下げを押します。小数点以下は四捨五入されて整数になります。 うーん、この方法ですと表示は整数化されますが、実際のセル値が変化しませんでした。 もう少し試してみます。有難うございました。
お礼
早速のご回答有難うございました。 >編集→検索で「.」を検索すると入力した小数点以下の値が入っているセル >が見つかります。 これでやってみます。有難うございました。 (また、増長して申し訳ございませんが、もし、もしもご存知でしたら「 . を含むセルを一気に選択」する方法がありませんでしょうか。そうですと作業が大変楽になるのです) >元の数式で四捨五入しておかないと計算結果に誤差を生じませんか? ご指摘有難うございました、注意いたします。 ありがとうございました。