• ベストアンサー

表のばらばらの文字列を1列にまとめたい 関数

添付の左の表を右の表にしたいです。 (1)左の表には数式が入っていて、この他にもう一つある表のデータに該当すると1列ごとにSMとかNPとか表示されるようになっています。 (2)この左の表は実際には136列あるので、結果を印刷すると一枚に収まりきらないのです。なので、右の表のように、1列に表示したいのです。 (3)1行のうち、2個以上文字列が入ることもありますが、その可能性は低いので、とりあえず1行に1個ずつ出現すると考えてもらっていいです。(2個以上文字列が出現する場合も分かれば教えてください。) (4)関数でできませんか? またはマクロでもいいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>とりあえず1行に1個ずつ出現すると考えてもらっていいです。 という事と、入力される値が数値や日時ではなく文字列データであという事であれば、G1セルに次の関数を入力してからG1セルをコピーしてG2以下に貼り付けて下さい。 =IFERROR(HLOOKUP("*?",$A1:$D1,1,FALSE),"") 或は =IF(COUNTIF($A1:$D1,"*?"),HLOOKUP("*?",$A1:$D1,1,FALSE),"")

honeybeans
質問者

お礼

わ、すごい、できてますね。いろいろネットで調べたのに分からなくて、こんなに早く回答がいただけるとは思いませんでした。ありがとうございました!

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 ユーザー定義関数を使う方法は如何でしょうか?  まず、下記のVBAマクロを標準モジュールに書き込んで下さい。 Function JOIN2D(セル範囲 As Range, Optional 列区切り文字 As String = "", Optional 行区切り文字 As String = "") Dim c As Range, tempRow As Long, myString As String, strJ As String For Each c In セル範囲 If c.Value <> "" Then strJ = 列区切り文字 If c.Row <> tempRow And セル範囲.Rows.Count > 1 Then strJ = 行区切り文字 If tempRow = 0 Then strJ = "" myString = myString & strJ & c.Value tempRow = c.Row End If Next c JOIN2D = myString End Function  その上で、例えばA1:D1のセル範囲に入力されている値をまとめた文字列を表示させたいセルに、次の様に入力して下さい。 =JOIN2D(A1:D1,",") するとA1:D1のセル範囲に入力されている値が「,」で区切られた形で表示されます。(空欄のセルは無視されます)  また例えば、B1:E3のセル範囲に、各々のセル番号と同じ文字列が入力されていた場合において、適当なセルに =JOIN2D(B1:E3,"あいう","えお") と入力しますと、次の様な結果が表示されます。 B1あいうC1あいうD1あいうE1えおB2あいうC2あいうD2あいうE2えおB3あいうC3あいうD3あいうE3  また、"えお"の代わりにCHAR(10)を入力しておけば、 B1あいうC1あいうD1あいうE1 B2あいうC2あいうD2あいうE2 B3あいうC3あいうD3あいうE3 と表示されます。  上記の,"あいう"と"えお"の部分はどちらも省略可能で、省略した場合には区切り文字なしで文字列が結合されます。

honeybeans
質問者

お礼

できました。すごく難しいと思ってやってませんでした。ありがとうございました!

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.2

G1: =A1&B1&C1&D1 「ぎょぎょ、できてますね!」では?

honeybeans
質問者

補足

136列あるのに? 全然できてません

関連するQ&A