web-dev-qa-db-ja.com

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

このように、列Aの不特定の行数をとる単純なExcelシートを作成するというタスクがあります。

1234
123461
123151
11321

そして、それらを他のセルのカンマ区切りのリストにして、ユーザーがコピーして他のプログラムに貼り付けることができるようにします。

1234,123461,123151,11321

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

123
muncherelli

私は実際に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)を入れるだけで、それは私にコンマで区切られたリストを与えます。

22
muncherelli

あなたのデータがA1で始まると仮定すると、私は以下をB列に入れるでしょう:

B1:

=A1

B2:

=B1&","&A2

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

141
Sux2Lose
  • Excelで列をコピーする
  • Wordを開く
  • テキストとしてのみ「形式を選択して貼り付け」
  • Wordのデータ(,で区切られたテキストに変換する必要があるもの)を選択し、を押します。 Ctrl - H (検索と置換)
  • [検索する文字列]ボックスに^pと入力します。
  • [置換後の文字列]ボックスに,と入力します。
  • [すべて置換]を選択します
74
Michael Joseph

Office 365 Excelをお持ちの場合は、TEXTJOIN()を使用できます。

=TEXTJOIN(",",TRUE,A:A)

enter image description here

27
Scott Craner

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

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

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

ユーザーがとにかく別のプログラムにコピー&ペーストしているので、これは彼らにとっても同じくらい簡単かもしれません。

10
sunset

あなたはこのようなことをすることができます。あなたが巨大なスプレッドシートについて話していないならば、これは '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のフォーマットを必ず 'text'に設定してください。そうしないと、番号が乱れてしまいます。私はあなたがVBAでもこれを行うことができると確信しています、しかし私は現時点でどのように確信が持てず、そして仕事に戻る必要があります。 ;)

7
mpeterson

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

%s/$/,/

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

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

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
2
mitch

How-To Geekのガイドを使用して、行を列に変換し、単に逆にすることができます。それからcsv(カンマ区切りフォーマット)としてデータをエクスポートすれば、あなたはあなたの平文のカンマ区切りのリストを持っています!必要に応じて、メモ帳からコピーしてExcelに戻すことができます。また、カンマの後にスペースが必要な場合は、 "&"を "、"に置き換えて検索と置換機能を実行できます。それが役立つことを願っています!

2
Duall

各リストのタイトルとそれらのタイトルからのリストの両方を区切る空白行を含む複数のリストを含むExcelシートを処理するようにgeneratecsv()サブルーチンを改善しました。例

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
roger lamb

Sux2Loseの答え は私の推奨する方法ですが、数千行を超える数を扱っている場合はうまくいきません。あなたのコンピュータがあまり利用可能なメモリを持っていないなら、行.

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

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

1
samthebrand