列をコンマ区切りリストに変換します


129

次のように、列Aに指定されていない行数をとる簡単なExcelシートを作成するタスクがあります。

1234
123461
123151
11321

そして、それらを別のセル内のコンマ区切りリストにし、ユーザーが簡単にコピーして別のプログラムに貼り付けられるようにします。

1234,123461,123151,11321

これを行う最も簡単な方法は何ですか?


8
ソリューションの一部は、列を行に変換するための編集、特殊貼り付け、転置です。他のプログラムがコンマではなくタブを受け入れる場合、新しい行をコピーした後はすべて設定されています。
アルジャン

どうやってこれの反対をしますか?コンマ区切りのリストを取得して、コンテンツの列に変換しますか?
stevvve

1
@stevvveは、データタブのテキストから列への機能を使用します。support.microsoft.com/en-us/kb/214261
トレバー

これには、notepad ++などの正規表現対応のテキストエディターを使用します。列の値をコピーしてエディターに貼り付け、正規表現を検索して置換し、「\ r \ n」を検索して「、」に置き換えます。あなたが列にCSVに変換したい場合は、見つける「」および『の\ r \ n』に置き換え
junaling

回答:


145

データがA1で始まると仮定すると、列Bに次のように入力します。

B1:

=A1

B2:

=B1&","&A2

その後、列B2を列全体に貼り付けることができます。列Bの最後のセルは、列Aのコンマ区切りリストになります。


8
これは限られた行数には適していますが、(利用可能なメモリに依存しますか?)数千行を超えて連結する場合、プロセスは短くなり、出力値が不完全になります。注意してください。
サムテブランド14

強力なWindows 10 ProコンピューターでExcel 2013を使用すると、30〜35行で失敗しました。マイケルジョセフによる解決策は完璧に機能しました。
トライアルマン

75
  • Excelで列をコピーする
  • Wordを開く
  • テキストとしてのみ「特別な貼り付け」
  • Wordのデータ(で区切られたテキストに変換する必要があるデータ)を選択し、- (検索と置換)を,押しますCtrlH
  • [検索対象]ボックスに ^p
  • [置換]ボックスの種類 ,
  • 「すべて置換」を選択します

+1 Microsoftの「公式」ソリューションと同じ:support.microsoft.com/kb/819964
Neo

非常にかわいいソリューション... :-)
サラバナン14

ただ純粋な魔法:)
Sudheej


23

実際に、すべての作業を行うモジュールをVBAで作成しました。範囲リストを取得し、選択したセルに出力されるコンマ区切りの文字列を作成します。

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

そのため、セルに配置するだけで=csvRange(A:A)、コンマ区切りのリストが表示されます。


1
ああ..私の答えにかなり近いですが、あなたの実装が好きです。
mpeterson

10

別の方法は、Excelの列をこのブラウザー内ツールに貼り付けることです。

convert.town/column-to-comma-separated-list

テキストの列をコンマ区切りリストに変換します。

とにかくユーザーが別のプログラムにコピーして貼り付けているので、これはユーザーにとっても同じくらい簡単です。


7

このようなことができます。巨大なスプレッドシートについて話していない場合、これは「OK」を実行します...

  • Alt-F11、マクロを作成してリストを作成します(以下のコードを参照)
  • ショートカットまたはツールバーボタンに割り当てる
  • ユーザーは数字の列を列Aに貼り付け、ボタンを押すと、リストがセルB1に入ります。

VBAマクロコードは次のとおりです。

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

必ずセルB1の形式を「テキスト」に設定してください。そうしないと、数字が台無しになります。VBAでもこれを行うことができると確信していますが、現時点ではどのようになっているのかわかりません。仕事に戻る必要があります。;)


7

viまたはvimを使用して、各行の末尾にカンマを配置します。

%s/$/,/

このコマンドを説明するには:

  • % すべての行に対してアクション(つまり、検索と置換)を実行することを意味します
  • s 置換を示します
  • /引数を分離します(つまり、s/find/replace/options
  • $ 行の終わりを表します
  • , この場合の置換テキストです

同意した。程遠い。
muncherelli

コンテキストのためにコメントに同意しません。ここに投稿するスーパーユーザーアカウントを持つ人は、多くの場合、vimを使用するタイプです。
uniquegeek

私はViMを使用していますが、基本的な考え方は役に立つと思います。アイデアとシンプルなテキストエディターを使用して、問題を解決しました。
ニギーニ

2

How-To Geekのガイドを使用して、行を列に変換し、単純に逆にすることができます。次に、データをcsv(コンマ区切り形式)としてエクスポートすると、プレーンテキストのコンマ区切りリストが作成されます!必要に応じて、メモ帳からコピーしてExcelに戻すことができます。また、コンマの後にスペースが必要な場合は、「&」を「、」に置き換えて検索と置換機能を実行できます。お役に立てば幸いです!


CSVへのエクスポートは、このユーザーができることを超えています。Excel内でポイントアンドクリックする必要があります。
muncherelli

2

muncherelli、私はあなたの答えが好きで、それを微調整しました:)。ちょっとしたことですが、シートからデータを取得し、それを使用してデータベースを照会することがあります。クエリで使用できるコンマ区切りリストの作成に役立つオプションの「textQualify」パラメーターを追加しました。

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

1

generatecsv()subを改善して、各リストのタイトルとタイトルからリストの両方を分離する空白行を持つ複数のリストを含むExcelシートを処理しました。例

list title 1

item 1
item 2

list title 2

item 1
item 2

そしてもちろん、それらを複数の行に結合します(リストごとに1行)。

理由として、主題に基づいてウェブサイトのリスト形式で複数のキーワードをクライアントに送信してもらい、これらのキーワードをウェブページに簡単に取り込む方法が必要でした。そのため、ルーチンを修正して次のことを思いつきました。また、変数名を意味のある名前に変更しました。

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub

1

Sux2Loseの答えは私の好みの方法ですが、数千行以上を扱う場合は機能せず、コンピューターに十分なメモリがない場合はさらに少ない行で壊れる可能性があります。

この場合のベストプラクティスは、特別な過ぎて、列をコピーし、新しいブックを作成するためにおそらくA1新しいワークブックのTransposeように列が現在の行であること。次に、ワークブックをとして保存し.csvます。これで、csvは基本的にプレーンテキストのカンマ区切りリストになり、テキストエディタで開くことができます。

注: csvとして保存する前に、列を行に置き換えることを忘れないでください。そうしないと、Excelは値の間にコンマを挿入することを知りません。


-1

最も簡単な方法の1つは、この種のコンマ区切りタスクにzamazin.co Webアプリを使用することです。列データを入力し、変換ボタンを押してコンマ区切りリストを作成します。他の設定を使用して、目的の出力を改善することもできます。

http://zamazin.co/comma-separator-tool

ここに画像の説明を入力してください


これはに今あるdelim.co
フィル・

-2

=CONCATENATE(A1;",";A2;",";A3;",";A4;",";A5)結果を表示するセルで使用します。


3
これはスケーラブルな手動ソリューションです。
ダニエルハリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.