- ベストアンサー
EXCELでカンマで区切られた文字列を別々のセルに分けたい
はじめまして。 EXCEL初心者のものです。 基本的な質問かも知れませんが分からないので教えてください。 現在、Excelでアンケート結果を集計しようとしております。 アンケートフォームにCSV出力できる機能があり、 CSVファイルにてダウンロードはできたのですが ひとつのセルに複数の回答が入っているためうまく集計ができません。 【例】こんな感じです。 ------------------------------------ 好きな食べ物は 好きな色は ------------------------------------ りんご,みかん あお,あか,きいろ ------------------------------------ 魚,みかん 紫,みどり ------------------------------------ 以下、たくさん続きます(1,000件ぐらい) 通常、こういったデータの場合はどのように処理すればよいでしょうか? そもそもアンケートフォームの設問設定自体が間違っていたのでしょうか? 困っていますので宜しくお願いいたします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そろそろ大掃除も終ってお開きのようです。 ですから補足の補足を。 FileReadArray 関数の登録要領。 1、シートタグを右クリックし[コードの表示(V)]をクリック。 2、挿入(I)-標準モジュール(M) をクリック。 3、左の[標準モジュール]-[Module1]をクリック。 4、以下のコードをコピペ。 5、ツール(T)-参照設定(R) で Microsoft Scriting Runtime にレ点。 これで、先の回答をコマンドボタンのクリックイベントにコピペすれば動作します。 Public Function FileReadArray(ByVal FileName As String) As String() On Error GoTo Err_FileReadArray Dim fso As FileSystemObject Dim strTexts() As String Set fso = New FileSystemObject strTexts() = Split(fso.OpenTextFile(FileName).ReadAll, vbCrLf) Exit_FileReadArray: FileReadArray = strTexts() Exit Function Err_FileReadArray: MsgBox Err.Description & "(FileReadArray)", vbExclamation, " 関数エラーメッセージ" strTexts() = Split("") Resume Exit_FileReadArray End Function まあ、決して、不可能な挑戦ではないでしょう。 FileReadArray 関数なんて理解しようがしまいがどうでもよいことです。 使えれば問題ないです。 頑張って下さい。
その他の回答 (6)
すみません! 専門家になっていましたが、エクセルは操作したこともない門外漢です。 が、求めに応じて補足します。 <Answer.csv> 好きな食べ物は 好きな色は りんご,みかん あお,あか,きいろ 魚,みかん 紫,みどり 仮に、このような Answer.csv があるとします。 <Sheet1> 好きな食べ物は りんご みかん 魚 みかん <Sheet2> 好きな色は あお あか きいろ 紫 みどり これは、実際にCSVを読み込んだ Excel のコピーです。 Private Sub CommandButton1_Click() Dim I As Integer Dim J As Integer Dim K As Integer Dim N As Integer Dim M As Integer Dim L As Integer Dim intIndex(1) As Integer Dim strDatas() As String Dim strAnswers() As String Dim strAnswers_A() As String Dim strAnswers_B() As String strDatas() = FileReadArray("C:\Temp\Answer.csv") N = UBound(strDatas()) For I = 0 To N strAnswers() = Split(strDatas(I), " ") M = UBound(strAnswers()) If M = 1 Then ' ' 答え1 ' strAnswers_A() = Split(strAnswers(0), ",") L = UBound(strAnswers_A()) For K = 0 To L intIndex(0) = intIndex(0) + 1 Sheet1.Cells(intIndex(0), 1) = strAnswers_A(K) Next K ' ' 答え2 ' strAnswers_B() = Split(strAnswers(1), ",") L = UBound(strAnswers_B()) For K = 0 To L intIndex(1) = intIndex(1) + 1 Sheet2.Cells(intIndex(1), 1) = strAnswers_B(K) Next K End If Next I End Sub これが読み込むために書いたコードです。 Microsoft Scripting Runtime を参照する必要があります。 こういう回答で宜しければ、FileReadArray 関数は、後ほど・・・。
- mshr1962
- ベストアンサー率39% (7417/18945)
集計はどのようにして計算するつもりなのでしょうか? 上記の内容でも りんごの個数=COUNTIF(A:A,"*りんご*") みかんの個数=COUNTIF(A:A,"*みかん*") 魚の個数=COUNTIF(A:A,"*魚*") で集計自体は可能です。まあ正確には りんごの個数=COUNTIF(A:A,"*りんご*")+COUNTIF(A:A,"*リンゴ*") +COUNTIF(A:A,"*林檎*") のようにしなきゃいけないんでしょうけど... 一応、エクセルの機能で横方向にはバラせます。 右側のセルに展開する形なので、展開用の列を挿入してもらう必要がありますが... 一列のみ範囲選択して、「データ」「区切り位置」で 「カンマやタブなどを...」を選択して次へ 「カンマ」を選択して「次へ」 書式を変更する必要があれば、作業後の列単位に書式を選択して「完了」 これで りんご,みかん → りんご みかん の2セルに分かれます。
好きな食べ物は 好きな色は ------------------------------------ りんご,みかん あお,あか,きいろ ------------------------------------ 魚,みかん 紫,みどり ------------------------------------ 単に集計するだけであれば、 <Sheet1> りんご みかん 魚 みかん <Sheet2> あお あか きいろ 紫 みどり と、CSVファイルを読み込む際に分ければ・・・。 これを実現することが無理であれば、ファイルを質問数だけコピーしてメモ帳で編集。 60分もあれば余裕で修正出来ると思います。
お礼
非常に魅力的な提案をいただいているようですが 私の勉強不足のためどうすればいいのか分かりません…。 もう少し具体的に教えていただけると助かります。 よろしくお願いいたします。
- ryuujiok2205
- ベストアンサー率21% (233/1098)
> ------------------------------------ > 好きな食べ物は 好きな色は > ------------------------------------ > りんご,みかん あお,あか,きいろ > ------------------------------------ これ、どう集計したいんですかね? 「好きな食べ物」は、りんご 1 みかん 1 ですか。りんご,みかん 1 ですか。 > そもそもアンケートフォームの設問設定自体が間違っていたのでしょうか? まったくもって「そのとおり!」です。 私の疑問はとりあえず前者だとして、さらにExcelがお書きになっているイメージからタブ区切りかなんかだと想像して、まずは「好きな食べ物.CSV」と「好きな色.csv」に分けます。 それでもって後はプログラム組める人に泣きつくしかないですね。 これを ------------- 好きな食べ物は ------------- りんご,みかん ------------- 魚,みかん ------------- こう直してもらいます。 ------------- 好きな食べ物は ------------- りんご ------------- みかん ------------- 魚 ------------- みかん ------------- 文字列中のカンマ探して以降を次のレコードに切り飛ばす。「できる」人にはプログラム処理は可能です。カンマが全角半角混在してたとか実は「、」もあったとかは早めに教えてあげてください。
- kaz-5919
- ベストアンサー率26% (45/170)
好きな食べ物の1つの質問に複数回答できるんですかね これだときれいな表にするのは今のままだったら難しいと思います CSVを作り変えるか 簡単にまとめれるかわかりませんが 好きな食べ物の列を新しい表にコピーして その列を選択して「データ」の「区切り位置」でやってやれば 一応セル1つに対し1データにはなると思います 説明が下手ですみません。。。
- ham_kamo
- ベストアンサー率55% (659/1197)
そのアンケートフォームは何で作られているのでしょうか? もしCSV出力機能を修正できるなら、 りんご,みかん,あお,あか,きいろ でなく "りんご,みかん","あお,あか,きいろ" のように出力するよう修正するのが手っ取り早いと思うのですが。
お礼
ご回答ありがとうございます。 使っているのは「X-Form」というレンタルフォームです。 ざっと見た感じCSV出力機能の修正はなさそうでした…。
お礼
門外漢なんてとんでもない! こんな複雑なコードを書かれているのにビックリしました! しかし拝見しているとかなりレベルが高そうで私では理解できません…。 もう少し勉強してから再度教えていただきたいと思います。 せっかくご丁寧にアドバイスいただいたのに理解不足で申し訳ありません。 ありがとうございました。