[[20260326153317]] 『抽出したデータを既存の表に反映させたい』(ゆゆゆ) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『抽出したデータを既存の表に反映させたい』(ゆゆゆ)

はじめまして。初心者で調べながら関数を試しています。

現在、200名近く入力している名簿(氏名・ふりがな・会社名)があり、
その中から別シートに会社別に50音順で抽出(=FILTER(元データ!A:A, 元データ!C:C="会社名")。
抽出前に元データのフィルターを使って、該当会社の50音順にしました。

それで、欲しい会社の名簿はできたのですが、これを既存のフォーマットの表に移したいです。

その表は1ページに16名入り、印刷して入場時刻などを手書きで記入するものです。(1列目氏名、2列目入場時刻、3列目退場時刻、で入場退場は5日分)

印刷して使用するので、調べて出てくるような
下に名簿が連続して続くものだと、ページを分けて作れないので困っています。

16名ごとの表に、抽出したデータを、元データが更新された場合も自動反映できるようにしたいです。

わかりにくくてすみません。

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


  >下に名簿が連続して続くものだと、ページを分けて作れないので困っています。
 ・「ページ設定」で「印刷タイトル」「行タイトル」機能を使って、共通する見出し行(複数行も可)を指定し、
 ・あとは16行ごとに「改ページ」を挿入
 すれば、連続するデータを、ページごとに印刷できますよ。
(xyz) 2026/03/26(木) 16:08:23

(xyz)様

できました!
ありがとうございます!

ちなみに、元々16名ずつの表ではなく、1ページが16名×3列の
 
|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|
|相場       | 加藤       | 佐藤      |
|伊藤       | 木下       | 白水      |
|梅崎       | 桑野       | 墨田      |
|江口       | 高口       | 瀬戸口     |

のような表を作りたく…難しそうだったので断念したのですが
こちらもこの表に入れるまでは同じ工程(抽出したデータを使用)で作れますか?

(ゆゆゆ) 2026/03/26(木) 16:51:45


>同じ工程(抽出したデータを使用)で作れますか?
人に頼むのではなく実際にやってみたらどうですか。
(?) 2026/03/26(木) 17:05:36

表の枠外に抽出データをおいて、氏名欄に「=AA5(抽出データの先頭セル)」を入力し、セルのコピーをしてみました。
これでもできますが、列が変わるときと、ページが変わるときに手作業での入力が必要になるので、
元データをいじるだけで運用できるフォーマットを作りたく追加で質問させていただきました。

たくさん調べたのですが、検索欄で調べるのには限界があり、欲しい情報がなかなか出てこず…

今後は基礎から学んで自分で応用できるようにするつもりです。
つたない文章で頼ってしまい申し訳ないですが方法をご存じの方で、お返事をいただける余裕がある方がいらっしゃいましたら教えていただきたいです。

よろしくお願いいたします。

(ゆゆゆ) 2026/03/26(木) 17:19:30


 こんな感じでいいんじゃない?
 フォントはMS ゴシックとか限定だけど

 ?:=LET(
   _name, FILTER(元データ!A:A, 元データ!C:C="会社名"),
   _bw, LENB("氏名 入場 退場 "),
   _func, LAMBDA(n, n & REPT(" ", _bw - LENB(n)),
   MAP(_name, _func)
       )

 どうやればいいと考えたのかを書いてくれないと答えにくい
(ちくわ) 2026/03/26(木) 18:28:35

 データのだいたいの規模を教えて下さい。
 企業数はどの程度ですか?
 全員で200人程度とすると、
 1ページに16人×3 =48人 なので、
 1ページを超えるものなんて例外的なものなんでしょうか?

 仮に50人とし、昇順になっているとすると、
 それを2ページにどういう順番で記載するつもりなのでしょうか?
 それぞれの人の名前を仮に数字の1〜50で表すとすると、
 どんな配置を想定しているんですか?説明してください。

 >元データをいじるだけで運用できるフォーマットを作りたく追加で質問させていただきました。
 ということは、マクロで一括処理とか言う話なんですか?それとも、ご自分で修正可能な関数で
 ということですか?そのあたりもコメントされると、回答がつきやすいのでは?

(xyz) 2026/03/26(木) 21:13:39


 そもそも
  >元データをいじるだけで運用できるフォーマットを作りたく追加で質問させていただきました。
 こういう発想事態
 >初心者で調べながら
 ではない
 あるていど触ってないとこういう発想は思いつかない
(無発想) 2026/03/27(金) 07:59:05

(ちくわ)様

ご回答ありがとうございます。
これはセルにコピーでいいですか?
「この関数に関して、少なすぎる引数が入力されています」とエラーが出ます。

こちらからの情報が少なくすみません。
以下まとめてみました。

1.氏名、入場、退場の名簿フォーマットがある。1ページに16名×3列=48名 縦並び
50音順
会社ごとに分けて作成(別シートに会社ごとに分けて作っている)

           株式会社○○
|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|
|相場       | 加藤       | 佐藤      |
|伊藤       | 木下       | 白水      |
|梅崎       | 桑野       | 墨田      |
|江口       | 高口       | 瀬戸口     |

2.氏名、ふりがな、会社名の元データ名簿(テーブルで作成)がある
新しく追加する場合はこちらを更新する

|氏名 ふりがな   会社名 | 
|相場  あいば   (有)○○|
|伊藤  いとう   (株)○○
|梅崎  うめざき  ○○(株)
|江口  えぐち   ○○

3.現在、20社 全社で200名近く。今後300名以上になり、増減がある。
  各社、10名〜100名超えもある。

現在、会社ごとのシートには、50音順で抽出(=FILTER(元データ!A:A, 元データ!C:C="会社名")しています。

<したいこと>
?@抽出データを元に 1. の表に当てはめたいです。

?Aページや列が変わっても、抽出データがうまく反映できるようにしたいです。
表の枠外に抽出データをおいて、氏名欄に「=AA5(抽出データの先頭セル)」を入力し、セルのコピーをしましたが、これでは列やページが変わるときに手動にする必要があると思います。

?A今後、増減するため、元データの名簿を増減すると、各社の入出門名簿にも反映できるようにしたい。

5日ごとであれば最初に(xyz)様よりお答えいただいた内容で作成できました。
しかし、元々は3列の入出門名簿を作りたかったところ、3列だとうまくいかなかったため(=AA5(抽出データの先頭セル を下にコピー だと列が変わるときに手作業が必要)、最初の質問の表にしました。

他に不足している情報や、ご意見がありましたらコメントいただけますと幸いです。

あまりにも初心者過ぎて、この要望通りは私には力不足ということであれば、今できる範囲で作成して、学んだあとに作り変えます。

(ゆゆゆ) 2026/03/27(金) 09:55:47


(無発想) 様
>あるていど触ってないとこういう発想は思いつかない
とコメントいただきましたが、職場で本社よりもらうデータで、別シートに反映されているものをみていたのと、
こうできたらいいのになという考えで質問させていただきました。
(ゆゆゆ) 2026/03/27(金) 09:56:34

(xyz)様

不足している情報のご質問ありがとうございます。

>データのだいたいの規模を教えて下さい。
(ちくわ)様へのコメント返信にまとめさせていただきました。

>どんな配置を想定しているんですか?
|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|
  1         17         33
  2         18         34
  〜         〜          〜 
  16        32         48

|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|
  49                    
  50         
  〜  

このような配置です。

>ということは、マクロで一括処理とか言う話なんですか?それとも、ご自分で修正可能な関数で

 ということですか?       
マクロで一括でできるのであればしたいです。

マクロも調べたものをコピーしてみたのですが、エラーが出てその修正も調べてわからなかったため、関数で作成したところ抽出まではできたので現在は関数でしています。こだわりはありません。

(ゆゆゆ) 2026/03/27(金) 10:06:56


 スペース差し込む際に) が一つ抜けておりました。
 >_func, LAMBDA(n, n & REPT(" ", _bw - LENB(n)),
  修正:_func, LAMBDA(n ,n & REPT(" ", _bw - LENB(n))),

 って書いたんですけど印刷なんで関数いらないですね

 ヘッダー部分を
           株式会社○○
|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|
 にして
 セルの幅を好きに設定して そのまま印刷すればいかが?

配置イメージはこんな感じ

     |               [A]|               [B]|               [C]|
  [1]|                  |      株式会社○○|                  |
  [2]|氏名 入場 退場 |氏名 入場 退場 |氏名 入場 退場 |
  [3]|              名前|              名前|              名前|
 ・・・

 テキスト化の都合で右揃えだけど左揃えにすれば
 (ゆゆゆ) 2026/03/26(木) 16:51:45 
 でやっていることと同じようにできますね

 > 元々は3列の入出門名簿を作りたかったところ、3列だとうまくいかなかったため(=AA5
 あれもしかして
 > =FILTER(元データ!A:A, 元データ!C:C="会社名") 
 これを右にフィルしたときに5列だとうまくいかけど3列だとうまくいかないとかいう話か?

(ちくわ) 2026/03/27(金) 10:18:25


(ちくわ)様

ヘッダーですね!
やってみます!
取り急ぎ以下のお返事をさせていただきます。

関数、ありがとうございます。
できたのですがこれは9文字超えるとエラーになりますか?(海外の方でエラーになり文字数を9文字にしたら解消されました)

また、=FILTER(元データ!A:A, 元データ!C:C="会社名")  と同じように縦1列に名簿が抽出されたのですが、私何か間違っていますか?

>これを右にフィルしたときに5列だとうまくいかけど3列だとうまくいかないとかいう話か?

|氏名 入場 退場 | 氏名 入場 退場 | 氏名 入場 退場|    |=FILTER(元データ!A:A, 元データ!C:C="会社名"                      |      ̄ ̄ ̄ ̄ ̄      
  1         17         33      |
  2         18         34      |
  〜         〜          〜       | 
  16        32         48      |

↑のように昇順にしたかったので、1に、「=AA5」(枠外右上にある抽出データ列の先頭セル)を入力し、下にフィルして、抽出データの17番目のセルを、17に入力し下にフィル
としていました。
間に入場退場があるのでそのようにしかできないと思い…。

(ゆゆゆ) 2026/03/27(金) 10:46:45


 現在の200人規模でのひとつの考え方で、数式を作ってみました。
 参考にしてください。
 そちらでご自由に修正変更して下さい。

 52名のとき下記の表示をするものとしました。
 |氏名  入場  退場  |  氏名  入場  退場  |  氏名  入場  退場|
 |1                 |  17                |  33            |
 |2                 |  18                |  34            |
 ・・・・・ 
 |15                |  31                |  47            |
 |16                |  32                |  48            |
 |49                |  51                |                |
 |50                |  52                |                |

 以下の関数を、展開するセル範囲の最初のセルに入れて下さい。
 縦一列のデータを引数に与えると、3列(というか9列ですね)のセル範囲に
 結果が表示されます。

 なお、式はひとつだけでOKで、右下のセルとかにコピーする必要はありません。
 (いや、コピーしてはいけません、と念のため強く言っておきます。)

 =LAMBDA(_range,
     LET(
         fn,LAMBDA(a,
             LET(
                 n,  CEILING(ROWS(a)/3,1),
                 rng,EXPAND(a,3*n,1,""),
                 nr, n,
                 nc, 3*3,
                 MAKEARRAY(nr,nc,
                     LAMBDA(r, c, 
                         IF(MOD(c-1,3) = 0,
                             INDEX(rng, r + nr*(c-1)/3 ,1),
                             ""
                         ))))),
         IF(ROWS(_range) > 48,
             LET(_out1,fn(TAKE(_range,48)),
                 _out2,fn(DROP(_range,48)),
                 VSTACK(_out1,_out2)
             ),
             fn(_range)
         )
     )
 )(A1:A52)

 上記のようにすると、A1:A52を対象にして、結果の表を返します。
 なお、最大2ページまで(48*2=96名まで)としています。
 これを増やすには、そちらで、その数式を理解して拡張してみて下さい。

 【名前定義による計算式の簡便入力】
 なお、
 =LAMBDA(_range,
  ・・・・
 )(A1:A52)
 の
 =LAMBDA(_range,
  ・・・・
 )
 の部分を、適当な名前で定義しておけば(例:test)、
 実際に入力する式は、
 =test(A1:A52) と簡単に書けます。

 【行範囲の可変化対応】
 また、どの行までかが可変でしょうから
 =test(A.:.A)
 とすれば、A列の最初の非空白行から最後の非空白行までを対象にできます。 

 Excelの数式も動的配列が導入されて以降は、マクロとほぼ同等に近いことが
 できるようになりました。
 マクロについてはどなたか回答してもらえるかもしれません。
(xyz) 2026/03/27(金) 11:03:33

 xyzさんの式の劣化にしかならない式なので不具合箇所についてのみ

 ゆゆゆさんへ
 > 9文字超えるとエラーになりますか?
  "氏名  入場  退場  " この文字数を超える(ひらがなとかは2文字計算)とエラーになります
 名前が全角9文字を超えるとエラーになっちゃいますね
  ただ9文字を超える場合って 
 "氏名  入場  退場  "
  さんぷるねーむさん

 みたいに余白なくなりますけど 投稿で掲示されている "氏名  "のフォーマットから変わっちゃいますね。
 max(LENB(_name)) でもいいですけど印刷するなら幅は揃えた方がいいと思いますので
  "氏名           入場  退場  " のようにフォーマットの方を成形した方が良いのでは?

 > また、=FILTER(元データ!A:A, 元データ!C:C="会社名")  と同じように縦1列に名簿が抽出されたのです
 あなたがどういう出力ができているのか存じませんので
 最初の投稿の式 FILTER(元データ!A:A, 元データ!C:C="会社名") を使用していますから
 その通りに出力されますよ。
(ゆゆゆ) 2026/03/26(木) 17:19:30
 では5列では想像道理にできたということは
 この式を使用して目的の配列が取り出せると考えておりましたが、
 違いましたか。勘違いしておりました。 

(ちくわ) 2026/03/27(金) 11:34:26


(xyz)様

ご回答ありがとうございます。
こちらで思い通りの表ができました。
ページを増やす時までに理解できるように頑張ります。

定義や行範囲の可変化対応も、活用していきたいと思います!

少ない情報で、必要なことを聞き出すことからお任せしてしまいお手数をお掛けいたしました。

いただいた数式を理解できるよう基礎から勉強します。
本当にご丁寧に教えていただきありがとうございました。

マクロについてはひとまずいただいた数式で大丈夫かと思いますので、後回しにしていただいて結構です!

(ゆゆゆ) 2026/03/27(金) 11:46:10


(ちくわ)様
氏名 入場 退場 の文字数だったのですね。
理解しました!
ご説明いただきありがとうございます。

 >"氏名           入場  退場  " のようにフォーマットの方を成形した方が良いのでは?
ヘッダーでこれらを表記できればフォーマットをいじらなくて良さそうですよね?

(ゆゆゆ) 2026/03/27(金) 13:23:03


 Filterも関数に入れてしまうとよいかもしれません。
 (シートにいったん表示させたほうが、視覚によるチェックが働き易いという考え方もありますが)

 数式もMAKEARRAYを使わずに、中から構成的に作る方法も考えてみました。
 (どちらも同じ結果になると思います。)

 =LAMBDA(corpo,
     LET(
         _ary,FILTER(Sheet1!A.:.A,Sheet1!C.:.C=corpo),
         fn,LAMBDA(a,
             LET(
                 n,  CEILING(ROWS(a)/3,1),
                 d,  WRAPCOLS(EXPAND(a,n*3,1,""),n),
                 _r1,EXPAND(INDEX(d,0,1), n,3,""),
                 _r2,EXPAND(INDEX(d,0,2), n,3,""),
                 _r3,EXPAND(INDEX(d,0,3), n,3,""),
                 HSTACK(_r1,_r2,_r3))),
         IF(ROWS(_ary) > 48,
             LET(_out1,fn(TAKE(_ary,48)),
                 _out2,fn(DROP(_ary,48)),
                 VSTACK(_out1,_out2)
             ),
             fn(_ary)
         )
     )
 )(A1)
 (これは、A1セルに企業名を入れておく前提です。)

(xyz) 2026/03/27(金) 16:02:58


コメント返信:

[ 一覧(最新更新順) ]


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