[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『数値を比較、条件による表示の並び替えと出力』(エクレール)
類似の質問がないか知恵袋やExcelを取り扱ったサイトを探してみたのですが ヒントになるような記述も見つからず、こちらに質問した次第となります。 お知恵をお貸しいただけましたら幸いです。
■やりたいこと 数値データを参照して、数値により表示順を並び替えて、 特定の文字列と数値を出力する関数を作成したいのですが 同じ数値の場合と異なる数値の場合で文字列の表示位置を変更する うまい具合の関数が思いつきませんでした。
(例) 【データ】 A B C D E 100 100 200 200 100
※データとして持っていませんが、 A=リンゴ B=みかん C=ブドウ D=梨 E=スイカに対応
上記のようなデータがあった場合、 【ブドウと梨が200円、リンゴとみかんとスイカが100円。】 と出力し、 例えば「みかんが200」に変わった場合、 【みかんとブドウと梨が200円、リンゴとスイカが100円。】 とするには、どのような関数を使えばよろしいでしょうか。 1つの関数に収まらなくても問題ありません。 文字列を出力するセル以外に計算用のセルを設けることは可能です。
※文字列に出力する際に、A>B>C>D>Eの優先順で表示されるのが理想です。 ※関数を記述するbookとデータの記述されたbookは別で、データbookは編集不可能です。 ※データ自体はMATCH関数を利用して関数を記述するbookにコピーしています。(作成済) ※関数を記述するbookには作業列などの追加は可能です。 ※VBAはできませんが、VBAで解決する場合は、VBAでも問題ありません。
究極的に言ってしまえば全てのパターンをIFで定義してしまえばいいのかもしれませんが、 関数が非常に長くなる為、今後を考慮すると好ましくありません。
組み合わせのパターンごとに文字列を表示する関数を作成して、 IFで条件分けしてパターンを呼び出す事も考えたのですが、 数値による表示位置の変更部分をどうしたらいいか、思いつかず断念している状況です。
何か良い案はないでしょうか。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
こういうことっすか? データとして持っていない、りんごやらみかんやらはこちらではどうにもできません。 G2=AggAndCon(A1:E1,A2:E2)
|[A]|[B]|[C]|[D]|[E]|[F]|[G] [1]|A |B |C |D |E | | [2]|100|100|200|200|200| |AとBが100円、CとDとEが200円。
Function AggAndCon(dt As Range, yen As Range) As String Dim dic As Object Set dic = CreateObject("Scripting.Dictionary") Dim c As Long For c = 1 To yen.Columns.Count dic(yen.Cells(1, c).Value) = dic(yen.Cells(1, c).Value) & "と" & dt.Cells(1, c).Value Next c Dim k As Variant Dim msg As String For Each k In dic.keys msg = msg & Mid(dic(k), 2) & "が" & k & "円、" Next k AggAndCon = Left(msg, Len(msg) - 1) & "。" Set dic = Nothing End Function (稲葉) 2017/08/08(火) 15:45
ちゃんと読んでなかった・・・ コード差し替えでお願いします。
Function AggAndCon(dt As Range, yen As Range) As String Dim dic As Object Set dic = CreateObject("Scripting.Dictionary") Dim AL As Object Set AL = CreateObject("System.Collections.ArrayList") Dim c As Long For c = 1 To yen.Columns.Count If Not dic.exists(yen.Cells(1, c).Value) Then AL.Add yen.Cells(1, c).Value dic(yen.Cells(1, c).Value) = dt.Cells(1, c).Value Else dic(yen.Cells(1, c).Value) = dic(yen.Cells(1, c).Value) & "と" & dt.Cells(1, c).Value End If Next c Dim k As Variant Dim msg As String AL.Sort AL.Reverse For Each k In AL.toarray msg = msg & dic(k) & "が" & k & "円、" Next k AggAndCon = Left(msg, Len(msg) - 1) & "。" Set dic = Nothing Set AL = Nothing End Function (稲葉) 2017/08/08(火) 15:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.