- ベストアンサー
excelで1つのセルに複数の値を返す方法はありますか?
おせわになっております。 excelで質問です。 excel関数でもVBAでもいいのですが、1つのセルに複数の値を返す方法はありますでしょうか?? たとえばVLOOKUP関数だと1つのセルに1つしか返せませんよね?? a=りんご b=バナナ c=すいか d=いちご e=キウイ と設定したしたとして、 a,c,dと入力すると→りんご,すいか,いちご とすべて1つのセルに出るようにしたいのです。りんご,すいか,いちごという値にしたいので、それぞれを別々のセルに入れることはしたくありません。可能でしょうか?? よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3です。ご期待にそえたようでうれしく思います。 >jlookupのjに何か意味はあるのでしょうか?? 深い意味はありません。 てきとーに考えてJoin(結合)のJをつけただけです。 自由に変更して構いませんが、その場合、 下から2行目の jlookup = Join(myAry, ",") の左辺もあわせて変更する必要があります。 ---------------------------------------- >コンマの代わりににスペースで区切る場合はどのようになりますでしょうか?? #3のコードについて、 myAry = Split(myStr, ",") ↓ myAry = Split(myStr, " ") とすれば、検索値が半角スペースで区切られているものとして動作します。 jlookup = Join(myAry, ",") ↓ jlookup = Join(myAry, " ") とすれば、戻り値を半角スペースで区切って返します。 ---------------------------------------- なお、引数を増やして区切文字をその都度自由に選べるようにすることもできます。 ●拡張VLOOKUP(検索値,範囲,列番号,検索の型,区切文字(検索値),区切文字(戻値)) 区切文字の指定を省略した場合は、","を区切文字として動作する仕様です。 '-------------↓ ココカラ ↓------------- Function 拡張VLOOKUP( _ ByVal myStr As String, _ ByVal myRng As Variant, _ ByVal myCol As Long, _ ByVal myOpt As Boolean, _ Optional ByVal kyDiv As String = ",", _ Optional ByVal rtDiv As String = "," _ ) As Variant Dim myAry As Variant Dim i As Long myAry = Split(myStr, kyDiv) For i = 0 To UBound(myAry) myAry(i) = WorksheetFunction. _ VLookup(myAry(i), myRng, myCol, myOpt) Next i 拡張VLOOKUP = Join(myAry, rtDiv) End Function '-------------↑ ココマデ ↑------------- ご参考まで。
その他の回答 (4)
- roze333
- ベストアンサー率34% (32/93)
こんにちは、 全体を選択(スクロール)してから、 1)右クリックで、セルの書式設定を選択 2)配置を選択 3)折り返して全体を表示する 又は 縮小して全体を表示する にチェックを入れる。 お役に立つかどうか分かりませんが、家計簿や文章作成する時この方法を使っています。見当違いな回答ならごめんなさいね。
お礼
私が求めていた答えとは異なっていたのですが、返信いただけて嬉しいです。ありがとうございました!!
- _Kyle
- ベストアンサー率78% (109/139)
検索する個数が不定の場合は、組込み関数だけでやるのは困難ですね。 VBAでもよいということなので、 とりあえずユーザー定義関数を書いて見ました。 JLOOKUP(検索値,範囲,列番号,検索の型) 検索値は、キーとする値をカンマで区切って結合した文字列。 戻り値は、それぞれのキーについてVLOOKUPした結果をカンマで区切って結合した文字列になります。 '-------------↓ ココカラ ↓------------- Function jlookup( _ ByVal myStr As String, _ ByVal myRng As Variant, _ ByVal myCol As Long, _ ByVal myOpt As Boolean _ ) As Variant Dim myAry As Variant Dim i As Long myAry = Split(myStr, ",") For i = 0 To UBound(myAry) myAry(i) = WorksheetFunction. _ VLookup(myAry(i), myRng, myCol, myOpt) Next i jlookup = Join(myAry, ",") End Function '-------------↑ ココマデ ↑------------- ご参考まで。
お礼
す、すごいです!!! これがしたかったんです。 ありがとうございます!! ところで、jlookupのjに何か意味はあるのでしょうか?? また、コンマの代わりににスペースで区切る場合はどのようになりますでしょうか?? たびたびすみません、よろしくお願いいたします。
- WDY
- ベストアンサー率27% (134/487)
一つの関数で全て出そうとしないで 複数の関数で返却される値を連結すれば 一つのセルに複数の回答を入力する式も作れますよ =VLOOKUP(条件)&VLOOKUP(条件)
お礼
ありがとうございます。こういう方法もあるのですね。参考にさせて頂きます。
- Turbo415
- ベストアンサー率26% (2631/9774)
別々のセルにa,b,dと入れて一つのセルに「りんご,すいか,いちご」と返すなら可能だと思います。しかし、一つのセルにカンマ区切りで複数入れた物をとなると難しいかも知れません。まあ、入力がアルファベット1桁と決まっているなら、カンマで区切らないでmid関数とかで分解してVlookup関数で引いてきて文字列を結合させる等の方法はあると思いますけど。一発の式でやると大変なのでワークエリアを作ってmid関数で入力値を分解、それぞれの値をVlookup関数で引いてくる、&などを使って結合して表示とするとできると思いますけど。 また、この場合入力する値の個数をある程度考えておかないとうまく使えなくなる可能性が有りますが。
お礼
mid関数で分解というのは思いつきませんでした。参考にさせて頂きます。ありがとうございました。
お礼
本当にありがとうございます!! 2つの式を見比べてみると仕組みがちょっとだけわかりましたが、自分では変更不可能でした^^; もっと勉強します。 今後この式はJLOOKUPで使わせていただきます♪ 本当に助かりました、ありがとうございます。 また宜しくお願い致します m(_ _)m