このように、列Aの不特定の行数をとる単純なExcelシートを作成するというタスクがあります。
1234
123461
123151
11321
そして、それらを他のセルのカンマ区切りのリストにして、ユーザーがコピーして他のプログラムに貼り付けることができるようにします。
1234,123461,123151,11321
これを行う最も簡単な方法は何ですか?
私は実際に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)
を入れるだけで、それは私にコンマで区切られたリストを与えます。
あなたのデータがA1で始まると仮定すると、私は以下をB列に入れるでしょう:
B1:
=A1
B2:
=B1&","&A2
その後、列B2を列全体に貼り付けることができます。列Bの最後のセルは、列Aのコンマ区切りリストになります。
,
で区切られたテキストに変換する必要があるもの)を選択し、を押します。 Ctrl - H (検索と置換)^p
と入力します。,
と入力します。別の方法は、Excelの列をこのブラウザ内ツールに貼り付けることです。
convert.town/column-to-comma-separated-list
テキストの列をコンマ区切りのリストに変換します。
ユーザーがとにかく別のプログラムにコピー&ペーストしているので、これは彼らにとっても同じくらい簡単かもしれません。
あなたはこのようなことをすることができます。あなたが巨大なスプレッドシートについて話していないならば、これは 'OK'を実行するでしょう...
これが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でもこれを行うことができると確信しています、しかし私は現時点でどのように確信が持てず、そして仕事に戻る必要があります。 ;)
Vi、またはvimを使用して、単に各行の末尾にコンマを配置します。
%s/$/,/
このコマンドを説明するには
%
は、すべての行に対してアクション(検索と置換)を実行することを意味しますs
は置換を示します/
は引数を分離します(すなわちs/find/replace/options
)$
は行の終わりを表します,
は置換テキストです。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
How-To Geekのガイドを使用して、行を列に変換し、単に逆にすることができます。それからcsv(カンマ区切りフォーマット)としてデータをエクスポートすれば、あなたはあなたの平文のカンマ区切りのリストを持っています!必要に応じて、メモ帳からコピーしてExcelに戻すことができます。また、カンマの後にスペースが必要な場合は、 "&"を "、"に置き換えて検索と置換機能を実行できます。それが役立つことを願っています!
各リストのタイトルとそれらのタイトルからのリストの両方を区切る空白行を含む複数のリストを含む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
Sux2Loseの答え は私の推奨する方法ですが、数千行を超える数を扱っている場合はうまくいきません。あなたのコンピュータがあまり利用可能なメモリを持っていないなら、行.
この場合のベストプラクティスは、おそらく列をコピーし、新しいブックを作成し、新しいブックのA1
とTranspose
を通過させて、その列が行になるようにすることです。次に、ワークブックを.csv
として保存します。あなたのcsvは基本的にあなたがテキストエディタで開くことができるプレーンテキストのコンマ区切りのリストです。
注:csvとして保存する前に、列を行に置き換えてください。そうでなければ、Excelは値の間にコンマを入れることを知りません。