Excelで縦1列の名簿を縦3列の名簿に反映する方法は?

このQ&Aのポイント
  • Excelのデータが縦に並んだ、名簿のマスターデータから課名と氏名のみを抽出し、縦3列の名簿を作成する方法を教えてください。
  • 現在は手動でコピー&ペーストしているが、マスターデータが変更されたら自動的に反映されるようにしたい。
  • 縦3列の名簿は課の区切りが分かりやすいようにするため、各課ごとに1行以上の空白行を挿入したい。課の人数は流動的なので、課のセルの固定はできない。
回答を見る
  • ベストアンサー

excelで縦1列の名簿を縦3列の名簿に反映

excelでデータが縦に並んだ、名簿のマスターデータの ブックがあります。(添付画像上部参照) そのマスターデータから、別のexcelブックに 課名と氏名のみを抽出し、縦3列の名簿を 作成したいです。(添付画像下部参照) 今は課ごとにコピー&ペーストにて対応していますが、 マスターデータが変更されたら、縦3列の名簿の内容も 自動的に反映されるようにしたいです。 また、縦3列の名簿は、各課ごとに1行以上の 空白行を挿入して、課の区切りが 分かりやすいようにしたいです。 課の人数は流動的なので、課のセルの固定はできません。 何かいい方法はないでしょうか。 よろしくお願いします。 Excel2013

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

同様の意見なんですが・・ やはり、関数などの一般機能では実現は難しいかなと思いますよ。 せめて「課ごとに列を組む」だったら何とかなりそうな気もしますが、 同じ列に複数の課を抽出、しかも人数(行数)が流動的となると 完全な自動化は相当な知識と工夫と努力が必要でしょうね。 それならコピー貼り付けしてやる方が断然早かろうと思います。 VBAで頑張ればなんとか作れるかもしれませんが・・ それも現状では高いハードルなのかなぁ、というのが正直なところです。 「エクセルの得意分野、表計算の要素が無いですもんね。」 という言葉の意味が解ってから取り組むべき課題なのかもしれません。

forestbb
質問者

お礼

ご回答ありがとうございました。 新たに質問をしましたのでよろしければご参照ください。

その他の回答 (6)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.7

