次のように、列Aに指定されていない行数をとる簡単なExcelシートを作成するタスクがあります。
1234
123461
123151
11321
そして、それらを別のセル内のコンマ区切りリストにし、ユーザーが簡単にコピーして別のプログラムに貼り付けられるようにします。
1234,123461,123151,11321
これを行う最も簡単な方法は何ですか?
次のように、列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)
、コンマ区切りのリストが表示されます。
別の方法は、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の形式を「テキスト」に設定してください。そうしないと、数字が台無しになります。VBAでもこれを行うことができると確信していますが、現時点ではどのようになっているのかわかりません。仕事に戻る必要があります。;)
viまたはvimを使用して、各行の末尾にカンマを配置します。
%s/$/,/
このコマンドを説明するには:
%
すべての行に対してアクション(つまり、検索と置換)を実行することを意味しますs
置換を示します/
引数を分離します(つまり、s/find/replace/options
)$
行の終わりを表します,
この場合の置換テキストですHow-To Geekのガイドを使用して、行を列に変換し、単純に逆にすることができます。次に、データをcsv(コンマ区切り形式)としてエクスポートすると、プレーンテキストのコンマ区切りリストが作成されます!必要に応じて、メモ帳からコピーしてExcelに戻すことができます。また、コンマの後にスペースが必要な場合は、「&」を「、」に置き換えて検索と置換機能を実行できます。お役に立てば幸いです!
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
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
Sux2Loseの答えは私の好みの方法ですが、数千行以上を扱う場合は機能せず、コンピューターに十分なメモリがない場合はさらに少ない行で壊れる可能性があります。
この場合のベストプラクティスは、特別な過ぎて、列をコピーし、新しいブックを作成するためにおそらくA1
新しいワークブックのTranspose
ように列が現在の行であること。次に、ワークブックをとして保存し.csv
ます。これで、csvは基本的にプレーンテキストのカンマ区切りリストになり、テキストエディタで開くことができます。
注: csvとして保存する前に、列を行に置き換えることを忘れないでください。そうしないと、Excelは値の間にコンマを挿入することを知りません。
最も簡単な方法の1つは、この種のコンマ区切りタスクにzamazin.co Webアプリを使用することです。列データを入力し、変換ボタンを押してコンマ区切りリストを作成します。他の設定を使用して、目的の出力を改善することもできます。