[[20250603144608]] 『VSTACK:複数シート最終行変動データをまとめたい』(ラベルシート) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『VSTACK:複数シート最終行変動データをまとめたい』(ラベルシート)

VSTACKで複数シートのデータをまとめたいです
以下のデータをまとめる方法を教えていただけないでしょうか
・Sheet1からSheet3シートが対象
・AからC列にデータがある
・1行目は項目名
・各シートの最終データ行は変動

まずSheet1からSheet3を対象として、
最終行を4行固定としてまとめる式を作りました
 =VSTACK(Sheet1:Sheet3!A2:C4)
 2から4行固定ですが、Sheet1からSheet3をまとめれました

次にSheet1を対象として、
最終行が変動のデータをまとめる式を作りました
 =VSTACK(INDIRECT("Sheet1!A2:C"&MAX(IF(Sheet1!A:C<>"",ROW(Sheet1!A:C)))))
 Sheet1だけですが、最終行を変動でまとめれました

この2つを合わせて
Sheet1からSheet3を対象として、最終行を変動でまとめる式を作りました
 =VSTACK(INDIRECT("Sheet1:Sheet3!A2:C"&MAX(IF(Sheet1:Sheet3!A:C<>"",ROW(Sheet1:Sheet3!A:C)))))
 これでは #REF! とエラーになりました

以下のようにシートを個別に指定すればまとめることはできました
=VSTACK(
    INDIRECT("Sheet1!A2:C"&MAX(IF(Sheet1!A:A<>"",ROW(Sheet1!A:A)))),
    INDIRECT("Sheet2!A2:C"&MAX(IF(Sheet2!A:A<>"",ROW(Sheet2!A:A)))),
    INDIRECT("Sheet3!A2:C"&MAX(IF(Sheet3!A:A<>"",ROW(Sheet3!A:A))))
)
しかし、実際に利用したいファイルはシート数が多いので
Sheet1:Sheet3!のように範囲指定の式にしたいです

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


 =TOCOL(DROP(HSTACK(Sheet1:Sheet4!B:B),1),1,TRUE)
 HSTACKで各シートの列を横方向に展開する→DROPで1行目おとす→TOCOLで1列にまとめる
(´・ω・`) 2025/06/03(火) 15:32:54

 あらかじめ多めの範囲(500行)をまとめて
FILTER関数で空白以外を抽出する
=LET(x,VSTACK(Sheet1:Sheet3!A2:C500),FILTER(x,CHOOSECOLS(x,1)<>""))
(どん) 2025/06/03(火) 15:38:50

(´・ω・`)さん、(どん) さん
回答ありがとうございます。
ごめんなさい、前提条件に抜けがありました。
AからC列で各項目にブランクが存在する場合あがあります。(歯抜け状態)
AからCの全てがブランクの行はありません

(´・ω・`)さん
この計算式はB列でしょうか、A,Cをそれぞれコピーして作成してみましたが、
ブランク部分は上に詰まった結果になりました

(どん) さん
A列がブランクの行は非表示になりました
B,Cがブランクの行は値が0となって表示されました
(ラベルシート) 2025/06/03(火) 16:07:10


 (どん)さん のをアレンジ。

 =LET(x,VSTACK(Sheet1:Sheet3!A2:C10),FILTER(x,(CHOOSECOLS(x,1)<>"")+(CHOOSECOLS(x,2)<>"")+(CHOOSECOLS(x,3)<>"")))&""

 とか。

(名無し) 2025/06/03(火) 16:27:07


 ただし、単純に末尾の &"" で0を非表示にしてるので、データが全て文字列になってしまいます。

 これを避けるのであれば、

 =LET(x,VSTACK(Sheet1:Sheet3!A2:C10),FILTER(x,(CHOOSECOLS(x,1)<>"")+(CHOOSECOLS(x,2)<>"")+(CHOOSECOLS(x,3)<>"")))

 こうしておいて、書式設定で0を表示しないようにするとか。

(名無し) 2025/06/03(火) 16:33:03


 おっと。 C10 は適当に広げてくださいね。

(名無し) 2025/06/03(火) 16:42:46


(名無し) さん
アレンジありがとうございます。
対象列数分+でつなげるのは式が長くなりますができました
また、ブランクが0表示になるのはISBLANKを追加することで対応できそうです

 =LET(x,VSTACK(Sheet1:Sheet3!A2:C10),FILTER(IF(ISBLANK(x),"",x),(CHOOSECOLS(x,1)<>"")+(CHOOSECOLS(x,2)<>"")+(CHOOSECOLS(x,3)<>"")))
(ラベルシート) 2025/06/03(火) 17:09:54


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.