[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『検索して抜き出した文字列をくっつける。』(プーさん)
A B C 1 ABC 商品代 ”商品代、保険料” 2 EFZ 運賃 3 RET 船代 4 ABC 商品代 5 LEC 機械代 6 ABC 保険料
A列から”ABC" を検索して、それに該当するB列を抜き出します。
ここでは、A1とA4の”商品代”とA6の”保険料”ですね。
この抜き出した”商品代”と”保険料”を、C1に”商品代、保険料”として表したいと思っています。
ポイントは、ABCの”商品代”という重複を無視することです。
配列数式、CONCATENATEなどいろいろと試みましたが、どうもうまくいきません。
ご存知の方宜しくお願いします。
多分、こんなことじゃないと思うけど、レスがついていなかったのと ちょっと息抜きで考えてみました。 D列を作業列に使います。 D1からD6を選択した状態で数式バーに =IF(MATCH(B1:B6,B1:B6,0)=ROW(B1:B6),B1:B6,"") と入力してCtrl+Shift+Enterで確定します。 次にC1に =INDEX(D1:D6,SMALL(IF((A1:A6="ABC")*(D1:D6<>""),ROW(D1:D6)),ROW(A1)))&"、"& INDEX(D1:D6,SMALL(IF((A1:A6="ABC")*(D1:D6<>""),ROW(D1:D6)),ROW(A2))) と入力してCtrl+Shift+Enterで確定します。 ABC 商品代 商品代、保険料 商品代 EFZ 運賃 運賃 RET 船代 船代 ABC 商品代 LEC 機械代 機械代 ABC 保険料 保険料 するとこんな感じになりました。 今回限定ということで何かの参考になれば幸いです。 ではでは、春はまだまだ遠い。。SoulManでした。 http://ryusendo.no-ip.com/cgi-bin/upload/src/up0207.xls
朝起きてよく考えたら作業列は不要でしたね(^^;;; C1に =INDEX(B1:B6,SMALL(IF((A1:A6="ABC")*(MATCH(B1:B6,B1:B6,0)=ROW(B1:B6)),ROW(A1:A6)),ROW(A1)))&"、"& INDEX(B1:B6,SMALL(IF((A1:A6="ABC")*(MATCH(B1:B6,B1:B6,0)=ROW(B1:B6)),ROW(A1:A6)),ROW(A2))) と入力してCtrl+Shift+Enterでどでしょう? もっと奥がありそうですが、、、 (SoulMan)
ちょっと遅くなりました。作業列を使う方法で考えました。 作業列(E列)では、検索値(G1セルにABCと入力とします)と合致したB列を表示します。 E1セルに下の式を入れて、E6までコピー =IF(A1=$G$1,B1,"") 作業列(F列)では、E列で重複するものを除き且つ該当する2番目以降の前に『、』を付けます。 F1セルには、 =E1 とし、F2セルに下の式を入れてF6までコピー =IF(E2="","",IF(COUNTIF($E$1:E2,E2)=1,IF(COUNTA($F$1:F1)-COUNTIF($F$1:F1,"")>=1,"、"&E2,E2),"")) んでもって、問題はC1セルへの表示ですが、頭とお尻の『"』は、上手く認識してくれませんので、 (※詳しい理由は、私には分りません。多分文字列として認識しなさい! みたいな感じだと思います。) 『''』=シングル2個で対応しました。 =IF(COUNTIF(A1:A6,G1),CONCATENATE("ここ",F1,F2,F3,F4,F5,F6,"ここ"),"ありませんからー、残念!") YukiWikiの文字装飾ルールと重なってしまうので、上記の『ここ』の部分は、 実際は『''』に差し替えてください。 (sin) ちょっと別件:SoulManさん、お久しぶり〜。まだまだ続いてるんですか? ファイト!ですー。
ろくに回答もしてないけど、プーさんちょっとお借りします。 sinさんへ 頭*〜( ///// )ヽ(゚ロ゚)ノ爆発寸前!? って感じです。 >まだまだ続いてるんですか? 春は、、まだまだ、、です。。頑張ります。しかし、ワードってむずいですね(^^;;; お邪魔しました。m(__)m (SoulMan)
A B C D 1 ABC 商品代 ABC "商品代、保険料" 2 EFZ 運賃 EFZ "運賃” 3 LEC 船代 LEC "船代、機械代” 4 ABC 商品代 5 LEC 機械代 6 ABC 保険料 例えば、上の例のように A列から文字列を検索、それに対応するB列の文字列を、 C列を参照してD列にくっつけて表示する。 こんなことができる数式ありましょうか? ちなみにC列はベタ打ちし、D列に入力する数式にどんな ものがあるかと思っております。
只今考え中・・・只今考え中・・・ (sin)
思い切り作業列を使った方法です(^_^A; A B C D E F G H I J K 1 ABC 商品代 ABC "商品代,保険料" 商品代 保険料 "商品代,保険料,,,," 2 EFZ 運賃 EFZ "運賃" 運賃 "運賃,,,,," 3 LEC 船代 LEC "船代,機械代" 船代 機械代 "船代,機械代,,,," 4 ABC 商品代 5 LEC 機械代 6 ABC 保険料 D1=IF(C1="","",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(K1,",,,",""),",,",""),",","",COUNTIF(E1:J1,"?*"))) E1=IF(SUM(N(($A$1:$A$6=$C1)*(MATCH($B$1:$B$6,$B$1:$B$6,0))=ROW($B$1:$B$6)))<COLUMNS($E1:E1),"",INDEX($B$1:$B$6,SMALL(IF(($A$1:$A$6=$C1)*(MATCH($B$1:$B$6,$B$1:$B$6,0))=ROW($B$1:$B$6),ROW($A$1:$A$6),""),COLUMNS($E1:E1)),1)) として、Shift+Ctrlキー押しながらEnterキーで確定させて配列数式にしてJ1までコピー K1=CONCATENATE("""",E1,",",F1,",",G1,",",H1,",",I1,",",J1,"""")
項目6つまでしか対応してませんけど_/ ̄|○ il||li (川野鮎太郎)
ユーザー定義関数で作って見ました。 Function MyLOOKUP(adr As Range, rag As Range, colm As Integer) As String Dim c As Range Dim Myval As String Dim i As Long Dim flag As Integer
Application.Volatile
For Each c In rag If adr.Value = c.Value Then If Myval = "" Then Myval = c.Offset(, colm - 1).Value Else For i = 1 To Len(Myval) If c.Offset(, colm - 1).Value = _ Mid(Myval, i, Len(c.Offset(, colm - 1).Value)) Then flag = 1 Exit For Else flag = 0 End If Next i If flag = 0 Then Myval = Myval & "," & c.Offset(, colm - 1).Value End If End If End If Next c If Myval = "" Then MyLOOKUP = "該当なし" Else MyLOOKUP = """" & Myval & """" End If End Function こんなんで、よかったら見てください。 http://ryusendo.no-ip.com/~ken/cgi-bin/uploader/src/0003.xls (ケン)
参りました。。。 私の考え方だと、右方向の配列数式を認識してくれなくなったので、 ABC EFZ LEC "商品代、保険料" "運賃” "船代、機械代” ・ ・ ・ ・ ・ ・ こんな感じで、下方向への作業展開に変更していただく方向で考えてました。(一応出来ました!) ただ、ご要望とは違いますので お二人さん (むふっ、ここはリンクしてませんよ!) <<< あっと、これは、無視してください、) に、おんぶにだっこさせていただきます。 しかし、 ="""" これは、知らなかった! ありがたや、ありがたや、、、 (sin)
えーっと・・ お二人さん (むふっ、ここはリンクしてませんよ!) ↑何のことかしら〜〜♪〜〜( ̄ε ̄;;)
復活!!! っていうか、SoulManさんと川野鮎太郎さんのとで勉強し直してきました。 そこには、『重大な××』が・・・ F列からL列までを作業列とします。 F1セルに =A1&"_"&B1 これは、G列〜L列までの計算用の作業用です。 G1セルに =IF($C1="","",IF(COUNTIF($A$1:$A$6,$C1)=0,"",INDEX($B$1:$B$6,SMALL(IF(($A$1:$A$6=$C1)*(MATCH($F$1:$F$6,$F$1:$F$6,0)=ROW($F$1:$F$6)),ROW($A$1:$A$6)),COLUMN(A1))))) として、Ctrl+Shift+Enter で確定。 H1セルに =IF($G1="","",IF(ISNUMBER(SMALL(IF(($A$1:$A$6=$C1)*(MATCH($F$1:$F$6,$F$1:$F$6,0)=ROW($F$1:$F$6)),ROW($A$1:$A$6)),COLUMN(B1))),"、"&INDEX($B$1:$B$6,SMALL(IF(($A$1:$A$6=$C1)*(MATCH($F$1:$F$6,$F$1:$F$6,0)=ROW($F$1:$F$6)),ROW($A$1:$A$6)),COLUMN(B1))),"")) として、Ctrl+Shift+Enter で確定し、これをL1セルまでコピー。 D1セルに =IF(C1="","",IF(G1="","該当無し",CONCATENATE(""" ",G1,H1,I1,J1,K1,L1," """))) D1:L1を6行目までコピーして完了!
『重大な××』について、 ABC 商品代 ABC 商品代 EFZ 商品代 LEC 商品代 元データをこれで試してください。B列のみのマッチングだと全て 1 になります。 (sin)
アイタwΣ(ノ∀`)ペチッ 上記の私の案はポイッ(。・ω・)σ ⌒* してください。(^_^A; (川野鮎太郎)
お陰さまですごく助かります。しかし、見事な数式です。ふうむ、私ももっと勉強します。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.