[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『列数がバラバラのセルの結合の仕方』(ky)
お力をお貸しください。
G1のセルから住所1,住所2、住所3、住所4...のデータがいきなり入っているデータがあります。(便宜上、住所1,住所2 等で表記いたしましたが、下記のようにデータがいきなり入っています。)
1 | | 111111 | 1street |aaaaaaa |NewYork | NY | USA
2 | | 222222 | 2street |bbbbbb |London | |UK
3 | | 3333333 |3sterrt |cccccc |ddddddddd |indonesia |
4 | |4444 |hyogo |kobe | | |
5 | |55555 |5sterrt | | | |
・
・
・
・
これを,一つ前のF列に","でつなげてコピーしたいのです。
例えば、1行目だと、
111111,1street,aaaaaaa,NewYork,NY,USA
という最後の,は取り除いた形にしたいのです。
関数でコピーとも考えたのですが、ファイル数が多いのと、シートによって
バラバラで時間がかかるかと思い、下記のようなVBAを作ってみたのですが、
うまくいきません。
Dim MR As Long
Dim MC As Long
Dim a As Range
Dim b As String
MR = Cells(Rows.Count, 7).End(xlUp).Row '最終行
MC = Cells(7, Columns.Count).End(xlToLeft).Column '最終列
Dim i As Integer
For i = 1 To MR b = "" For Each a In Range(Cells(i, 7), Cells(i, MC)) b = b & a.Text & "," Next a
Cells(i, 6).Value = b Next i
どうやってもG列とH列の2つしかとってこず、H列が空欄でも","でつなげてしまい、最後の","も取れません。
111111,1street, となります。
最終行の取得はうまくいっている(ように見える)のですが。
どこがおかしいのでしょうか?
できれば最後の","ととる方法もご教授いただければ幸いです。
先頭のデータG1から始まっているのは固定です。
よろしくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
=TEXTJOIN(",",TRUE,セル範囲)
として下にコピーすればすぐ終わると思います。
セル範囲は、開始列から数式を入れる列の手前まで設定すれば間違いないでしょう。
(フォーキー) 2023/02/26(日) 18:56:32
Sub test() Dim i As Long For i = 1 To ThisWorkbook.Worksheets.Count With Worksheets(i).Range("F1:F100") '実際の最終行に変更 .Formula = "=TextJoin("","",True,G1:Z1)" '実際の最終列に変更 .Value = .Value End With Next End Sub (フォーキー) 2023/02/26(日) 19:17:50
Sub test()
Dim MR As Long Dim b As String Dim temp As Long Dim i As Long, j As Long
MR = Cells(Rows.Count, 7).End(xlUp).Row '最終行
For i = 1 To MR b = "" temp = Cells(i, Columns.Count).End(xlToLeft).Column - 6 For j = 7 To temp + 7 b = b & Cells(i, j).Value & "," Next Cells(i, 6).Value = b Next
End Sub
(諸子頑鉄) 2023/02/26(日) 19:24:43
MR = Cells(Rows.Count, 7).End(xlUp).Row '最終行 For i = 1 To MR MC = Cells(i, Columns.Count).End(xlToLeft).Column '最終列 b = "" For Each a In Range(Cells(i, 7), Cells(i, MC)) If Not a = "" Then b = b & "," & a.Text End If Next a Cells(i, 6).Value = Mid(b, 2) Next i
行毎に最終列を求めるのと、
カンマで区切る場合、例えば「,111111,1street,aaaaaaa・・・・」の様に、
先頭にカンマが付くようにして、MID関数で2文字めから取得するのが常套手段かと思います。
(すいとん) 2023/02/26(日) 20:38:33
Option Explicit
Sub test()
Dim MR As Long Dim b As String Dim temp As Long Dim i As Long, j As Long
MR = Cells(Rows.Count, 7).End(xlUp).Row '最終行
For i = 1 To MR b = "" temp = Cells(i, Columns.Count).End(xlToLeft).Column For j = 7 To temp If j <> temp Then b = b + Cells(i, j).Text & "," Else b = b + Cells(i, j).Text End If Next
Cells(i, 6).Value = b Next
End Sub
(諸子頑鉄) 2023/02/27(月) 09:29:09
フォーキー様
TEXTJOIN関数というものができているのですね。
10年ぶりくらいにexcelをさわったので、concatenateしか思い浮かばず...
これ、全部繋げるのか...と泣きそうになっていました。
諸子頑鉄様
カンマが付加されない修正分までありがとうございます。
最後と最後じゃないのを分岐すればよかったんですね。
すいとん様
行ごとに最終列を求めるのはFor Nextの中で行うのですね。
MRの下に書いているので、大丈夫かと思っていました。
カンマ区切りの場合、先頭にカンマ...なるほど、そうすると最後のカンマはつかない。
分かりやすい説明ありがとうございます。
皆様、本当にありがとうございました。
(ky) 2023/02/27(月) 10:14:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.