• ベストアンサー

EXCELの関数の書き方

A1,B1,C1に数値(1~)が入っていて、 D1に結果”○”及び”×”を表示したいです。 結果が”○”の条件としましては、 A1,B1,C1のどこかにそれぞれ1、2、3が 入っていた場合です。 A1~A3の内容がそれぞれ 1,2,3 1、3、2 2、1、3 2、3、1 3,1、2 3,2、1  になった場合になります。(○) 1、2、4 3、4、1  とかは対象外になります。(×) 同じ数字は入りません。 足して6になればよいとは思うのですが、 今後汎用的に使用したい為に関数で書きたいです。 どうやって書けばよいのでしょうか? COBOLで書くとこうなると思います。 (すいませんコボラーです) IF A1=1 OR 2 OR 3 AND B1=1 OR 2 OR 3 AND C1=1 OR 2 OR 3 THEN MOVE "○" TO D1 ELSE MOVE "×" TO D1 END-IF. よろしくお願い致します。

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

  • ベストアンサー
  • gura_
  • ベストアンサー率44% (749/1683)
回答No.1

COBOLは分かりませんが、それらしくすると D1=IF(AND(OR(A1=1,A1=2,A1=3),OR(B1=1,B1=2,B1=3),OR(C1=1,C1=2,C1=3)),"○","X") でどうでしょうか

Ref16570
質問者

お礼

早速のご回答ありがとうございます。 今実際に記入してみたらできました。 感謝致します。

その他の回答 (2)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

COBOLのプログラムを忠実に直すとD1セルに (AND A1+B1+C1=6 が抜けている楊ですが・・・) =IF(AND(OR(A1=1,A1=2,A1=3),OR(B1=1,B1=2,B1=3),OR(C1=1,C1=2,C1=3),A1+B1+C1=6),"○","×") です。ただし、ちょっと長すぎですので、もう少しシンプルにしましょう。 =IF(AND(A1>0,A1<4,B1>0,B1<4,C1>0,C1<4,A1+B1+C1=6),"○","×") とはいってもあんまりシンプルにはなってないですね。

Ref16570
質問者

お礼

ご回答ありがとうございます。 >や<を使った書き方は思いも付きませんでした。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.2

一関数で処理することも可能ですが、可読性の観点から、作業セルを作った方がいいと思います(私の主観ですが)。 表示や印刷に関係のない列(ここではAA列以降とします)を使って AA1に=and(a1=>1,a1<=3) AB1に=and(b1=>1,b1<=3) AC1に=and(c1=>1,c1<=3) として肝心なD1には =if(and(aa1:ac1),"○","×") とすればどうでしょうか。 一セルですませるには、D1に =if(and(and((a1>=1,a1<=3),(b1>=1,b1<=3),(c1>=1,c1<=3)),"○","×")) になります。 お好みの方法でどうぞ。

Ref16570
質問者

お礼

こんな真夜中にすいません。 作業用セルと言う方法も言われて見ればありますね。 ご回答ありがとうございました。

