アプリ版:「スタンプのみでお礼する」機能のリリースについて

(1)A1が0のとき、0。
   1のとき、固定の数値100(仮)。
   2以上のとき、固定の数値300(仮)。
 上の条件では、数値は2種類しかありません。
 さらに、A2が0のとき、そのまま。
        1のとき、そのまま。
        2のとき、2倍。
        3のとき、3倍、、、、、、、、。
 という数値を、A3に返したい。

(2)A1が0のとき、0。
    1のとき、A2*0.4のプラスマイナスを逆転させた数値。
    2以上のとき、0。
 で、さらにA3が0のとき、そのまま。
        1のとき、そのまま。
        2のとき、2倍。
        3のとき、3倍、、、、、、、、。
 という数値を、A3に返したい。

(3)A1が0のとき、0。
    1のとき、固定の数値100(仮)。
    2以上のとき、固定の数値100(仮)*2。
 で、さらにA2が0のとき、そのまま。
          1のときは、固定の数値100(仮)*3。
          2のときは、固定の数値100(仮)*4。
          3のときは、固定の数値100(仮)*5、、、、、、。
 で、A3が0のときは、0(A1、A2関係なく)。
      1のときは、そのまま。
      2のときは、上記の数値の倍。
      3のときは、上記の数値の3倍、、、、、、、。
 という数値を、A4に返したい。
このときの、数式を教えて欲しいのです。
とても分かりずらいと思いますが、どなたか教えていただけないでしょうか。

A 回答 (7件)

こんばんわ。

#4の補足に書かれた条件でサンプルマクロを組むと下記の様になります。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$B$1" Then Exit Sub
If Range("B1").Value = 1 Then
Call Sheet1.myKeisan1
ElseIf Range("B1").Value = 2 Then
Call Sheet1.myKeisan2
End If

End Sub

Sub myKeisan1()

Select Case Range("A2").Value

Case 0
Range("A4").Value = 0
Case 1
Select Case Range("A3").Value

Case 0, 1
Range("A4").Value = 100
Case 2
Range("A4").Value = 200
Case 3
Range("A4").Value = 300

End Select
Case 2
Select Case Range("A3").Value

Case 0, 1
Range("A4").Value = 200
Case 2
Range("A4").Value = 400
Case 3
Range("A4").Value = 600

End Select

End Select

End Sub

Sub myKeisan2()

Select Case Range("A2").Value

Case 1
Select Case Range("A3").Value

Case 0, 1
Range("A4").Value = CInt(Range("A1").Value) * -1
Case Else
Range("A4").Value = CInt(Range("A1").Value) * CInt(Range("A3").Value) * -1

End Select
Case Else
Range("A4").Value = 0

End Select

End Sub

もし、このマクロの操作方法をお知りになりたい時は、お知らせ下さい。
    • good
    • 0
この回答へのお礼

何度も回答ありがとうございます。
じっさいマクロを走らせてみましたが、
やはり素人の私には少し難しいようです。
今回の件は、質問には書かなかったのですが、
そういったセット(今回のを1セットとして)同じシートで7セット作らなくてはいけなくて、そのためやはり数式で表現したいです。
今回の質問は、少し抽象的すぎ、反省しております。
今回は、とりあえず締め切ります。次回、近いうちに具体的な数字と、その数式を使用するのあたっての状況を詳しく書いて、また質問を投稿したいと思います。
そのときは、また協力していただけるとありがたいです。
今回は、マクロの作り方が分かり、少しエクセルの知識が増えたような気がします。
ほんとに、ありがとうございました。

お礼日時:2002/11/12 10:34

こんばんわ。

投稿ボタンを間違えて押してしまいました。#3の補足で書かれた条件でサンプルマクロを組んでみました。シート1の1行目は、マクロを動作させるために必要な行として使わせていただきますので、データの入力は2行目以降になります。マクロもミスが見つかりましたので、下のマクロを使って下さい。

まず、次のようにマクロを新規ブックにコピー&ペーストして下さい。

・新規ブックを開き、ALT+F11キーを押してVBE画面を表示させ、画面左上のVBAProjectと書かれている下のSheet1をダブルクリックして表示された画面の右側の白い部分に下記のコードをコピー&ペーストする。

ALT+F11キーでエクセルの画面にもどり、次のように操作します。