#4です。 VBAは経験ないのだろうが、臭いだけ、嗅いでください。 ーー この質問は、分類すれば、エクセルのシートデータの、「表の組換え」問題と思う。エクセル「関数」では、むつかしい課題です。たとえば条件を付けて抜き出す問題でさえ式が複雑になる。このニーズはあると思うが、あまりエクセルでは対応していない(メニューなどが作られてない。)並び換えや、コピーの貼り付け時の「行と列を入れ替える」など以外はない。 ニーズはあると思うが、Excelでは、各人の場合が色々で、「いろいろなニーズの標準パターンに分類すること」がむつかしい、ためと思う。 ーー VBAといっているものの1例です。雰囲気だけでも、味わって。 「課名」の列があって、その列で並べ替えされている、として(必須条件です)、それとSheet2という名前のシートを作っておくこと、 例データ Sheet1でA1:C31 課名  項目1 項目2 総務  1 山下 総務  2 山本 総務  3 上野 総務  4 木之下 総務  5 小森 総務  6 小川 総務  7 戸板 総務  8 目黒 庶務  9 岩下 庶務  10  近藤 庶務  11  川本 広報  12  川上 広報  13  上田 広報  14  津守 広報  15  河野 広報  16  木村 広報  17  岸上 広報  18  山森 広報  19  下岸 広報  20  中野 人事  21  谷上 労務  22  上村 労務  23  下村 労務  24  峰木 労務  25  沼田 発注  26  馬野 発注  27  家里 課長付け  28 菅野 課長付け  29  大家 用務  30  沼上 ーー 課の中で、たとえば7行(=7人)を越えたら、次の3列のブロックに出す、などの改良は簡単。 これを3列ごとに、課ごとに、横方向にデータを流す表に組み替えるのが目的です。 VBE画面に(ALT+F11キーで出る)標準モジュールに、下記をコピペ。 Sub test02() Set sh1 = Worksheets("Sheet1") '原シート Set sh2 = Worksheets("Sheet2") '結果シート lr = Worksheets("Sheet1").Range("A100000").End(xlUp).Row '原シート最終行取得 MsgBox lr '--- c = 1 '結果シートの行のポインター数を初期化 j = 1 '結果シートの列のポインター数を初期化 '--- i = 1 '第I行目の特殊扱い 見出しセット GoSub midasi i = 2 '第2行目の特殊扱い GoSub meisai '--原シート第2行目から For i = 3 To lr If sh1.Cells(i, "A") = sh1.Cells(i - 1, "A") Then GoSub meisai Else '--書き出しについて、課名が変わったので、次の明細ブロックへ右移動 c = c + 4 '列を4列右を差す c=c+3に変えると余白列はなくなる j = 1 '行は2に改める GoSub midasi GoSub meisai End If Next i Exit Sub '----- meisai: '--結果シートへ書き出すサブルーチン sh2.Cells(j, c + 0) = sh1.Cells(i, "A") sh2.Cells(j, c + 1) = sh1.Cells(i, "B") sh2.Cells(j, c + 2) = sh1.Cells(i, "c") j = j + 1 Return midasi: sh2.Cells(j, c + 0) = "課名" sh2.Cells(j, c + 1) = "項目1" sh2.Cells(j, c + 2) = "項目2" j = j + 1 Return End Sub ーーー 実行して結果は Sheet2に 課名 項目1 項目2 課名 項目1 項目2 課名 項目1 項目2 総務 1 山下 庶務 9 岩下 広報 12 川上 総務 2 山本 庶務 10 近藤 広報 13 上田 総務 3 上野 庶務 11 川本 広報 14 津守 総務 4 木之下 広報 15 河野 総務 5 小森 広報 16 木村 総務 6 小川 広報 17 岸上 総務 7 戸板 広報 18 山森 総務 8 目黒 広報 19 下岸 広報 20 中野 ーー 3ブロック分だけ表示している。各ブロックの間は1列余白列を入れている。 L列以下の次の列から掲出を省略。

forestbb
質問者

お礼

ご回答ありがとうございました。 新たに質問をしましたのでよろしければご参照ください。

  • SI299792
  • ベストアンサー率48% (715/1478)
回答No.6

やはり、マクロしかないと思います。 3列の頭に来る、管理課・経理課・総務課はあまり変化しないだろうと思い、出力ブックを参照するようにしました。 出力ブックのB3・I3・P3は必ず入れておいてください With Windows("Book2.xlsx").ActiveSheetが出力ブックです。Book2.xlsxを出力ブックに変更して下さい。 V100が出力ブックの最終行です。出力ブックの大きさに合わせて変えてください。 動かし方ですが、マスターブックと出力ブックの両方を開きます。 マスターブックを選択し、マスターブック上で動かしてください。 ' Option Explicit ' Sub Macro1() '   Dim iys As Integer   Dim iy As Integer   Dim ox As Integer   Dim oy As Integer   Dim size As Integer   Dim OldPost As String   Dim NewPost As String '   iys = 5   ox = 2   oy = 3   With Windows("Book1.xlsx").ActiveSheet   '出力ワークブックを指定   .[C3:H3,J3:O3,Q3:V3,B4:V100].ClearContents '出力ワークブックの大きさ   OldPost = [M5]   '   For iy = 5 To [C4].End(xlDown).Row + 1     size = size + 1     NewPost = Cells(iy, "M")          If OldPost <> NewPost Then       size = iy - iys '       If .Cells(3, ox + 7) = OldPost Then         ox = ox + 7         oy = 3       End If       .Cells(oy, ox) = OldPost       .Cells(oy, ox + 1).Resize(size, 1) = Cells(iys, "C").Resize(size, 1).Value       oy = oy + size + 1       iys = iy     End If     OldPost = NewPost   Next iy   End With End Sub

forestbb
質問者

お礼

ご回答ありがとうございました。 新たに質問をしましたのでよろしければご参照ください。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

