• ベストアンサー

Excel (2000 or 2007)に関する質問です。

Excel (2000 or 2007)に関する質問です。 セルB1に対して以下のような関数を入力したいのですが、どのようにすればよいでしょうか? 『もしA1が0よりも大きければA1の値を持ち、もしA1が0以下ならば値は変更しない』 イメージ A1に3を入力する⇒B1は3になる 更にA1に5を入力する⇒B1は5になる 更にA1に-1を入力する⇒B1は5のまま 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 横から邪魔します。 操作したいSheet見出し上で右クリック → コードの表示 を選択し、 ↓のコードをコピー&ペーストしてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target > 0 Then Cells(Target.Row, 2) = Target.Value Else Cells(Target.Row, 2) = Cells(Target.Row - 1, 2) End If End Sub 尚、1行目からマイナスの場合はエラーになると思います。 以上、参考になれば良いのですが 外していたらごめんなさいね。m(__)m

saint_fie
質問者

お礼

すいません。応用例の説明が足りてなかったのですが、 tom04さんの御蔭で目的を達成できました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target > 0 Then Cells(Target.Row, 2) = Target.Value End If End Sub これでBxセルに対して 『もしAxが0よりも大きければAxの値を持ち、もしAxが0以下ならば値は変更しない』 を実現できました。ありがとうございます(._.)

その他の回答 (2)

回答No.2

ちょっと強引な方法かもわかりませんが、 [B1]セルに、   =if(a1>0,a1,b1) の計算式を入力してください。 エラー(循環参照エラー)が出ると思いますので、 次の手順で、循環参照を有効にしてください。 1.[Microsoft Office ボタン] をクリック 2.[Excel のオプション] をクリック 3.[数式] をクリック 4.[計算方法の設定] セクションで、[反復計算を行う] チェック ボックスを[オン]にする 5.[最大反復回数] ボックスに、数字[1]を入力 6.[OK]をクリックして閉じる。 これでOKです。どうでしょうか? (計算が終われば、上記手順1~4で、[反復計算を行う] チェック ボックスをはずしておいてください。) また、A列とB列の関係にするのなら、以下の計算式で処理できると思います。 (A列は、手入力する列。B列は、結果を表示する列。C列は仮覚えの列。) [B1]セルに、 =if(a1<>"",if(a1>0,a1,c1),"") [C1]セルに、 =if(a1<>"",if(a1>0,a1,0),"") ・・・[A1]セルに、[0]以下の数字が入力された場合、[0]を表示する様にしました。 [B2]セルに、 =if(a2<>"",if(a2>0,a2,c1),"") [C2]セルに、 =if(a2<>"",if(a2>0,a2,c1),"") 後は、[B2]セル及び[C2]セルを、[B3]以下の行にコピーすればOKです。 入力は、[A1][A2][A3][A4]・・・・・と、順次入力してゆけば、 結果は、[B1}[B2][B3][B4]・・・・・に表されます。 以上ですが、質問に合致していただしょうか?

saint_fie
質問者

お礼

こちらも凄い方法ですね。 残念ながら[A1]セルに、[0]以下の数字が入力された場合、[B1]セルの値は 維持して欲しかったので応用手法は適用できなかったのですが、 反復計算を行うという方法は非常にためになりました。ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

数式では出来ません。マクロ(Changeイベント)なら可能です。 シートの見出しを右クリックして、「コードの表示」を選択 でてきた画面の右上の欄に下記のコードをコピー Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then If Target > 0 Then Range("B1") = Target End If End If End Sub

saint_fie
質問者

お礼

ありがとうございます! 確かに出来ました。 ただ、VBAは使ったことがないため、ちょっと応用の仕方が解りません… できればA1とB1の関係をA列全体とB列全体に適用する方法をお教え頂けないでしょうか?

関連するQ&A