• 締切済み

エクセル 関数

sheet1 エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 上記の状態でsheet1のB列全体の負の数を0(数値)として 同じB列に表示させるには、 どのような数式をシート内のどの部分にはりつければよいのか教えてください。 ROUNDDOW関数を使っていろいろためしましたが、エラーばかりで質問させていただきました。 よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

関数は、データがそのセルに入力されると壊れていまう。 こんなのエクセルノ常識。 ーー 負の数を入れたときに0にするのはイベントマクロを組むよりほかない。 書式で0に見せるのなら、ユーザー定義で ###,##0;"0";0 ーー それにしても >sheet1エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 ーー この中のほとんどは質問と関係ないことでは無いですか。 関係ないことを核から判りにくい。真意は#1の補足ではじめてわかる。できるだけ補足なしでわかるように書いてください。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.4

>・・・sheet1のB列全体の負の数を0(数値)として >同じB列に表示させるには これは他の方もおっしゃるようにマクロで行うしかありません。 参考と言うことでマクロ以外の方法として次のやりかたもあるということを示しておきます。 B列の値で0以下の数値は0としてC列に表示する  C1 =MAX(B1,0) を必要な行数コピー

  • benelli
  • ベストアンサー率51% (78/152)
回答No.3

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)
回答No.2

こんばんは。 >上記の状態で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)
回答No.1

見た目として負の数字を0にしたいのならば、セルの書式設定で表示形式の種類を 0;"0" と変えます。ただ、これは見た目が0なだけで、内部の計算ではちゃんと負の計算をしてしまいますが。 sheet1以外のシート(例えばsheet2)にsheet1のB列を変換して表示させるなら、sheet2のセルB1に =IF(Sheet1!B1 > 0,Sheet1!B1,0) と入力し、後はB列全体にB1セルをコピー&貼り付けしてください。 やりたいこと、これであってますかね? 「同じB列に表示させる」という意味がよく分からないのですが。同じセルに新しいデータを表示させちゃったら元の(負も書かれている部分の)データが上書きされて消えてしまうのですが。

saikuron
質問者

補足

早速の丁寧なご回答ありがとうございます。 >見た目として負の数字を0にしたいのならば、 質問にも書きましたが、数値としての0ということです。 質問文がわかりにくかったかもしれませんので若干補足いたします。 例えば、あるシートのB列に(上から下方向に) 5 -6 9 8 -1 0と入力したときに 5  0 9 8  0 0と自動的に数値が変換されるように したいということです。 