関数では、むつかしいと思う。 質問では、新しく表示するルールを明文化すること。 画像添付は、判り易いと思っているのだろうが、正確には、ほしいことを 語らないものだ。コンピュターで何かをやろうとすれば文章で書く訓練が必要だ。 それができない(習慣や、文章力など)のに、それだけ難しいことを望んでいるということ (1)1つの課の最大行数 (2)列は3列で1単位か? (3)何単位まで横に並べるのか (4)元データにはあっても、捨てる列もあるのかな。 ーー やはりVBAが必要とおもう。 生かし、できないのだろうな。 であれ手作業でやるしかないと思う。 こういう課題は、Accessなどの使う人が、初心者時代に工夫して印刷したりするものだ。

forestbb
質問者

お礼

ご回答ありがとうございました。 新たに質問をしましたのでよろしければご参照ください。

forestbb
質問者

補足

ご回答ありがとうございます。 無知で仰っていることの半分もわからないのですが、 とりあえず… (1)1つの課の最大行数 今のところは1~30程ですが、将来的にはもっと増えるかもしれません。 (2)列は3列で1単位か? 3列で1単位という質問の意味がよくわかりませんでした。 (3)何単位まで横に並べるのか 何単位まで横に並べるのかという質問の意味がわかりませんでした。 (4)元データにはあっても、捨てる列もあるのかな。 捨てる行はありますが、捨てる列はありません。 よろしくお願いします。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.3

》 課の人数は流動的なので、課のセルの固定はできません 流動的」が「規則性がない」ということなら、ワークシート関数だけで実現するのは不可能です。なぜなら、規則に基づいて計算するのが Excel等の表計算ソフトだからです。

forestbb
質問者

お礼

ご回答ありがとうございます。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.2

添付画像下部の船津美幸をC29セルに表示させると仮定して、 管理課の例です。 A29から下に管理課1、管理課2...と入力し、 Q5セルに以下の式を入れて、下にドラッグコピーし、 =IF(M5=M4,Q4+1,1) A5セルに以下の式を入れて、下にドラッグコピーし、 =M5&Q5 C29セルに以下の式を入れて下にドラッグコピーしてみてください。 =VLOOKUP(A29,A1:C25,3,FALSE)

forestbb
質問者

お礼

ご回答ありがとうございました。 新たに質問をしましたのでよろしければご参照ください。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

職員コードによるデータベースでアクセスを使ったほうがよさそうです。

forestbb
質問者

お礼

ご回答ありがとうございます。 Accessが使えればいいのですが、知識が全くなくて使えません。