関連するQ&A

  • エクセルでの関数の書き方

    セルA1からF1があります。 A1がC1かD1で同じでかつ B1がC1かD1で同じ場合に、 D1の値をF1にセットしたいのですが、 どのように書けばよろしいでしょうか? EX. A1が1でB1が2の場合は C1がD1が1,2または2,1の場合のみ E1の値をF1にセットします。 COBOLで書くとこんな感じになると思います IF (A1=C1 OR A1=D1) AND (B1=C1 OR B1=D1) THEN MOVE D1 TO F1 END-IF. IF関数かAND関数を使用するような気がしますが、 思いつきません。 よろしくお願いいたします。 エクセル2000です。

  • COBOLについて

    COBOLで以下のような仕様の場合、どのようなロジックにするのが良いでしょうか? ・仕様  A項目=値A または  B項目=値B または  (C項目=値C かつ D項目=値D ) または  E項目=値E 上記の場合、何も処理しない(以降の処理もせずに、次レコードを読みに行く  上記以外の場合、処理1を行い、次処理以降の処理を継続する。 (ロジック1) IF A項目=値A OR B項目=値B OR (C項目=値C かつ D項目=値D ) OR E項目=値E THEN CONTINUE ELSE 処理1を行う END-IF. (ロジック2) IF A項目=値A MOVE '1' TO 該当フラグ END-IF. IF B項目=値B MOVE '1' TO 該当フラグ END-IF. IF (C項目=値C かつ D項目=値D ) MOVE '1' TO 該当フラグ END-IF. IF E項目=値E MOVE '1' TO 該当フラグ END-IF. IF 該当フラグ='1' CONTINUE ELSE 処理1 END-IF. 自分は仕様に沿ってロジック1で組むべきだと思うのですが、 ロジック1は分かりずらいのとメンテが大変なのでロジック2で組むべきだと言われました。 どちらで組むのが普通でしょうか?どなたか教えて下さい!

  • エクセルの関数を教えてください

    下のような表で、E7に =IF(AND(D6>A1,OR(C7:C12<(A7-0.05))),"A",IF(AND(D6<A1,OR(B7:B12>(A7+0.05))),"B","")) と関数を入れましたが求めているものになりません。 文章にすると、D6がA1より大きかった場合かつC7からC12の間でA7から0.05を引いた数値が どれか一つでもあればA、D6がA1より小さかった場合かつB7からB12の間でA7から0.05を足 した数値がどれか一つでもあればBそれ以外は空白というものです。 正しい関数を教えてください。       A    B     C     D      E 1    98.483  98.501  98.446  98.477 2    98.477  98.482  98.442  98.452  3    98.449  98.461  98.365  98.372  4    98.372  98.396  98.350  98.387  5    98.388  98.472  98.379  98.414 6    98.412  98.479  98.389  98.439 7    98.433  98.603  98.430  98.555 8    98.559  98.579  98.465  98.500 9    98.500  98.600  98.467  98.569 10   98.568  98.635  98.530  98.546 11   98.548  98.579  98.486  98.494 12   98.497  98.569  98.460  98.534 13   98.534  98.565  98.527  98.542

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

    時間の計算する表を作ったのですが、うまくいかない所があります。 現在の表は、B4に開始時間とC4に終了時間を入れ5時から22時までの間の経過時間をD4に、22時から5時までの時間経過をE4に入るようにしています。 「C1に5:00、D1に22:00、 B4に=IF(OR(B4="",C4=""),"",IF(OR(B4>=$D$1,B4<$C$1),"",IF(OR(C4>$D$1,C4<=$C$1),$D$1,C4)-B4))、 E4に=IF(OR(B4="",C4=""),"",IF(AND(C4>$C$1,C4<=$D$1),"",IF(AND(B4>=$C$1,C4<=$C$1),1-IF(B4<$D$1,$D$1,B4)+C4,C4-IF(AND(B4>=$C$1,B4<$D$1),$D$1,B4))))」です。 そこで、5時をまたがった時に、5時までの部分をE4に5時からの部分をD4に分けて表示させたいのですが、うまくいきません。 例えば、開始4:30 終了5:10の場合、D4に0:10 E4に0:30が表示させるようにです。 よろしくお願いします。

  • EXCEL インデックスが有効範囲にありません

    エクセルでマクロを使ったソフト(他人が作ったもの)を使っているのですが、 計算の途中で「インデックスが有効範囲にありません」という エラーが出てしまい困っています。 同じ量の他の数値(サンプル数91、属性9)でやるとエラーがでないのですが、今やっている文字列のときだけエラーが出るといった場合 何が考えられるでしょうか?以下はデバッグ結果です。 'For j = 2 To M - 1 '列に関する繰り返し MaxMax = MaxI iflag = 0 For j = 2 To iR - 1 '上限? kkk = 1 For i2 = 1 To MaxI For i = 1 To MaxMax If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else If Trim(C(i)) = Trim(B(i2, j)) Then D(kkk) = B(i2, j) B(i2, j) = "" kkk = kkk + 1 Else If InStr(1, C(i), B(i2, j), 1) <> 0 Then D(kkk) = C(i) C(i) = "" kkk = kkk + 1 iflag = 1 End If End If End If Next i 'If iflag = 1 Then ' B(i2, j) = "" ' iflag = 0 'End If Next i2 For i = 1 To MaxMax For i2 = 1 To MaxI If C(i) = "" Or B(i2, j) = "" Then 'Exit For Else D(kkk) = C(i) & B(i2, j) kkk = kkk + 1 End If Next i2 Next i For i = 1 To kkk - 1 '簡略,exp.P and TP,, For i2 = 1 To kkk - 1 If i <> i2 And D(i) <> "" And D(i2) <> "" Then If Len(D(i)) > Len(D(i2)) Then L1 = Len(D(i)) L2 = Len(D(i2)) If Comp(D(i), D(i2), L1, L2) = 1 Then D(i) = "" 'Exit For End If Else L2 = Len(D(i)) L1 = Len(D(i2)) If Comp(D(i2), D(i), L1, L2) = 1 Then D(i2) = "" 'Exit For End If End If End If Next i2 Next i i2 = 1 For i = 1 To kkk - 1 If D(i) <> "" Then Cells(i2, iR + j) = D(i) C(i2) = D(i) ←ここがエラー i2 = i2 + 1 End If Next i MaxMax = i2 - 1 Next j 上記文章だけでは何も分からないとは思うのですが、 何か分かる方がいらっしゃればお願いいたします。

  • Excel 他の関数処理で文字列(数)を少なくする方法

    Excel    A  B  C  D  E  F 1      1  2  3  4  5 2  あ  0  0  0  100 100 3  い  20  0  0  200 20 4  う  0  30  0  300 30 5  え  0  0  40  400 40 6  お  20 30  0  500 25 7  か  0  25 35  600 30 8  き  30 0  40  700 35 9  く  20 25 35  800 27 A2 ~ A9 は テスト名称 B2 ~ F9 は 数字 1,2,3 が 0 の場合は 4 の 数字を F2 に 出力 1 or 2 or 3 に 数字が ある場合 平均(小数点以下四捨五入) A2 あ F2=100 A3 い F3=20 A6 お F6=(20+30)/2 A9 く F7=(20+25+35)/3 F2 = ROUND(IF(AND(B2=0,C2=0,D2=0),E2,IF(AND(B2=0,C2=0),D2,IF(AND(B2=0,D2=0),C2,IF(AND(C2=0,D2=0),B2,IF(B2=0,(C2+D2)/2,IF(C2=0,(B2+D2)/2,IF(D2=0,(B2+C2)/2,(B2+C2+D2)/3))))))),0) 以下 F3 ~ F9 まで 同じ 関数処理 他の関数で文字列(数)を短くできますか?

  • (Excel VBA)and,orについて

    andとorを同時に使用する場合について質問です。 Case1) if A=1 and B=1 or C=1 then これは「Aが1かつBが1であるか、又はCが1であれば」という意味か 「Aが1であり、かつBが1であるか又はCが1であれば」という意味なのか どちらでしょうか。 Case2) if A=1 or B=1 and C=1 then 次に、この場合はどちらの意味でしょうか。 よろしくお願いします。

  • エクセル 計算式をマクロで

    おそらく基本的なことだとは思うのですが、以下の計算式を3000行までいれるのと同じ結果になるVBAを教えて頂けませんでしょうか? (1) =if(A1<>"",C1&D1,D1&"不可") (2) =if(and(A1=1,B1=2),C1&D1,D1&"不可") (3) =if(or(A1=1,B1=2),C1&D1,D1&"不可") お手数ですが、よろしくお願い致します。

  • エクセルのIF関数でORとANDの組み合わせ方

    エクセルのIF関数でORとANDの組み合わせ方を教えてください。 =IF(AND(C1>10,A1>B1),"S","") =IF(AND(C1>10,A1<B1),"L","") この2つの式をORで1つの式にするにはどのように組み合わせれば良いのでしょうか? よろしくお願いいたします。

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

    エクセルの関数についてです エクセルで出勤簿を作っているのですが、関数の数式がわかりません。 結論から申しますと、退勤時間を24:00と書いても0:00←(24時のこと)と書いても同じ処理をしてほしいということです。 詳細を以下に記載していきます C9出勤:手入力 D9退勤:手入力  ←問題はココ 休憩セルには=AN9 AN9には「=SUM($AD9:$AM9)」 AD9には「=IF(OR(($C9=$D9),(設定!$A$4=設定!$C$4),COUNT($C9,$D9,設定!$A$4,設定!$C$4)<4),0, IF(AND(設定!$A$4<=$C9,$C9<=設定!$C$4,設定!$A$4<=$D9,$D9<=設定!$C$4),($D9-$C9), IF(AND(設定!$A$4>$C9,設定!$A$4<$D9,$D9<=設定!$C$4),($D9-設定!$A$4), IF(AND(設定!$A$4<=$C9,$C9<設定!$C$4,設定!$C$4<$D9),(設定!$C$4-$C9), IF(AND(設定!$A$4>$C9,設定!$C$4<$D9),(設定!$C$4-設定!$A$4),0)))))」 AM9には「=IF(OR(($C9=$D9),(設定!$A$14=設定!$C$14),COUNT($C9,$D9,設定!$A$14,設定!$C$14)<4),0, IF(AND(設定!$A$14<=$C9,$C9<=設定!$C$14,設定!$A$14<=$D9,$D9<=設定!$C$14),($D9-$C9), IF(AND(設定!$A$14>$C9,設定!$A$14<$D9,$D9<=設定!$C$14),($D9-設定!$A$14), IF(AND(設定!$A$14<=$C9,$C9<設定!$C$14,設定!$C$14<$D9),(設定!$C$14-$C9), IF(AND(設定!$A$14>$C9,設定!$C$14<$D9),(設定!$C$14-設定!$A$14),0)))))」 AD9~AN9までは同じようなことが書いてあります。 設定!$A$4には「12:00」 設定!$C$4には「13:00」 以上までが、休憩セルです H9拘束時間には、=AS9 AS9には、「=AC9」 AC9には、「=IF(COUNT($C9:$D9)<2,0,IF($AA9*24>$AB9*24,0,TEXT($AB9-$AA9,"[h]:mm")))」 AA9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(CEILING($C9,"0:10"),"[h]:mm"))」 AB9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(FLOOR($D9,"0:10"),"[h]:mm"))」 以上が拘束時間 I9普通残業セルには、=AT9 AT9には、「=IF(D9-設定!$C$2<0,"0:00",D9-設定!$C$2)」 設定!$C$2には、「18:00」 以上が普通残業時間 J9深夜残業時間セルには、「=AU9」 AU9には、「=AQ9」 AQ9には、「=SUM($AO9:$AO9)」 AO9には、「=IF( COUNT($C9:$D9)<2, 0, IF( AND(22<=$AA9*24,$AA9*24<29,22<$AB9*24,$AB9*24<=29), ($AB9-$AA9), IF( AND($AA9*24<=22,22<$AB9*24,$AB9*24<=29), ($AB9-"22:00"), IF( AND(22<=$AA9*24,$AA9*24<29,29<=$AB9*24), ("29:00"-$AA9), IF( AND($AA9*24<22,29<$AB9*24), ("29:00"-"22:00"), 0 )))))」 以上が深夜残業時間 ということで、分かる方ご教授願います。

専門家に質問してみよう