アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記↓のようなデータがあります。

=========

  A    B    C    
1 りんご なし  みかん
2 なし  
3 みかん りんご

=========

これを↓下記のようなデータにかえたいです。

=========

  A
1 りんご,なし,みかん
2 なし
3 みかん,りんご

=========

元々後者のデータだったのですが、
作業のため区切り位置で前者のデータに加工しました。
が、元に戻す必要が出てきました・・・。

&を使ってやる方法だと

りんご,なし,みかん
なし,,
みかん,りんご,

となってしまうし、うまいやり方が思いつきません。
IF関数を使って、ブランクセルの場合は「,」をつけない、とかやれば
できそうな気もしますが、勉強不足でどういう関数を書いたらいいか分かりません・・・。

エクセルにお詳しい方、ご教授いただければ幸いです。

A 回答 (9件)

データが必ず左の列から詰まっているのでしたら、


D1セルには次の式を入力して下方にオートフィルドラッグすればよいでしょう。

=IF(A1<>"",A1,"")&IF(B1<>"",","&B1,"")&IF(C1<>"",","&C1,"")
    • good
    • 3
この回答へのお礼

ご回答ありがとうございます。
結局手作業でやってしまったのですが
勉強になりました。
次回から参考にさせていただきます!

お礼日時:2011/12/19 10:09

二つ考えてみました。



=CONCATENATE(A1,IF(B1="","","," & B1),IF(C1="","",","&C1))
=CHOOSE(COUNTA(A1:C1),A1,A1&"," &B1,A1&","&B1&","&C1)

3個以上になれば、ズラズラと長くする必要がありますが、上の方がスマートと感じます。
    • good
    • 2
この回答へのお礼

ふたつも考えてくださってありがとうございます!
関数をネストするのが苦手で・・
CONCATENATEって関数はじめてみました。勉強します。

回答がたくさん寄せられているのに気付かず
結局手作業でやってしまったのですが
次回同じ作業が発生した時にはぜひ試してみたいと思います。
ありがとうございました。

お礼日時:2011/12/19 10:24

 データの中に、例えば「山田 太郎」等の様に、途中に空白を含んでいるデータが無い場合には、次の様な関数を使用して、御望みの結果を得る事が出来ます。



=SUBSTITUTE(TRIM($A1&" "&$B1&" "&$C1)," ",",")
    • good
    • 0
この回答へのお礼

シンプルですね!どちらの関数もよく知らないので、勉強になります。
回答がたくさん寄せられているのに気付かず
結局手作業でやってしまったのですが
次回同じ作業が発生した時にはぜひ試してみたいと思います。
ありがとうございました。

お礼日時:2011/12/19 10:22

関数でやると式が長くなる。


VBAでCSVを「扱うとき、しょっちゅう出てくる課題なのでユ、ーザー定義関数を使いやってみる。
例データ 
A2:C4の範囲
りんごなしみかん
りんご
りんごみかん
ーー
標準モジュールに
Function CSVC(a)
Dim cl
s = ""
For Each cl In a
If cl <> "" Then
s = s & cl & ","
End If
Next
CSVC = Left(s, Len(s) - 1) '最後の,を削除
End Function
--
この関数の使い方
シートの
E2セルに =csvc(A2:D2) D2はどの列まででも良いが本例ではD列までありえるとした場合
下方向に式を複写する。
結果
E列
りんご,なし,みかん
りんご
りんご,みかん
E列が結果です
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
結局手作業でやってしまったのですが
勉強になりました。
次回から参考にさせていただきます!

お礼日時:2011/12/19 10:20

こんばんは!


VBAになってしまいますが・・・
一例です。
Sheet1のデータをSheet2に表示するようにしてみました。
※ Sheet1のデータは1行目からあるとします。

画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面がでますので
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i, j As Long
Dim str As String
Dim ws As Worksheet
Set ws = Worksheets(2)
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To Cells(i, Columns.Count).End(xlToLeft).Column
str = str & Cells(i, j) & ","
Next j
ws.Cells(i, 1) = Left(str, Len(str) - 1)
str = ""
Next i
ws.Columns(1).AutoFit
End Sub 'この行まで

以上、参考になれば良いのですが、
ご希望の方法でなかったらごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

マクロまで書いてくださってありがとうございます!
回答がたくさん寄せられているのに気付かず
結局手作業でやってしまったのですが
次回同じ作業が発生した時にはぜひ試してみたいと思います。
ありがとうございました。

お礼日時:2011/12/19 10:19

=IF(B1="",A1,A1&",")&IF(C1="",B1,B1&",")&C1



で、いかがでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
結局手作業でやってしまったのですが
勉強になりました。
次回から参考にさせていただきます!

お礼日時:2011/12/19 10:16

例えばC列までデータがあるのでしたら次の式をD1セルに入力して下方にオートフィルドラッグします。



=IF(A1<>"",A1,"")&IF(AND(B1<>"",A1<>""),","&B1,B1)&IF(AND(C1<>"",COUNTA(A1:B1)>0),","&C1,C1)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
結局手作業でやってしまったのですが
勉強になりました。
次回から参考にさせていただきます!

お礼日時:2011/12/19 10:08

A列を挿入して A1セルに


=SUBSTITUTE(TRIM(CONCATENATE(B1," ",C1," ",D1," ",E1," ",F1," ",G1," ",H1," ",I1," ",J1," ",K1," ",L1," ",M1," ",N1," ",O1))," ",",")
下へオートフィル
A列をコピーして
メモ帳に貼り付け
または、形式を選択して貼り付け 値の貼り付け
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
結局手作業でやってしまったのですが
勉強になりました。
次回から参考にさせていただきます!

お礼日時:2011/12/19 10:08

一旦、csv形式のファイルにして保存し、・・・



=========
  A    B    C    
1 りんご なし  みかん
2 なし  
3 みかん りんご
=========

 この Excelシートが、

=========
りんご,なし,みかん
なし
みかん,りんご
=========

 というファイルになります。



 そのcsv形式のファイルの一行を1セルに読み込む方法ではダメ(面倒)ですか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

その作業はぜんぜん面倒ではないのですが、
やりかたが悪いのか、教えていただいた通りになりません。

わたしがやると・・・

csv形式にして保存

エクセル(2007)で開いても同じようにセルはわかれたまま・・・

エクセルで開いたからくっついてくれないのかな?
と思ってメモ帳やワードパッドで開いてみましたが
今度は

なし,,
みかん,りんご,

という感じで後ろに,がついてしまいます。

なにか間違ってますでしょうか?

あるいは
作業列を足したり、何ステップか踏んだりしてもいいので
ほかのやり方はありますか?

お礼日時:2011/12/16 15:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A