『1行目の連続データを再利用して縦書きでデータを作成したい』(山田)
【初期データ】
A B C D
1|a|b|c
2|d|e|f|g|
3|h|i|j|k|l|m|n
元のデータが上記のexcelファイルを
手動で加工して別のシートへ以下の表を作成しています。
【加工例】
A B
1|a
1|b
1|c
2|d
2|e
2|f
2|g
3|h
3|i
3|j
3|k
3|l
3|m
3|n
列数は100列以上のケースも多く手作業でコピー貼り付けを繰り返すのは割と手間が掛かっています。
現在思いつくのがマクロでの処理となり
do loop やif関数用いてマクロで【初期データ】を読み込んで
1行目の最終列を取得、
A1の値とA2の値をコピーして貼り付け、列を一個移動して
A1の値とA3の値をコピーして貼り付け、
最終列まで処理が終われば改行。
2行目の最終列を取得して。。。
と繰り返せば処理は可能なのですが、
もっと手軽に処理する手段は無いでしょうか。という相談になります。
どうぞよろしくお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
元シートがSheet1として、Sheet2のA1セルに下記を入れて下さい。自動でspillされると思います。
=LET(
a,IF(Sheet1!B1:H3<>"",Sheet1!A1:A3 & "|" & Sheet1!B1:H3,""),
b,TOCOL(a),
c,FILTER(b,b<>""),
d,REDUCE("",c,LAMBDA(accum,x,VSTACK(accum,Textsplit(x,"|")))),
DROP(d,1)
)
# 式の最初に半角スペースを入れないようにしてください。
(xyz) 2025/11/08(土) 21:57:35
=LET(
a,IF(Sheet1!B1:H3<>"",Sheet1!A1:A3 & "|" & Sheet1!B1:H3,""),
b,TOCOL(a),
FILTER(b,b<>"")
)
にとどめておいて、
B1セルに
=TEXTSPLIT(A1,"|")
と入れ、下にコピーというのが分かり易いとは思います。
どうしてもREDUCEを使わないといけないわけでは無いと思います。
# 見落としがあり、もっと簡単にできるかもしれません。
(xyz) 2025/11/08(土) 22:30:42
ご回答ありがとうございます。
今から実際に試してから改めて結果をコメントさせていただきます。
取り急ぎ、御礼申し上げます。
(山田) 2025/11/08(土) 23:00:50
LET( 関数で 理想の形でAB列に転記に成功
上記を確認致しました。とても効率的に作業を進められそうです。
お二方非常に助かりました、誠に有難うございます!
(山田) 2025/11/08(土) 23:22:48
別解です。
=LET(
rngA,A1:A3,
body,B1:H3,
a,IF(body<>"",rngA & "|" & body,#N/A),
b,TOCOL(a,2),
MAKEARRAY(ROWS(b),2,
LAMBDA(r,c,LET(ary,TEXTSPLIT(INDEX(b,r,1),"|"),CHOOSECOLS(ary,c)))
)
)
(xyz) 2025/11/09(日) 08:18:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.