1.A2以降にデータを入力する。
2.最後に、A1で計算の方法を指定する。(A1を抜けた時点でマクロが走りますので、一番最後に指定しないとエラーが起こる場合があります。)
計算方法の指定の仕方
(1)の時1・(2)の時2・(3)の時3(数字は半角英数で指定して下さい。)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address <> "$A$1" Then Exit Sub
If Range("A1").Value = 1 Then
Call Sheet1.myKeisan1
ElseIf Range("A1").Value = 2 Then
Call Sheet1.myKeisan2
ElseIf Range("A1").Value = 3 Then
Call Sheet1.myKeisan3
End If

End Sub

Sub myKeisan1()

If Range("A2").Value = 0 Then
Range("A5").Value = 0
Else
Range("A5").Value = 36000
End If

End Sub

Sub myKeisan2()

Select Case Range("A2").Value

Case 1
If Range("A3").Value = 0 Then
Range("A7").Value = 14000 * -1
Else
Range("A7").Value = 14000 * CInt(Range("A3").Value) * -1
End If
Case Else
Range("A7").Value = 0

End Select

End Sub

Sub myKeisan3()

Select Case Range("A2").Value

Case 0, 1, 2
Range("A6").Value = 0
Case 3
If Range("A4").Value = 1 Then
If Range("A3").Value = 0 Then
Range("A4").Value = 6500
Else
Range("A4").Value = 6500 * CInt(Range("A2").Value)
End If
End If
Case 4
If Range("A4").Value = 1 Then
If Range("A3").Value = 0 Then
Range("A4").Value = 6500
Else
Range("A4").Value = 6500 * CInt(Range("A2").Value)
End If
ElseIf Range("A4").Value = 2 Then
If Range("A3").Value = 0 Then
Range("A4").Value = 13000
Else
Range("A4").Value = 13000 * CInt(Range("A2").Value)
End If
End If

End Select

End Sub

もし、マクロを動作させるために1行目を使わない方がよろしければ、他の方法でマクロを動作させることも可能です。その時は、お知らせいただければそのようにマクロを変更させていただきますので、ご遠慮なくお知らせ下さい。
    • good
    • 0

Private Sub Worksheet_Change(ByVal Target As Range)



If Target.Address <> "$A$1" Then Exit Sub
If Range("A1").Value = 1 Then
Call Sheet1.myKeisan1
ElseIf Range("A1").Value = 2 Then
Call Sheet1.myKeisan2
End If

End Sub

Sub myKeisan1()

If Range("A2").Value = 0 Then
Range("A5").Value = 0
Else
Range("A5").Value = 36000
End If

End Sub

Sub myKeisan2()

Select Case Range("A2").Value

Case 1
If Range("A3").Value = 0 Then
Range("A7").Value = 14000 * -1
Else
Range("A7").Value = 14000 * CInt(Range("A3").Value) * -1
End If
Case Else
Range("A7").Value = 0

End Select

End Sub

Sub myKeisan3()

Select Case Range("A1").Value

Case 0, 1, 2
Range("A6").Value = 0
Case 3
If Range("A3").Value = 1 Then
If Range("A2").Value = 0 Then
Range("A3").Value = 6500
Else
Range("A3").Value = 6500 * CInt(Range("A2").Value)
End If
End If
Case 4
If Range("A3").Value = 1 Then
If Range("A2").Value = 0 Then
Range("A3").Value = 6500
Else
Range("A3").Value = 6500 * CInt(Range("A2").Value)
End If
ElseIf Range("A3").Value = 2 Then
If Range("A2").Value = 0 Then
Range("A3").Value = 13000
Else
Range("A3").Value = 13000 * CInt(Range("A2").Value)
End If
End If

End Select

End Sub
    • good
    • 0

初めまして。


(1)で、
・A1が0の時
 A2が0・1・2・3であってもA3に0を表示
・A1が1の時
 A2が0・1ならばA3に100(仮)を表示
 A2が2ならば、A3に200(仮)を表示
 A2が3ならば、A3に300(仮)を表示
・A1が2の時
 A2が0・1ならばA3に300(仮)を表示
 A2が2ならば、A3に600(仮)を表示
 A2が3ならば、A3に900(仮)を表示
ということでよろしいのでしょうか。

(2)についても同様の考え方でよろしいのでしょうか?

(3)についても同じような要領で条件を書いていただけないでしょうか。

このないようでは、貴方様のおやりになりたいことがよく理解できません。

お手数をおかけいたしますが、よろしくお願いいたします。

この回答への補足

>初めまして。
はじめまして。
下のように訂正しました。
(3)は複雑になるのであきらめました。
これで、どうでしょうか。
(1)も若干変更しました。

>(1)
・A1が0の時
 A2が0・1・2・3であってもA3に0を表示
