- 締切済み
エクセル 関数
sheet1 エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 上記の状態でsheet1のB列全体の負の数を0(数値)として 同じB列に表示させるには、 どのような数式をシート内のどの部分にはりつければよいのか教えてください。 ROUNDDOW関数を使っていろいろためしましたが、エラーばかりで質問させていただきました。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
関数は、データがそのセルに入力されると壊れていまう。 こんなのエクセルノ常識。 ーー 負の数を入れたときに0にするのはイベントマクロを組むよりほかない。 書式で0に見せるのなら、ユーザー定義で ###,##0;"0";0 ーー それにしても >sheet1エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 ーー この中のほとんどは質問と関係ないことでは無いですか。 関係ないことを核から判りにくい。真意は#1の補足ではじめてわかる。できるだけ補足なしでわかるように書いてください。
- Cupper
- ベストアンサー率32% (2123/6444)
>・・・sheet1のB列全体の負の数を0(数値)として >同じB列に表示させるには これは他の方もおっしゃるようにマクロで行うしかありません。 参考と言うことでマクロ以外の方法として次のやりかたもあるということを示しておきます。 B列の値で0以下の数値は0としてC列に表示する C1 =MAX(B1,0) を必要な行数コピー
- benelli
- ベストアンサー率51% (78/152)
ANo1のものです。 ANo2の方の言うとおり、マクロ以外に方法はない様に思われます。(関数では自分のセルの内容を変更することができないため) ANo2の方のマクロももちろん正しい模範解答ですが、一応自分の作成したマクロも記述して置きます。 方法: 1.エクセルファイルを開いたら、Alt+F11を押す。 2.変な画面が表示されるので画面左にある(はずの)小さい文字[ Sheet1 (Sheet1) ]をダブルクリックする。 3.真ん中の広いところが灰色から白に変わるので、そこに以下のテキストをコピーする。 '--------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 2 Then If WorksheetFunction.IsNumber(Target.Value) = True Then If CInt(Target.Value) < 0 Then Target.Value = 0 End If End If End If End Sub '--------------------------- 4.変な画面の一番右上の×をクリック。 これ以降は、Sheet1のB列にマイナス数字を入力すると自動で0になります。 こんなんでよろしいでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >上記の状態でsheet1のB列全体の負の数を0(数値)として同じB列に表示させるには 「同じ場所で、処理するというのは、」マクロ以外に解決する方法はありません。 本当に、それでよいのでしょうか? コントロールツールバーから、コマンドボタンを取り出して、シートに貼り付けたら、 そのボタンをダブルクリックしてください。 Private Sub CommandButton1_Click() ~ End Sub のが出てきますから、中身だけを入れてください。 Dim rng As Range Dim c As Range Set rng = Range("B1", Range("B65536").End(xlUp)) Application.ScreenUpdating = False For Each c In rng '数式で、かつ、数値であること If Not c.HasFormula And VarType(c) = vbDouble Then If c.Value < 0 Then '負の数 c.Value = 0 End If End If Next c Application.ScreenUpdating = True Set rng = Nothing 貼り付け終わったら、Alt + Q で、画面を閉じて、コマンドツールバーの中の青い三角定規が、オンの状態ですから、クリックしてオフにすれば、編集モードは終了しますので、後は、コマンドボタンがつかえるようになります。
- benelli
- ベストアンサー率51% (78/152)
見た目として負の数字を0にしたいのならば、セルの書式設定で表示形式の種類を 0;"0" と変えます。ただ、これは見た目が0なだけで、内部の計算ではちゃんと負の計算をしてしまいますが。 sheet1以外のシート(例えばsheet2)にsheet1のB列を変換して表示させるなら、sheet2のセルB1に =IF(Sheet1!B1 > 0,Sheet1!B1,0) と入力し、後はB列全体にB1セルをコピー&貼り付けしてください。 やりたいこと、これであってますかね? 「同じB列に表示させる」という意味がよく分からないのですが。同じセルに新しいデータを表示させちゃったら元の(負も書かれている部分の)データが上書きされて消えてしまうのですが。
補足
早速の丁寧なご回答ありがとうございます。 >見た目として負の数字を0にしたいのならば、 質問にも書きましたが、数値としての0ということです。 質問文がわかりにくかったかもしれませんので若干補足いたします。 例えば、あるシートのB列に(上から下方向に) 5 -6 9 8 -1 0と入力したときに 5 0 9 8 0 0と自動的に数値が変換されるように したいということです。