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

A列とB列に数字が入力してあり、C列が範囲内のデータに対する書類番号が入力されています。
例)
A列  B列  C列
100  500  C01
501  700  C02
725  798  C04
832  901  C06
指定のセルに数字を入力し、A列からB列の数字の範囲内だった場合、指定セルの右隣のセルにC列の書類番号が表示されるようにしたいと思っております。
例えば、指定セルに502と入力した場合、右隣のセルにC02と表示されるような関数を教えてください。
宜しくお願い致します。

A 回答 (7件)

VLOOKUP関数を使いますが、


数字の範囲が跳んでいる箇所があるので、
それをIF文で訊けばよろしいかと思います。
=IF(D2<=VLOOKUP(D2,$A$2:$C$5,2),VLOOKUP(D2,$A$2:$C$5,3),"該当なし")

いかがでしょう?
「エクセルの関数またはマクロを教えてくださ」の回答画像1
    • good
    • 1
この回答へのお礼

早急に教えて頂きまして有難うございました。
勉強になりました。

お礼日時:2017/01/23 14:53

>例えば、指定セルに502と入力した場合、右隣のセルにC02と表示されるような関数を教えてください。



D1セルに値を入力して、E1セルに結果を表示するなら
E1セルに、
 =VLOOKUP(D1,A:C,3)
なんだけど、質問の例では連続した範囲じゃないから少し工夫してください。
例えば、701から724の範囲を示すC列には「空白」を入力する…など。

VLOOKUP関数は入力された数字を含むそれ以下の値を探して、該当する列の値を参照することができます。
同じ値を探すだけと思っている方もいらっしゃいますが、その場合はVLOOKUP関数の4番目の引数に「0」または「FALSE」を指定します。
4番目が省略または「1」あるいは「TRUE」が指定されると、上記のような検索方法になります。
    • good
    • 1
この回答へのお礼

早急に教えて頂きまして有難うございました。
色々試してみます。

お礼日時:2017/01/23 14:53

こんにちは!



数値が連続している場合はVLOOKUP関数の「TRUE」型で対応できますが、
わざわざ表に手を加えるのは面倒なので、手っ取り早くVBAでの一例です。
↓の画像のような配置だという前提で・・・

シートモジュールにしてください。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, myFlg As Boolean
If Target.Address = "$E$2" Then '←「E2」は数値を入力するセル番地//
With Target
If .Value <> "" Then
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If .Value >= Cells(i, "A") And .Value <= Cells(i, "B") Then
myFlg = True
Range("F2") = Cells(i, "C") '←「F2」は結果を表示するセル番地//
End If
Next i
Else
Range("F2").ClearContents
Exit Sub
End If
If myFlg = False Then
Range("F2") = "該当なし"
End If
End With
End If
End Sub

こんな感じではどうでしょうか?m(_ _)m
「エクセルの関数またはマクロを教えてくださ」の回答画像3
    • good
    • 1
この回答へのお礼

早急に教えて頂きまして有難うございました。
早速シートモジュールに張り付けてみました。上手くいきました。
悩みが解決しました。有難うございました。

お礼日時:2017/01/23 14:59

添付の図のように指定のセルがF2とします。

(ここに番号が入ります)
G2へ
=IF(F2="","",IF(MAX((F2>=A2:A100)*(F2<=B2:B100)*ROW(A2:A100))=0,"該当なし",INDEX(C1:C100,MAX((F2>=A2:A100)*(F2<=B2:B100)*ROW(A2:A100)))))

と入力し
Shift+Ctrl+Enterキーを同時に押します。(配列数式です。式の両端が{}で囲まれます。添付図の黄色部分)

それで、完了です。
指定のセルがF2でないときは、F2を該当のセルに置き換えてください。
「エクセルの関数またはマクロを教えてくださ」の回答画像4
    • good
    • 1
この回答へのお礼

早急に教えて頂き有難うございました。
大変助かりました。

お礼日時:2017/01/23 12:44

どんな方法でも思い通りの結果が表示できればいいのですが、


修正や改良をする時に分からないのでは意味が無いと思いますので、
他の一例も提示させてもらいますね。
自分が内容を一番理解できる方法でやってください。

D1を指定セル、E1を表示セルとしますね。

E1=IF(COUNTIF(A:B,D1)=0,"該当なし",IF(COUNTIF(B:B,D1)=0,VLOOKUP(D1,A:C,3,FALSE),VLOOKUP(D1,B:C,2,FALSE)))

