• 締切済み

Excelの表作成について

はじめまして。 上司に頼まれまして営業所と従業員についての管理表をExcelで作っております。 そこで是非ご教示いただきたいのが、添付ファイルのA型の表をB型の表に効率的に変換する方法です。 最初は手作業でやっておりましたが、データが膨大で、この調子だと期日までに間に合いません。 何とぞよろしくお願いいたします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.5

## マクロが使えない前提で(使えるとすぐだけど。) (1)B2の名前の最初のところへカーソルをもっていく。 (2)ctrl +shift + →を押す。   B2から??2(最後の列)まで選択される  (但し、途中にデータが入っていない列がない前提・・・あっても複数回繰り返せば対応可) (3)コピーする。 (4)B型表に移動して、今から入れたいC??にカーソルを持ってきて、形式を選択して貼り付けで行列を入れ替えのチェックOn。 縦に並んで貼り付けられる。 (5)A型表に戻り営業所名をコピーする。 (6)B型表に移動して、名前の列でctrl +↓を押すと一番したまでいくから、一列左に移動して、 ctrl +shift + ↑を押す。 営業所名を貼り付けたい範囲が選択される。 (7)貼り付けをする。 これをくりかえす。

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

マクロは使えますか? もし、マクロが使えるのであれば、割と簡単に出来ます。 以下は、Excel2003のマクロの例です。 A型の表は、A列に営業所名、B列以降にメンバーの名前。最初の行は1行目。 作成するB型の表は、G列に営業所名、H列にメンバーの名前。最初の行は1行目。 という前提で組んであります。A型、B型の位置を変える(シートを変えることも可能)場合は適宜修正してみてください。 -------------------------------- Sub OKWave()   x = 1   y = 1   p = 1   Do While Cells(x, y).Value <> ""     y = y + 1     Do While Cells(x, y).Value <> ""       Cells(p, 7).Value = Cells(x, 1).Value       Cells(p, 8).Value = Cells(x, y).Value       p = p + 1       y = y + 1     Loop     x = x + 1     y = 1   Loop   MsgBox ("Complete!") End Sub -------------------------------- ・マクロの解説 x、yはA型の表の先頭を表す。 pは、B型の表の先頭を表し、7(G列)に営業所名、8列はメンバーの名前を入れる。 最初のWhileは、A型表の営業所名がなくなる(ブランクになる)まで繰り返す。 次のWhileは、ある営業所のメンバーの名前がなくなるまで繰り返す。なくなったら、A行の次の営業所へ進む。 メンバーの名前がある場合は、営業所名をセル(p、7)に、メンバーの名前をセル(p、8)にコピーして、B行の行数を一つ進める。 全部終わったら、”Complete"と表示する。 ※表示上スペースは全角スペースを使っていますが、実際に使うときは半角スペースを使ってください。 ◆改造する場合 最初のx、yのセルの番号を変えれば、A型の表の位置を変えることが出来ます。 B型の表の位置は、pと、7、8(固定)を使っていますが、これを好きな場所(別のシートなどでも可)に変更してください。 最初、簡単なテストファイルを作って、デバッグしてから、本番のデータでやってみてください。 ご参考に。

roroin
質問者

お礼

マクロの経験はありませんが、時間をとってチャレンジしてみます。 感謝いたします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 今仮に、A型の表がSheet1のB2~F4のセル範囲に存在していて、Sheet2のB~C列の2行目以下にB型の表を表示させるものとします。  又、A型の表には、途中に空欄が挟まっている箇所が無く、且つ、B列の部署名には重複が無いものとします。  まず、Sheet2のB2セルに次の関数を入力して下さい。 =IF($B1="","",INDEX(Sheet1!$B:$B,IF(ROWS($B$2:$B2)=1,ROW(Sheet1!$B$1)+1,MATCH($B1,Sheet1!$B:$B,0)+(COUNTIF($B$1:$B1,$B1)>=COUNTIF(INDEX(Sheet1!$C:$C,MATCH($B1,Sheet1!$B:$B,0)):INDEX(Sheet1!$F:$F,MATCH($B1,Sheet1!$B:$B,0)),"*?"))))&"")  次に、Sheet2のC2セルに次の関数を入力して下さい。 =IF($B2="","",VLOOKUP($B2,Sheet1!$B:$F,COUNTIF($B$2:$B2,$B2)+1,FALSE))  そして、Sheet2のB2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  これで、A型の表のデータを基にして、B型の表が自動的に作成されますし、A型の表に変更があれば、その変更内容が自動的にB型の表に反映されます。(ですから、元となっているA型の表が削除されれば、B型の表の内容も空欄となります)  

roroin
質問者

お礼

詳細にご説明頂き、誠にありがとうございます。 今からチャレンジしてみます。

  • iw_steel
  • ベストアンサー率27% (50/183)
回答No.2

一例ですけど 名前の後ろにセルを挿入してそのセルに=CONCATENATEで 結合してその結合したセルだけをコピーする、さらに区切り位置を指定して セルを分解というマクロを組んだらどうでしょうか。

roroin
質問者

お礼

マクロ勉強しなくてはいけません。どうもありがとうございます。

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

D列とE列に、B列の営業所の列をコピー挿入して、CD列とEF列のデータをAB列の下に切り貼りして、B列を基準に並べ替えてから、ブランク行を削除して、A列を基準に並べ替えてはいかがでしょう。

roroin
質問者

お礼

どうも、ありがとうございます。 今は、そのようなやり方をやっております。

関連するQ&A