関連するQ&A

  • excelで縦1列の名簿を縦3列の名簿に反映

    先日、以下の質問を致しました。 https://okwave.jp/qa/q9321281.html excelでデータが縦に並んだ、名簿のマスターデータの ブックがあります。(添付画像上部参照) そのマスターデータから、別のexcelブックに 課名と氏名のみを抽出し、縦3列の名簿を 作成したいです。(添付画像下部参照) 今は課ごとにコピー&ペーストにて対応していますが、 マスターデータが変更されたら、縦3列の名簿の内容も 自動的に反映されるようにしたいです。 前回の質問では 『課の人数は流動的なので、課のセルの固定はできません。』 としましたが、難しそうなので、課のセルは固定したとして 実現はできないでしょうか?

  • エクセルのデータから三列の名簿をつくりたい。

    エクセルのデータを基に名簿をつくりたいと思っています。 データは一行に一人ずつ名前が並んでいます。 最終的には、A41ページに縦に三列(一行に三人)ならぶように作らなくてはいけませんが、ページがとても多いので1ページ1ページ切り取りして貼り付けしていられません。 A4に収まるように区切って3列に並べてくれるような機能はありますか?説明がしずらくて伝わりにくいと思いますがよろしくお願いします。

  • Excel 行の連続データを列に参照したいんです・・・

    Excelで縦のデータを横に参照したい場合どのように数式をコピーすればいいんでしょうか・・・?オートフィルをかけると行は固定されて、列は連続したデータになってしまいます。列を絶対参照にして行を相対参照にしてもできません。 すみません、どなたか教えてください。

  • VBAを使わずに複数シートの列データを縦に並べたい

    フォーマットの異なる表が4種類あり、集計用シートと合わせて5シートを1つのブックにまとめています。各表はカテゴリーが異なるWebサイトのURLリストの列を持っていて、そのURLを集計用シートにまとめたい(縦に並べたい)のですが、Web検索で調べながらOFFSET、ROW、MATCH関数などで挑戦するも、関数の整理がつかず、セル位置の指定と入れ子の式が複雑でうまくいきません。 シート1のURL列の2行目(タイトル行があるので)から最終行までを参照した後、シート2の頭から順番に最終行まで参照し、それをシート4まで繰り返し行うというものです。 VBAは使わずに関数だけで完結させたいです。 どうかご教示ください。 よろしくお願いいたします。 ◆環境:Excel 2016/Windows10 ◆ブックの構成(添付画像ご参照)  ・シート1:参照元シート(1)  ・シート2:参照元シート(2)  ・シート3:参照元シート(3)  ・シート4:参照元シート(4)  ・シート5:参照先集計シート  ※シート1~4はフォーマット及び行数がバラバラの表。  ※各表にはWebサイトのURL一覧の列がそれぞれ含まれている。  ※各表のURL列の1行目のタイトルは「URL」で共通。(列番号はバラバラ) ◆やりたいこと  ・シート1~4のURLの列をまるごとシート5に縦に並べてまとめて参照したい。  ・マクロではなく関数で完結させたい。  ・シート1~4をそれぞれ更新(新データをペースト)すれば、シート5も最新に更新される運用としたい。

  • EXCEL 5列5行の表に、別の名簿リスト等を差し込むにはどうすればよいでしょうか?

    こんにちは、また教えてください。 EXCELで、例えば5列5行の表に、別の5列200行のリスト(名簿リスト等)をWORDのように差し込み、5列5行の表が、40ページの表となるにはどうすればよいでしょうか? どうしても、EXCELの5列5行の表に、リストを差し込みたいのです。 よろしくお願いします。

  • エクセルのテーブルを縦に直したい

    添付画像のようにテーブル形式になっているデータを、関数かVBAを使い縦に並ぶように変換できないでしょうか。 やりたいデータは元データの行が何百行かあります。 よろしくお願いいたします。

  • エクセルで顧客名簿の作り方

    顧客名簿を作りたいと思っています。 本当はアクセスを使うといいのだと思うのですが、会社にアクセスがないということと、使いかたがよくわからないということで、エクセルで名簿を作ろうと思っています。 顧客のID、名前、住所、生年月日等のデータを入力し、あとで新しいブックを開き、IDを入力するだけでその人の個人データが1列に全部でてくるようにするにはどうしたらよいですか? また、私以外のスタッフはエクセルをあまり操作できません。 なので、個人データの入力は規定のフォームでTabで送るだけでいいような感じにできたらと思うのですが。 よい方法を教えてくださいよろしくお願いします!! また、参考になるサイトがありましたら教えてください!

  • 重複するデータが含まれる列からVLOOKUPする

    こんにちわ・・・ マイクロソフト、エクセルに関する質問なのですが。 「1以上の数値が入力されている列を選びだし、その列の1行目と2行目のデータを順に表示する。」 といったことがやりたいのですが、、、 うまく説明できてなくて申し訳ないです。 詳細は添付データの画像を参照ください。 何卒、ご回答のほどよろしくお願いいたします・・・

  • excelの横に続く表を縦に並び替える

    エクセルで横に50列ほどデータが入っています。 これを縦にa列に50行データを並べたいのですが 何か方法はあるでしょうか? マクロを組むしかないでしょうか? 教えて下さいませ。 宜しくお願い致します。

  • エクセルの列の限界は255列以上にはできないのですか?

    エクセルで列に1000ほどのデータを入れたいのですが、縦(行)には100000でも入るのですが、横(列)の限界は255セルしか入りません。 どうにかできる方法ってあるのでしょうか?

専門家に質問してみよう