- ベストアンサー
エクセルのセルを整数化する方法
宜しくお願いします。 エクセルで20列100行20シートほどのブック形式の表があります。 表内の数値を小数点1桁目で四捨五入をして整数化したいと思います。(表示形式で見た目上の整数化でなく、実際の数値として整数化したい。) 表内は複雑に計算式が入っていて、一部は他のブックからリンクが張ってあります。 また、1部のセルはパーセント(%)表示になっていて、そのセルに関しては何も変更をしないというのが条件です。 セルをひとつずつROUND関数などを使っての変換では気が遠くなります。 何か簡単に変換できる方法はないでしょうか。 期限が本日中で本当に困っています。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
No1,6,7です。 > 実行時エラー”13”: > 型が一致しません。 多分、どこかのセルがエラー(VALUE!とかDIV/0!など)になっているのだと思います。 では、こう変えてください。エラーのセルはスキップさせます。 Sub test01() For Each sh In Worksheets For Each c In sh.UsedRange If Not (IsError(c)) Then If c <> "" And IsNumeric(c) Then If InStr(c.NumberFormatLocal, "%") = 0 Then If Left(c.Formula, 1) = "=" Then c.Value = "=ROUND(" & Right(c.Formula, Len(c.Formula) - 1) & ",0)" Else c.Value = Round(c.Value, 0) End If End If End If End If Next c Next sh End Sub
その他の回答 (7)
- merlionXX
- ベストアンサー率48% (1930/4007)
No1&6です。 VBAのコードが最後 End Su になっていましたがEnd Subとしてください。 一応、念のため使用方法も書いていきます。 Alt+F11キーでVisualBasicEditorを呼び出し、メニューの挿入で標準モジュールを表示させたら、No6で書いたコード(Sub~End Sub)をコピペしてみてください。 Alt+F11キーで再度ワークシートに戻ったら、メニューのツール、マクロ、マクロで出てきたtest01を実行します。
お礼
ご回答有難う御座います。 お教え頂きました通り実行してしばらくすると 実行時エラー”13”: 型が一致しません。 と表示され デバッグをクリックすると If c <> "" And IsNumeric(c) Then の行の背景が黄色くなっている状態です。 どこか操作を間違ったのでしょうか。 また、エクセルの内容を見てみると1ページ目は大丈夫のようですが、2ページ目の途中まで実行されているようです。 もしお時間があるようでしたら、大変申し訳御座いませんが、宜しくお願いします。
- merlionXX
- ベストアンサー率48% (1930/4007)
No1です。 おまたせしました。 数式でも数値でもこれでいけると思います。 ブック内の全シートに作動します。 かならず控えをとってからやってみてください。 Sub test01() For Each sh In Worksheets For Each c In sh.UsedRange If c <> "" And IsNumeric(c) Then If InStr(c.NumberFormatLocal, "%") = 0 Then If Left(c.Formula, 1) = "=" Then c.Value = "=ROUND(" & Right(c.Formula, Len(c.Formula) - 1) & ",0)" Else c.Value = Round(c.Value, 0) End If End If End If Next c Next sh End Su
具体的な表が提示されているなら、最も効率的な手法も提案されるかも知れません。 提示もしないで「期限が本日中で本当に困っています」は虫が良過ぎます。 それから「小数点1桁目で四捨五入」でなく「小数点1桁以下で四捨五入」あるいは「1未満を四捨五入」と表現するのが一般的です。
お礼
ご回答有難う御座います。 >> ~虫が良過ぎます。 確かにその通りですね。 ご迷惑をおかけして申し訳御座いません。
VBAなら・・・ とりあえず1シートに対する処理です。 %の表示形式「0%」の部分はなにもしません。 他の部分はROUND関数の式に修正します。 範囲は数値の入っている必要なものに修正して下さい。 数値以外のセルを含むとおそらくエラーとなります。 Sub test() Dim MyRng1 As Range, MyRng2 As Range Set MyRng2 = Range("A1:T28") For Each MyRng1 In MyRng2 If MyRng1.NumberFormatLocal <> "0%" Then If Left(MyRng1.Formula, 1) <> "=" Then MyRng1.Value = "=ROUND(" & MyRng1.Formula & ",0)" Else MyRng1.Value = "=ROUND(" & Right(MyRng1.Formula, Len(MyRng1.Formula) - 1) & ",0)" End If End If Next End Sub
お礼
ご回答有難う御座います。 以前にもお世話になり、大変有難う御座います。 お教え頂きました方法で解決しそうです。 範囲と%の表示形式部分の変更で、とりあえず1シートを実行したところ問題がないようです。 本当に助かります。 大変有難う御座います。
- mshr1962
- ベストアンサー率39% (7417/18945)
数式の結果の場合はROUND関数を使うしかありません。 入力した数値なら「ツール」「オプション」「計算方法」で 「表示した桁数で計算する」にチェックすれば整数化できます。 ※表示形式が標準の場合や、小数点以下の桁数がある場合は整数化されません。 ※すべてのブックに影響するので、「設定変更→上書き保存→設定を戻す」を忘れずに行ってください。
お礼
ご回答有難う御座います。 セルの半数以上が数式の結果です。 やはり無理ですかね。 有難う御座います。
- process9
- ベストアンサー率29% (81/271)
>セルをひとつずつROUND関数などを使っての変換では気が遠くなります。 なぜ? 1セルROUND関数で整数化して、そのセルをコピー後 その数式を反映させたい範囲を選択後 形式を選択して貼り付けで数式を選ぶ。 これをシート20枚分繰り返すだけだと思いますが・・・・ 30分もかからないと思います。
お礼
ご回答有難う御座います。 セルの半分以上に計算式(セルごとに違う複雑な計算式)がはいっていて、コピー出来ません。 また、条件として%で表示されているセルは変更したくありません。 表示形式のセルの並びもほぼランダムです。 他に何か方法はないでしょうか? 有難う御座いました。
- merlionXX
- ベストアンサー率48% (1930/4007)
整数化する元のデータは、数値そのものですか?それとも計算式での計算結果表示されている答えですか? もし、数値そのものだとすればマクロでいっぺんに変換できそうですが、計算の答えだったら地道に式を直すしかないと思います。
お礼
ご回答有難う御座います。 セルの内容は、数値そのもののあれば計算結果もあります。(どちらかと言うと計算結果のほうが多いのです。) やはり、地道にやっていくしか、ないでしょうか 有難う御座います。
お礼
何度も申し訳御座いません。 今回の方法で、大丈夫なようで、求めることが出来ました。 これで、土日出勤と徹夜しなくて済みそうです。 本当に本当に有難う御座います。