1つのセル
りんご,バナナ |
---|
をVLOOKUPとループを利用して
別セルに以下の形式で出力したいです。
<![CDATA[a:2:{i:0;s:14:"fruits01";i:1;s:14:"fruits02";}]]>
参照するシートはfruitsシート
フルーツ名 | 値 |
---|---|
りんご | fruits01 |
バナナ | fruits02 |
イチゴ | fruits03 |
ぶどう | fruits04 |
<![CDATA[a:2:
の「2」はループ回数を表示
以上です。
よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
EXCELタグでの質問ですが、VBAを視野にいれていますでしょうか?
VBAを使わずEXCEL関数だけでとなると、VLOOKUPはわかりますがループ処理は難しいと思います。
(最大10個、といった制限でもあればまだできそうな気もしますが。)
VBAで独自関数を1つ作れば、比較的と簡単に実現できると思います。
以下のようなCDATA文字列を作成するVBAマクロを標準モジュールに記述します。
※Sheet2のA1:B5セルをVLOOKUPで参照するマスタ範囲として作成しています。利用環境に合わせて書き換えてください。
Public Function MakeCDATA(vRng As Range) Dim strRet As String '出力結果文字列 <![CDATA[a:2:{i:0;s:14:"fruits01";i:1;s:14:"fruits02";}]]> Dim shtMaster As Worksheet Dim rngMaster As Range 'VLOOKUPマスタシート Set shtMaster = ActiveWorkbook.Worksheets("Sheet2") 'VLOOKUPマスタ範囲 Set rngMaster = shtMaster.Range("A1:B5") Dim i As Integer Dim strFruits() As String Dim strFruitsVal As String If vRng = "" Then Exit Function '参照セルが空の場合は処理せず終了 '引数のセル内容をカンマで区切る strFruits = Split(vRng, ",") '要素数を出力 <![CDATA[a:2:{ strRet = "<![CDATA[a:" & CStr(UBound(strFruits) + 1) & ":{" '要素の数だけループ処理 For i = 0 To UBound(strFruits) On Error Resume Next 'VLOOKUPで値を取得 strFruitsVal = Application.WorksheetFunction.VLookup(strFruits(i), rngMaster, 2, False) If Err <> 0 Then 'マスタにない値の場合 strFruitsVal = "N/A" Err = 0 End If '要素番号を出力 'i:0;s:14:"fruits01"; 'i:1;s:14:"fruits02"; strRet = strRet & "i:" & CStr(i) & ";s:14:" '値を出力 strRet = strRet & Chr(34) & strFruitsVal & Chr(34) & ";" Next 'タグ閉じ }]]> strRet = strRet & "}]]>" MakeCDATA = strRet End Function
例えばSheet1のA1セルに"りんご,バナナ"と記述されているいる状態で、
B1セルに=MakeCDATA(A1)
という式を記述すると、上記で作成した独自関数がCDATA文字列を作成し、
B1セルに値が出力されます。
注意事項
これは上記コードに限らず、VLOOKUPの制約事項になりますが、VLOOKUPでマスタとして利用するデータは、検索キーとなる列(左端列)が昇順でソートされている必要があります。
検索列の昇順でソートされていない場合、VLOOKUPは指定された範囲に値が存在しているのに見つけられなかったり、正しい値を返せなかったりします。
提示いただいたマスタは、
りんご fruits01 バナナ fruits02 イチゴ fruits03 ぶどう fruits04
のように値の列でソートされていますが、検索キーとして利用するのはフルーツ名ですので、
イチゴ fruits03 バナナ fruits02 ぶどう fruits04 りんご fruits01
の順である必要があります。
投稿2016/12/19 05:55
総合スコア3013
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
投稿2018/12/24 06:17
総合スコア344
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
エクセルでVLOOKUPとループを同時に利用したい