『CSV出力により複数行に分かれてしまうデータを1行にまとめたい』(たすけて)
CSV出力により複数行になるデータを下記のように1行にまとめる計算式を教えて下さい。
1 A1 C1 D1 E1
1 B1 F1 G1 H1
1 I1 J1 K1
2 A2
2 B2
2 C2 D2 E2
3
3
3
CSV出力で上記の様な出力を下記のようにまとめたいです。
1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1
2 A2 B2 C2 D2 E2
3
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
データが実際にA1、B1、・・となってはいないと思うので まとめ方のルールが分からないです。
どういったルールなのか説明できますか?
(半平太) 2025/05/01(木) 23:04:44
以下と判断すると
A列にあるデータの各行先頭の番号(例:1, 2, 3)をキーとして、
同じ番号の行の残りの文字列を結合して、
シート2に「番号+結合文字列」の形で出力する。
Option Explicit
Sub test()
Dim wsSrc As Worksheet Dim wsDest As Worksheet Dim lastRow As Long Dim dict As Object Dim i As Long Dim key As Variant Dim parts As Variant Dim val As Variant Dim outputRow As Long
Set wsSrc = ThisWorkbook.Sheets("Sheet1") ' 元データ Set wsDest = ThisWorkbook.Sheets("Sheet2") ' 出力 Set dict = CreateObject("Scripting.Dictionary")
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
' データを辞書にまとめる For i = 1 To lastRow If Trim(wsSrc.Cells(i, 1).Value) <> "" Then parts = Split(wsSrc.Cells(i, 1).Value, " ") key = parts(0)
' 残りの値を結合 Dim merged As String merged = "" For Each val In parts If val <> key Then merged = merged & " " & val End If Next val
If dict.Exists(key) Then dict(key) = dict(key) & merged Else dict.Add key, key & merged End If End If Next i
' 出力 wsDest.Cells.ClearContents outputRow = 1 For Each key In dict.Keys wsDest.Cells(outputRow, 1).Value = dict(key) outputRow = outputRow + 1 Next key
MsgBox "完了 !!" End Sub
(暇な人) 2025/05/02(金) 05:15:34
>CSV出力により複数行になるデータ CSVファイルを読み込むと、複数行になるデータ と言う意味ですね? それの形式を変換したい、ということですね?
Webページのソースを見ると、データは下記のようです。(誤字修正:ソート→ソース)
既に指摘がありますように、ルールをご自分の言葉で明記してください。(あとで変更がないようにしてください。) また3行ごとの繰り返しがそのあとも同様に続くのですか?それとも全体で6行だけなんですか? そこも誤解が生じないようにコメントして下さい。
(以下は、行番号列番号を追記した、質問文の一部の再掲です)
A B C D E F 1 1 A1 C1 D1 E1 2 1 B1 F1 G1 H1 3 1 I1 J1 K1 4 2 A2 5 2 B2 6 2 C2 D2 E2 7 3 8 3 9 3
CSV出力で上記の様な出力を下記のようにまとめたいです。
A B C D E F G H I J K L 1 1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 2 2 A2 B2 C2 D2 E2 3 3
(xyz) 2025/05/02(金) 08:28:19
・レコード番号という番号が有り(今回A列で表した1・2・3の様な物で、先頭ではなく中間にあります。)
データ内に含まれるテーブル数?により行の数は変動します。
・出力されるデータは60列ぐらいありますが、不必要な部分もある為、必要な部分をレコード番号ごとに一つの行にまとめたいです。
宜しくお願いします。
(たすけて) 2025/05/02(金) 09:55:09
(?) 2025/05/02(金) 10:05:45
番号の位置が先頭でなく中間との事なので
先頭から何番目とか指定されないと回答は難しい
>不必要な部分もある為
どこが不要なのかの指定は無いのですか?
サンプルデーター(形式)が無い状態では、以後の回答は出来ません。
(暇な人) 2025/05/02(金) 12:35:30
>同じ番号の行の残りの文字列を結合して、 という説明どおりだというのであれば、 A1 C1 D1 E1 B1 F1 G1 H1 I1 J1 K1 とはならないのですか? 出鱈目に並べているんじゃなくて一定のルールがあるんでしょうから、 それをきちんと書いて下さい、と申し上げました。
回答は期待できないので、私の揣摩臆測に基づくものを書いて、私としての区切りとします。
(1) Sheet2のA1セル =LET( rng,Sheet1!A1:A100, UNIQUE(FILTER(rng,(rng>=1)*(rng<=3))) ) Sheet1!A1:A100 1(Indexの下限) 3(Indexの上限) は適宜修正してください。
(2) Sheet2のB1セル =LAMBDA(n, LET( rng,Sheet1!$A$1:$F$100, rngA,FILTER(rng,TAKE(rng,,1)=n), a,TEXTJOIN("",TRUE,INDEX(rngA,,2)), b,TEXTJOIN("",TRUE,INDEX(rngA,,3)), rngB,FILTER(DROP(rng,,3),TAKE(rng,,1)=n), c,IFERROR(TOROW(rngB,1),""), HSTACK(a,b,c) ) )(A1) Sheet1!$A$1:$F$100は適宜修正してください。 これを下にコピー(A列の数だけ)します。
以上。
(xyz) 2025/05/02(金) 15:13:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.