- 締切済み
VBAで複数列セルに入力されている文字を一行に
こんにちは。VBAにて下記イメージの複数列セルに入力されている文字を一行に変換しメモに出力すると同時に出力された一行の文字列をコピーした状態にしたいです。セルに記載された文字は「,」カンマで区切った状態で範囲はA3セルからA50位となります。また、セルが結合されていたり空白が存在したり様々です。大変申し訳御座いませんがご教授宜しくお願いします。 あああ → あああ,いいい,ううう,えええ,おおお・・・ いいい ううう えええ おおお ・ ・ ・
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
データは複数列だったのだな。 ーー 第3行の各列にデータがあるとします。 結果をD1セルに入れます。 Join関数が便利です。 標準モジュールに Option Base 1 Sub test03() Dim d() As String lc = ActiveSheet.Cells(3, 256).End(xlToLeft).Column MsgBox lc ReDim d(lc) For j = 1 To lc d(j) = Cells(3, j) Next j x = Join(d, ",") MsgBox x ActiveSheet.Range("D1") = x End Sub ーーー >セルが結合されていたり空白が存在したり・・ の影響は、実際データがないので、影響は測りかねる。
- nishi6
- ベストアンサー率67% (869/1280)
データのあるブックと同じフォルダーに、Sample.txtを出力し、セルE1に内容を書き出しています。 複数列セルは複数行? 「コピーした状態」が少々不明です。結合セルはテキストを持つ1つのセル、空白セルは無視しています。 Sub csvFile() Dim wk As String Dim rg As Range For Each rg In Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row) If rg.Value <> "" Then wk = wk & "," & rg.Value End If Next wk = Mid(wk, 2) Open ThisWorkbook.Path & "\Sample.txt" For Output As #1 Print #1, wk Close #1 Range("E1") = "'" & wk Range("E1").Select End Sub
- ken-nosuke
- ベストアンサー率36% (56/154)
目的が良くわかりませんが貴条件の範囲で力づくで解決するなら下記で良いと思います。 下記は、「A3~A50」のセルに文字が入っている場合に文字を連結して「B1」に 表示します。空欄は無視します。なお、数字欄があるとエラーになるため文字に読み替えて連結しています。No.1の回答のほうがスマートのような気がします。 Sub Macro1() ' x = "": '連結文字を初期化 For i = 3 To 50: '3~50行を繰り返す y = CStr(Cells(i, 1)): '指定行の文字を読み取り空欄でなければ連結文字に追加する If y <> "" Then x = x + y + "," End If Next i Cells(1, 2) = Left(x, Len(x) - 1): '連結文字の最後の","を取って「B1」セルに表示する End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
あああ がA3で いいい がA4 とかでA50位まで続くのでしたら 貼り付け用シートを作成して A1からA100までコピーして 貼り付け用シートに「行列を入れ替える」で貼り付けして 名前を付けて保存で(保存時にメッセージが出るので現在選択されたシートを保存)CSV形式で保存する この動作をマクロの記録で記録したら (シート名をBook1とすると) Sub Macro1() Range("A3:A100").Select Selection.Copy Sheets("Book1").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="保存した場所のフォルダー名\Book1.csv", _ FileFormat:=xlCSV, CreateBackup:=False End Sub といったものができるので、それを実行するようにすればいいのではないでしょうか。コピーするデータのあるシートで実行です。
- msMike
- ベストアンサー率20% (364/1804)
- Nobu-W
- ベストアンサー率39% (725/1832)
https://www.shegolab.jp/entry/excel-macro-concat-cells-text 上記サイトのVBAいじれば・・・可能かもですっ