式の意味としては、
「COUNTIF(A:B,D1)」によって、A~Bの列にD1に一致するセルがいくつあるか数えます。
「IF(…=0,”該当なし”」によって、先ほどの数が0だった場合、該当なしと表示します。
「…,IF(COUNTIF(B:B,D1)=0,VLOOKUP(D1,A:C,3,FALSE)」によって、同様にB列にD1と一致するセルが無かった場合、A列からD1に一致するセルを探し、その行のC列に表示されているデータを取得します。
「,VLOOKUP(D1,B:C,2,FALSE)))」によって、B列にD1と一致するセルがあった場合、B列からD1に一致するセルを探し、その行のC列に表示されているデータを取得します。
という内容になっているのです。

よろしければご参考まで。
    • good
    • 0

すいません。

読み直したところ、勘違いしておりました。
A,Bに一致するかではなく、A~Bに一致するか、ですね。
A~C列が1~100行に入力されていて、指定セルがD1、検索表示セルがE1として、
以下の様に修正します。

E1=IF(SUMPRODUCT((D1>=A1:A100)*1,(D1<=B1:B100)*1,ROW(C1:C100))=0,"該当なし",INDIRECT("C"&SUMPRODUCT((D1>=A1:A100)*1,(D1<=B1:B100)*1,ROW(C1:C100))))


まずIFですが
SUMPRODUCT((D1>=A1:A100)*1,(D1<=B1:B100)*1,ROW(C1:C100))=0
なら”該当なし”と表示する。
そうでなければINDIRECT("C"& 先ほどの式 ) となっています。

SUMPRODUCT((D1>=A1:A100)*1,(D1<=B1:B100)*1,ROW(C1:C100))
というのは、A1~A100にD1以下のものがあるか判断し、B1~B100にD1以上のものがあるか判断し、両方に該当する行があれば、その行番号を取得する。という式になっています。

もう少し詳しく説明すると、
「,」で区切られた3種類を別々に判定しています。
A1~A100で判断した結果を、TRUEとFALSEで判定し、*1によってそれを1と0に変換しています。
つまり、質問者の出している例では(1,1,0,0…)と判定されています。
そしてB1~B100によって(0,1,1,1…)と判定されています。
更にROW(C1:C100)にはC1~C100の行番号が入っているので、(1,2,3,4…)となっています。
そしてこれらの結果が対応するもの同士で掛け算されます。
具体的には(1*0*1,1*1*2,0*1*3,0*1*4…)となっているので、(0,2,0,0…)という結果になります。
そして、最後にそれらを合計するので、この場合2となります。

この2がINDIRECT("C"& 先ほどの式 )に入ると、INDIRECT("C"&2)となり、C2のセルに表示されているデータを取得することができます。

最初のIF文では、この数値が=0、つまり一致するものが1つも無かった場合に、"該当なし"と表示するように指定しているわけですね。

長々と失礼しました。
    • good
    • 1
この回答へのお礼

細かくご説明頂きまして有難うございます。
関数の一つ一つの意味がしっかりと理解できました。
もう一つ質問させて頂いても宜しいでしょうか?

当初の質問にプラス「年」があった事を説明に書き忘れておりました。
●列 A列  B列 C列
2013 100 500 C0111
2013 501 700 C0112
2013 725 798 C0114
2014 001 430 C0211
2015 010 525 C0311

●列と書いたのは、実はA列の左にあった為です。
A列B列にデータを入力する際、頭に年を入れるという力業?で
解決する事も考えましたが、教えて頂いた関数に何かをプラスする事で
解決する事は可能でしょうか?
お手数ですが、教えて頂けると大変助かります。
宜しくお願い致します。

お礼日時:2017/01/24 12:40

A列の左に●列があった場合、式がどう変化すると言うことでしょうか?


であれば、
先ほど「A~C列が1~100行に入力されていて、指定セルがD1、検索表示セルがE1として、」としていたものを、
「B~D列が1~100行に入力されていて、指定セルがE1、検索表示セルがF1として、」という条件に変更させてもらい、
F1=IF(SUMPRODUCT((E1>=B1:B100)*1,(E1<=C1:C100)*1,ROW(D1:D100))=0,"該当なし",INDIRECT("D"&SUMPRODUCT((E1>=B1:B100)*1,(E1<=C1:C100)*1,ROW(D1:D100))))
となりますね。

ご質問された内容に則してない様であれば再度説明いただけると助かります。
    • good
    • 0

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