プロが教えるわが家の防犯対策術!

まったく名案が浮かびません。
ご教授ください。
タイトルではわかりにくいので、下記に具体的に載せます。

0 1 2 →空白で返す
1 1 2 →0を返す
0 0 0 →1,2を返す

という感じで、同じ行の各セルに数字が「0、1、2」の3つのどれかが入っているので、ない数字を返してほしいです。
どうぞよろしくお願いします。

質問者からの補足コメント

  • 申し訳ありません。
    下手な書き方でした。
    A1=1,B1=1,C1=2
    の場合、0~2の数字の0がないので、D1に0を返す方法を教えて下さい。
    もっとわかりやすく説明できたらよいのですが!!

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/06/28 20:51

A 回答 (7件)

D列に「,」を入れないで良ければ(「,」処理が結構面倒です)とりあえず


「=IF(COUNTIF(A1:C1,0)=0,"0","") & IF(COUNTIF(A1:C1,1)=0,"1","") & IF(COUNTIF(A1:C1,2)=0,"2","")」
    • good
    • 1
この回答へのお礼

countifで辿りつけませんでした。
なるほど、非常に勉強になりました!
カンマについては、なくてもさほど困りません。
これですっきりしました。ありがとうございました!

お礼日時:2016/06/30 23:56

面白い問題ですね。


=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("012",A1,""),B1,""),C1,"")

ただ、最近、正規表現にこだわっていますので、RegExp でトライしてみました。
ちょっとややこしいですね。

Function vregReplace(rng As Range) As String
Dim out As String
Dim objReg As Object
Dim m As Variant, buf As String, c As Variant
Dim tg As String, Matches As Object
Dim Num As String: Num = "012"
Set objReg = CreateObject("VBScript.RegExp")
With objReg
   .Global = True
   For Each c In rng: tg = tg & c.Value: Next
   .Pattern = "[" & tg & "]"
   Set Matches = .Execute(Num)
   buf = Num
  For Each m In Matches: buf = Replace(buf, m.Value, ""): Next
        vregReplace = buf
End With
Set objReg = Nothing
End Function

'Basp21正規表現ですと、

Function reReplace(rng As Range)
Dim out As String
Dim bobj As Object
Dim c As Variant, tg As String
Set bobj = CreateObject("Basp21")
For Each c In rng
  tg = tg & c.Value
Next
  out = bobj.Replace("s/[" & tg & "]//g", "012")
  reReplace = out
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます。
すごいです!シンプルに答えが返ってきてびっくりです。
これならどれだけ列があっても問題なしですね。
脱帽です!

お礼日時:2016/06/30 23:34

3種類程度なら


=SUBSTITUTE(TRIM(IF(COUNTIF(A1:C1,0)=0,"0 ","")&IF(COUNTIF(A1:C1,1)=0,"1 ","")&IF(COUNTIF(A1:C1,2)=0,"2",""))," ",",")
    • good
    • 0
この回答へのお礼

試してみました。
なるほど、ありがとうございます!
たくさんの解答が得られて、大変勉強になりました。

お礼日時:2016/07/01 00:15

超簡単!ただし、逆転の発想が必要。


何が逆転ですと?コピーの方向は上から下へ、とか、左から右へ、に決めつけないことです。右から左へコピーもありですよ。

添付図参照
1.セル G1 に 120 を入力
2.セル F1 に式 =SUBSTITUTE(G1,C1,"") を入力
3.セル F1 を“左へ”2列にオートフィル
4.“Ctrlキーを抑えたままで”、範囲 D1:G1 を下方に
__オートフィル
「エクセルで、行の中に条件の数字が存在しな」の回答画像5
    • good
    • 1
この回答へのお礼

なるほど!
ありがとうございます。
おかげで、いろいろな解答が得られて勉強になりました。
substituteの活用、countifしか浮かばなかったので発見でした!

お礼日時:2016/06/30 23:54

ユーザ定義関数での実装です。


A1セルに、=rueluoc012(A2) と入力して、A2セルに「0 1 2」等を入力してください。

Function rueluoc012(myRng As Range) As Variant
Dim I As Long
rueluoc012 = "0 1 2"
For I = 1 To Len(myRng.Text)
If Mid(myRng.Text, I, 1) <> " " Then
rueluoc012 = Replace(rueluoc012, Mid(myRng.Text, I, 1), "")
End If
Next
rueluoc012 = Replace(WorksheetFunction.Trim(rueluoc012), " ", ",")
End Function
    • good
    • 0
この回答へのお礼

ありがとうございます!
ユーザー定義関数、便利だとは思いますがその域には達せません(涙)
試してみました。
1セル内に数字を入力する感じですね。
参考にします!

お礼日時:2016/07/01 00:06

こんばんは!



1セルに「1,2」のように表示させたい場合、関数では結構厄介だと思いますので
VBAでの一例です。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)
マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から//
Dim i As Long, k As Long, myStr As String
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
For k = 0 To 2
If WorksheetFunction.CountIf(Cells(i, "A").Resize(, 3), k) = 0 Then
myStr = myStr & k & ","
End If
Next k
If Len(myStr) > 0 Then
Cells(i, "D") = Left(myStr, Len(myStr) - 1)
End If
myStr = ""
Next i
End Sub 'この行まで//

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!
素晴らしい。
とても便利ですね。参考にさせて下さい!

お礼日時:2016/07/01 00:08

「同じ行の各セル」?「各セル」と言っても、同じ行には16384個のセルがありますけど~?(Excel 2013の場合)


知らなかった?
この回答への補足あり
    • good
    • 0

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