関連するQ&A

  • エクセル関数の自動表示について

    自動表示についてご質問いたします。 シート1 (3月入力時)       A列  B列  C列  D列  E列  F列  G列  H列 1行目  1月   2  10  11  12  30  31  33 2行目  2月   1   2   5   8   9  10  48 3行目  3月   3   5  10  11  30  31  32 4行目  4月   こういうシート1の表があったとします。 シート1で3月入力した時点で、シート2では以下の表があったとします。        A列  B列  C列  D列  E列  F列  G列   1行目    3   5  10  11  30  31  32 と、自動で表示され。 4月(シート1)に数値を入力すれば、シート2の数値が最新数値に自動で入れ替わる・・・と、いう関数を作りたいのですが、いい関数ありますでしょうか? この場合、シート1ではB列~H列の数字の個数は固定(今回は7個)であり、毎回ランダムで数字が入力されていきます。 これをシート2の1行目、A列~G列に最新数値を毎回反映させて、表示したいのです。 どなたか、ご存知の方よろしくお願いします^^;

  • Excelで特定の文字のある列の数値を合計する関数

    Excelで、特定の文字列を含む列の数値の合計を、自動で集計してくれる関数はあるでしょうか。 複数シート(シートA、シートB)で構成されるExcelファイルで、シートAにはすべての取扱い商品が記載されています。現在は、シートBに入力されている商品ごとの販売個数の合計をシートB上でsumにより求め、その数値をシートAの該当箇所に、手で入力しています。シートAに記載されている商品が多いため、この手作業を関数で代替したいのです。 ただし、シートBに、次のような条件があります。 シートBの1行目(A1,B1,C1,D1...)には、見出しとして"氏名" "りんご" "バナナ" "いちご"...などがあり、2行目以降は、販売者の名前と、その人が販売した商品の個数が入力されています。掲載人数は40人(行数で41行)ほどです。 ところが、誰も"りんご"を販売していなければ、その列自体がなくなります。シートBには販売された商品しか記載されておらず、たとえばB1は、必ずしも"りんご"ではありません。 シートAからBを参照し、シートBの1行目に、もし"りんご"の文字があれば、そのりんごの列の2行目以降にある販売数の合計を、"バナナ"があれば同じくバナナの販売数の合計を、じかにシートAのそれぞれの合計欄に表示させたいのです。 なお、シートBの行と列を入れ換えたシートB'を作るのは、避けたいと思っています。理由は、販売者の名前でも、全商品の販売個数をシートAにsumif関数で集計していること。また、シートは1週間ごとに、今後30枚程度まで増え、その各週合計もシートAに集計する予定のため、シートは各週1枚だけにしたいのです。 このような条件のもと、Excelの関数で集計する方法があれば、教えてくださいますか。

  • エクセルのCOUNTIF関数について

    エクセルのCOUNTIF関数について、というかCOUNTIF関数でよいのかどうかもよく分からないのですが、教えて下さい。 (1)まず、ワークシートのA列の1~100行目までの100マスを範囲として、数値を入力していくときに、仮に同じ数値を入力しようとしても、入力ができないようにしたいのです。 (2)次に、ワークシートのA列とC列のそれぞれ1~100行目までの合計200マスを範囲として、(1)と同じことをしたいのです。(つまりB列はとばして) (1)と(2)のようなことは可能でしょうか? お分かりの方がおられましたら、ぜひよろしくお願いします!

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセルの関数で

    A列B列それぞれに100行ぐらいあり数値が入力しています。 C列にA列とB列のうち数値が小さい方の数値を100行分抽出したいのですが、エクセルの関数でできないでしょうか?

  • エクセルの関数について質問です

    エクセルの関数について質問です A列に任意の個数「1」が入り、続けて「2」が任意の個数入力されています。B列に任意の文字列が入力されています。(うまく説明できないので、図を参照してください。) A列に「2」が入力されているB列の文字列を、関数でD列に取り出したいのですが、どのような関数でできるでしょうか? 「1」も「2」も個数は変動します。一度「2」が入力された以降の行に「1」が入ることはありません。「1」と「2」以外がA列に入力されることはありません。 色々考えたのですが、どうもうまくいきません。 VBAを使用すればできるとは思うのですが、どうしても関数でなければいけない事情があります。どなたか助けていただけないでしょうか?

  • EXCELの表の処理についての質問です

    少し複雑な処理かもしれませんが・・ 例えばA列に任意の正負の数が次のように並んでるとします。 A 32 24 -55 44 58 30 -40 27 -59 この時B列に次のように入力したいと思います。 A B 32 24 -55 (32+24+(-55*2)) 44 58 30 -40 (44+58+30+(-40*3)) 27 -59 (27+(-59*1)) つまり、負の数が出てきた行のB列に 「それまでに出てきた正の数の和-(そのセルの数字×正の数の個数)」 という出力をしたいです。 このように出力する方法はあるでしょうか。どなたか教えてください。

  • エクセル関数 ランキングを使って・・・

    みなさま宜しくお願い致します。 集計作業中に躓いてしまいました。 ランキング表を作成(Sheet1)しているのですが、別シート(Sheet2)に同数で同じ順位が数名います。 Sheet2はあくまで作業シートでその他の情報も含まれているので、Sheet1に表示用を作成しました。 A列に順位(作業列)、B列に実際の順位、C列に名前という風に表示させたいのですが、Vlookupを使用すると次点が抽出されません。Vlookupにそのほかの関数を加えるのかまたは別の関数があるのでしょうか。宜しくお願い致します。 【内容】 Sheet2: A列に1行目~10行目まで実際の順位(同数は同順位)B列に名前。 Sheet1: A列には1行目~10行目まで1~10の数字を(作業列とし、最終的には非表示にしようかと)。 B列には関数式:=SMALL(Sheet2!$A$1:$A$10,Sheet1!A1)を入力し、10行目までオートフィルすると、同数同順位の数値を表示します。 ここからです。 この順位に該当する人をSheet2からVlookupで引っ掛けようにも、次点以降の名前が出てきません。 何か良い方法はありますでしょうか? みなさまのお知恵をください。 宜しくお願い致します。

  • エクセル関数で・・・

    A列の1行目から45行目までに、”1”か”×”を入力するか、空白があります。 B列の1行目から45行目までに、様々な数値、若しくは空白が入ります。 この時、A列が”×”の行でB列が空白でないセルをカウントする数式を教えて下さい。   A  B 1 ×  20 2 × 3 1  30 4 ×  5 1  20 6 7 1  30 8 ×  10・・・・ こんな感じで、A列が”×”でB列が空白でないセルは『2』と導きたいのです。 分かりにくい説明で申し訳ありませんが、宜しくお願いいたします。

  • エクセルの関数で

    また皆様のお知恵を拝借したく 先週に数値の大きい順番に項目を並べたいという質問をさせていただきましたが、そこに条件を付け足して、同じように求めたいのです。 シート1には A列     B列      C列 1801  りんご    500 1801  みかん    350 1801  なし     700      ・      ・ 1802  みかん    250 1802  ぶどう    600 ・ ・ 1812  かき     1000 B列、C列は以下に項目と数字が並んでいきます。 A列は年月が入ります。 月の入力は毎月20項目程度になります。 そしてシート2のD列1行目から5行目に1801における上位金額の5項目         E列1行目から5行目に1802における上位金額の5項目               ・               ・             O列1行目から5行目に1812における上位5項目 というように取り込みたいのです。 集計シートに関数を入れて自動的に上位項目を表示させるにはどのような関 数を使えばよろしいのでしょうか。 入力されていない場合は表示はしないような形で行いたいのです。 よろしくお願いします。

専門家に質問してみよう