・A1が1の時
 A2が0・1ならばA3に100(仮)を表示
 A2が2ならば、A3に200(仮)を表示
 A2が3ならば、A3に300(仮)を表示
・A1が2の時
 A2が0・1ならばA3に200(仮)を表示
 A2が2ならば、A3に400(仮)を表示
 A2が3ならば、A3に600(仮)を表示

>(2)
・A1が0の時
 A2が0・1・2・3・4‥であってもA3に0を表示
・A1が1の時
 A2が0・1ならばA3に-40(仮)を表示
 A2が2ならば、A3に-80(仮)を表示
 A2が3ならば、A3に-120(仮)を表示
 以下、4以降続きます。
・A1が2以上の時
 A2が0・1・2・3・4‥であってもA3に0を表示

補足日時:2002/11/11 19:04
    • good
    • 0

>とても分かりずらいと思いますが--良く判らない。


(1)(1)と(2)と(3)の関係は?
(2)例えば(1)で下表のa-lはどうなるのでしょう?
A1とA2の値は両方ともA3の値に影響するのですよね?
  A2 |0  |1 |2 |3 |
  A1 |  | |  | | 
  --|----------
  0  | a|b |c |d | 
1 | e |f|g |h |
2 | i|j |k |l |
(3)(3)はA1とA2とA3の3項目関連しているのですか?
(4)IF文とVLOOKUP関数のネストで出来そうなんですが
問題文の条件の意味が捉えられない。
(4)符号反転は-1を掛ければよい。
(5)こう言う複雑になると、VBAでIF文のネストCASE文とIFの組み合わせ方が素直に表現できそう。

この回答への補足

 はじめまして。
下のように訂正しました。
これで、どうでしょうか。
書いてないセルは反映しなくていいです。
若干変更しました。そして、全てに関連性をもたせました。(1)、(2)、(3)のA1~6は同一セルです。
>(1)
A1が0の時、他のセルに関係なくA5は0を表示
A1が1以上の時、A5に36000を表示。

>(2)
・A1が0の時
 A2が0・1・2・3・4‥であってもA7に0を表示
・A1が1の時
 A2が0・1ならばA7に-14400を表示
 A2が2ならば、A7に-28800を表示
 A2が3ならば、A7に-43200を表示
 以下、4以降続きます。
・A1が2以上の時
 A2が0・1・2・3・4‥であってもA7に0を表示 

>(3)
・A1が0・1・2の時
 A2、A3が0・1・2・3であってもA6に0を表示
・A1が3の時
 A3が1の時
 A2が0・1ならばA3に6500を表示
 A2が2ならば、A3に13000を表示
 A2が3ならば、A3に19500を表示
 以下、4以降続きます。

・A1が4の時
 A3が1の時
 A2が0・1ならばA3に6500を表示
 A2が2ならば、A3に13000を表示
 A2が3ならば、A3に19500を表示
 以下、4以降続きます。

 A3が2の時
 A2が0・1ならばA3に13000を表示
 A2が2ならば、A3に26000を表示
 A2が3ならば、A3に39000を表示
 以下、4以降続きます。
 

補足日時:2002/11/11 20:23
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはり、マクロは素人の私には向いてないようです。
また、次の機会には分かりやすい質問にしますのでよろしくお願いします。

お礼日時:2002/11/12 10:23

入力した数値に小数部が含まれていても、整数部だけを見る事にします。

負の数値は
入力されないことを期待しています。

(1)
=if(int(A1)>=2,300,int(A1)*100)*if(int(A2)<=1,1,int(A2))

(2)
=if(int(A1)=1, -0.4*A2,0)*if(int(A3)<=1,1,int(A3))

(3)
=if(int(A2)=0,min(int(A1),2),int(A2)+2)*100*int(A3)

とまぁ、こんな感じでいかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
やっぱり、数式ですと、アレンジがききますよね。
素人でも「こことここを変えれば・・・」と、とても参考になりました。
ただ、若干こちらの表現のまずさのせいでしょう。
私の意図する結果が出ませんでした。
でも、全部数式で書いてくださってありがとうございました(礼)。

お礼日時:2002/11/12 10:18

(1)


=IF(A13=0,0,IF(A13=1,100,IF(A13>=2,300,"")))

です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
A3の倍数がないみたいですが
それさえあれば完璧でした。
私の質問の書き方が少し分かりづらかったのかもしれません。
でも、すぐ数式を書けるなんてすごいですね。

お礼日時:2002/11/12 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!