[[20230304165933]] 『関数かマクロで、複数条件が一致したらセルを繋げ』(みかん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『関数かマクロで、複数条件が一致したらセルを繋げ合わせたい』(みかん)

教えて下さい。
関数もしくはマクロで下記のような事が出来ないか考えています。
やりたい事は、E列の記号とB列の記号が一致したら、F列にA列の果物を繋げて表示したいです。
ただし条件があり、C列がNGの場合は表示したくないです。

      A      B       C       
  1 りんご   a         OK              
  2 みかん   b         OK
  3 かりん   a         NG
  4 めろん   a         保留
  5 ざくろ   c         OK
  6 ぶどう   b         OK
  7 いちご   a         OK
  8 すいか   d         NG

 F列の結果は下記のようにしたい。
        E       F
  1    a       りんご、めろん、いちご
  2    b       みかん、ぶどう
  3    c       ざくろ
  4    d       

下記計算でC列の条件がなければ出来そうですが、もしC列がOKか保留だったら文字を繋げるのようにするにはどのように組み合わせれば良いかが分かりません。
もしくはマクロで、このようなケースでよいコードがあればそれも知りたいです。

=TEXTJOIN(",",TRUE,IF(B:B=E1,A:A,""))

よろしくお願いします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 >=TEXTJOIN(",",TRUE,IF(B:B=E1,A:A,""))
    ↓
   =TEXTJOIN(",",TRUE,IF((B:B=E1)*(C:C<>"NG"),A:A,""))

  ※列の全体参照は重くなるので、(少し広めにして)範囲は限定した方がいいです。

(半平太) 2023/03/04(土) 17:27:06


 こんばんは!
私は、365 じゃないしついついこういうコードを書きたくなるんですよね(^^;
まぁ、、既に数式で回答がついてますから参考程度にしてもらえると幸いです。。。
では、、では、、、

 Option Explicit
Sub てすと()
Dim x As Variant
Dim y As Variant
Dim yy As Variant
Dim z As Variant
Dim q As Variant
Dim i As Long
x = Range("A1").CurrentRegion.Resize(, 3).Value
y = Range("E1").CurrentRegion.Resize(, 1).Value
ReDim yy(LBound(y, 1) To UBound(y, 1))
For i = LBound(y, 1) To UBound(y, 1)
    ReDim z(0)
    yy(i) = z
Next
For i = LBound(x, 1) To UBound(x, 1)
    If x(i, 3) <> "NG" Then
        q = Application.Match(x(i, 2), Application.Index(y, 0, 1), 0)
        If Not IsError(q) Then
            z = yy(q)
            z(UBound(z)) = x(i, 1)
            ReDim Preserve z(UBound(z) + 1)
            yy(q) = z
        End If
    End If
Next
For i = LBound(y, 1) To UBound(y, 1)
    z = yy(i)
    If z(0) <> "" Then
        ReDim Preserve z(UBound(z) - 1)
        z = Join(z, ",")
        yy(i) = z
    Else
        yy(i) = ""
    End If
Next
Range("F:F").Clear
Range("F1").Resize(UBound(yy)).Value = Application.Transpose(yy)
Erase x, y, yy, z
End Sub
(SoulMan) 2023/03/04(土) 18:38:32

半平太様
ありがとうございます。

で乗算すれば良かったのですね!

大変勉強になりました。

SoulMan様
配列使って出来てしまうのですね。
まだ理解出来ていませんが、一つ一つ意味確認してみます!
大変ありがとうございます。
(みかん) 2023/03/04(土) 20:34:38


すみません、掛け算のマーク入れたらなぜか、その後の文字が大きくなってしまいました(^^;)
ありがとうございました。
(みかん) 2023/03/04(土) 20:36:44

先日は色々ありがとうございました。
追加の質問で恐縮ですが、もうひとつ教えてください。

=TEXTJOIN(",",TRUE,IF((B:B=E1)*(C:C<>"NG"),A:A,""))
の式の応用で、もしC列に「対象外」というのもあった場合、OKか保留だったら果物名を繋ぎ合わせたいとなると、どうなりますでしょうか?

=TEXTJOIN(",",TRUE,IF((B:B=E1)*(C:C ="OK")*(C:C ="保留"),A:A,"")) だと意図通りの結果になりません。
足し算にしてもダメでした。

何か良い方法があればご教授いただきたく、、
よろしくお願いします。
(みかん) 2023/03/06(月) 18:55:14


 =TEXTJOIN(",",TRUE,IF((B:B=E1)*((C:C="OK")+(C:C="保留")),A:A,""))
 こういうことだろうか?
 *はAND条件、+はOR条件ということと四則演算の優先順位(*/が+-より優先)に気を付けること。
(ねむねむ) 2023/03/07(火) 06:57:44

ねむねむ様
お返事遅くなりすみません。
ありがとうございました。
おかげさまで、無事に解決しました。
昨日色々試してダメだったのは、組み合わせる時に、()の位置が適切でなかったようです。

(みかん) 2023/03/07(火) 17:15:28


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.