[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『関数かマクロで、複数条件が一致したらセルを繋げ合わせたい』(みかん)
教えて下さい。
関数もしくはマクロで下記のような事が出来ないか考えています。
やりたい事は、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
=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.