• ベストアンサー

エクセルで作成した一覧表をカード形式にしたい。

エクセルで作成した一覧表をカード形式にしたいのですが 例えばsheet1の 列1のセルA、B、C、D、E、Fに 山田さんの住所、氏名、年齢、職業、電話、備考 列2にセルA、B、C、D、E、Fに 佐藤さんの住所、氏名、年齢、職業、電話、備考、 列3にセルA、B、C、D、E、Fに 大山さんの… (以降は同様の繰り返し)を入力したとき、 sheet2の 列1のセルA、Bに山田さんの住所、氏名、 列2のセルA、Bに山田さんの年齢、職業、 列3にセルA、Bに山田さんの電話番号、備考、 列4にセルA、Bに佐藤さんの住所、氏名、 列5にセルA、Bに佐藤さんの年齢、職業、 列6にセルA、Bに佐藤さんの電話番号、備考、 列7にセルA、Bに大山さんの住所、氏名、 列8にセルA、Bに大山さんの年齢、職業、 列9にセルA、Bに大山さん電話番号、備考、 列10… と表示されるようにしたいのですが sheet2のA1、B1、A2、B2、A3、B3セルに数式を入力し 列4以降にコピーしても飛び飛びになってうまくいきません。 入力規則かと6列目まで増やしてコピーしても 7列目以降に正しくコピーできません。 何か関数が必要なのでしょうか?過去の質問も検索しましたが よく分かりません。よろしくお願いします。

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

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

Sheet1のA列に1列挿入します。そのA列の各行に連番を振ってください。オートフィルで。 Sheet2に行って、カード内で無いところの、1セル目立たないところに番号として1を振ります。K1セルとします。 Sheet2に行って、氏名を表示するところで =VLOOKUP(K1,Sheet1!$a$1:$F$500,3,FALSE)と入れます。 山田が出たはずです。 住所セルには =VLOOKUP(K1,Sheet1!$a$1:$F$500,2,FALSE)と入れます。 住所が出ました。 最後の項目まで第3引数を変えてVLOOUUP関数をセットしてください。 そこ印刷してください。 K1を2とします。 佐藤さんの内容に変わるはずです。 ここで印刷します。 印刷操作が面倒なので、となると VBAの出番です。 sub test01() For i=1 to 34 range("K1")=i Range(A1:J30).PrintOut next i Sub End wo 実行すると、Sheet1の第1行から34人部印刷します。 質問の主旨と少し違いますが、内容はSheet1で見れるので、あえてカードイメージは持たない、こういうやり方をシステムでは良くやります。 ーー 質問どおりでもVBAでやるほうが素直に考えてできます。

takechanya
質問者

お礼

今日、試しましたが、「内容はSheet1で見れるので、 あえてカードイメージは持たない、こういうやり方を システムでは良くやります。」と おっしゃる意味がよく分かりました。 すべてのカードの表示はできませんが 完成したカードは100%思ったとおりのものが完成しました。 VBAは、まったく分かりませんのでこれから勉強します。 機会がございましたらこれからもよろしくお願いします。 ありがとうございました。

takechanya
質問者

補足

ご回答ありがとうございます。Sheet2のカードに別の情報を入力したいのですべてのカードを表示させたいのです。よい方法がございましたらお願いいたします。

その他の回答 (5)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

それではご質問の列→行と置き換えて、下記でいかがでしょうか。          A                    B 1 =INDEX(住所録,INT((ROW()-1)/3)+1,1) =INDEX(住所録,INT((ROW()-1)/3)+1,2) 2 =INDEX(住所録,INT((ROW()-1)/3)+1,3) =INDEX(住所録,INT((ROW()-1)/3)+1,4) 3 =INDEX(住所録,INT((ROW()-1)/3)+1,5) =INDEX(住所録,INT((ROW()-1)/3)+1,6) 4 =INDEX(住所録,INT((ROW()-1)/3)+1,1) =INDEX(住所録,INT((ROW()-1)/3)+1,2) 5 =INDEX(住所録,INT((ROW()-1)/3)+1,3) =INDEX(住所録,INT((ROW()-1)/3)+1,4) 6 =INDEX(住所録,INT((ROW()-1)/3)+1,5) =INDEX(住所録,INT((ROW()-1)/3)+1,6) 7以降繰り返し 頭の体操は以上ですが、実用上はA列にレコード番号(見易い様に全角で入れてありますが、実際には半角を使用)を入れる事にして、 下記の様な式を入れる方が、置き場所の制約も無く、良いと思います。   A      B           C 1 1 =INDEX(住所録,$A1,1) =INDEX(住所録,$A1,2) 2   =INDEX(住所録,$A1,3) =INDEX(住所録,$A1,4) 3   =INDEX(住所録,$A1,5) =INDEX(住所録,$A1,6) 4 2 =INDEX(住所録,$A4,1) =INDEX(住所録,$A4,2) 5   =INDEX(住所録,$A4,3) =INDEX(住所録,$A4,4) 6   =INDEX(住所録,$A4,5) =INDEX(住所録,$A4,6) 7行目以降繰り返し お分かりと思いますが、式はB1:C3の6個のセルを単位に複写してください。

takechanya
質問者

お礼

ご回答ありがとうございます。試しましたところSheet2に反映されました。私が考えていたイメージにもっとも近いように思います。今回は、No.2 imogasi様の方法で約500枚のカードを完成させましたので、次回は、mitarashi様の方法でやって見たいと思います。また、機会がありましたらよろしくお願いします。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

ANo.3のテストデータと実行例です。改めて質問を読み直すと、ある列のセルA,Bと書かれていて、元のデータ構造が分かりかねます。列と、セル一行目と二行目と短絡的に判断していました。当方の、元のデータ構造の理解が違っているのだと思います。回答では無く、言い訳になってしまいますが。 Sheet1    A     B    C     D    E     F  1 山田住所 佐藤住所 大山住所 高田住所 遠藤住所 犬山住所 2 山田氏名 佐藤氏名 大山氏名 高田氏名 遠藤氏名 犬山氏名 3 山田年齢 佐藤年齢 大山年齢 高田年齢 遠藤年齢 犬山年齢 4 山田職業 佐藤職業 大山職業 高田職業 遠藤職業 犬山職業 5 山田電話 佐藤電話 大山電話 高田電話 遠藤電話 犬山電話 6 山田備考 佐藤備考 大山備考 高田備考 遠藤備考 犬山備考 Sheet2    A    B     C    D     E    F     G    H     I    J     K  1 山田住所 山田年齢 山田電話 佐藤住所 佐藤年齢 佐藤電話 大山住所 大山年齢 大山電話 高田住所 高田年齢 2 山田氏名 山田備考 山田備考 佐藤氏名 佐藤備考 佐藤備考 大山氏名 大山備考 大山備考 高田氏名 高田備考

takechanya
質問者

補足

ご回答ありがとうございます。mitarashi様のご回答を見て私の表現が間違っていたことに気がつきました。列1ではなく行1ですね。 sheet1  A   B   C   D   E   F     行1住所、氏名、年齢、職業、電話、備考      を Sheet2   A  B    行1住所、氏名    行2年齢、職業    行3電話、備考 です。 しっかり考えて文書を書いたつもりでしたが 申し訳ございません。

  • hayasi456
  • ベストアンサー率40% (2402/5878)
回答No.4

確かに+3ずれますね。 妥協してもらえればシンプルな数式(私のレベル)で出来ます。 横に3件分並べて A1からB3に山田さん D1からE3まで佐藤さん G1からH3まで大山さん となるよう数式を入力 行4以下にコピーされてはどうでしょう。

takechanya
質問者

お礼

ご回答ありがとうございます。実際のデータは6個ではなく使用する列も多いのでずーっと右まで行くことになりますがこの方法だと確かに簡単にできますね。

takechanya
質問者

補足

今日、試しましたがデータが多く、ずーっと右まで行ったら、列の最大数を超えてしまうため作成できませんでした。しかし、データ量が少ない場合は十分使えます。ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

Sheet1の各人のデータの列番号は、1,2,3,4,5,.... 対応するSheet2の各人のデータの先頭列の番号は1,4,7,10,... この対応の規則性を見いだせば良いのではないでしょうか。 int((Sheet2の列番号 - 1) / 3) + 1 = 対応するSheet1の列番号 でどうでしょうか。列番号はcolumn()で取得できます。 Sheet1のデータ範囲にたとえば住所録という名前をつけたとして、 Sheet2のA1セルに、=INDEX(住所録,1,INT((COLUMN()-1)/3)+1) Sheet2のA2セルに、=INDEX(住所録,2,INT((COLUMN()-1)/3)+1) Sheet2のB1セルに、=INDEX(住所録,3,INT((COLUMN()-1)/3)+1) Sheet2のB2セルに、=INDEX(住所録,4,INT((COLUMN()-1)/3)+1) Sheet2のC1セルに、=INDEX(住所録,5,INT((COLUMN()-1)/3)+1) Sheet2のC2セルに、=INDEX(住所録,6,INT((COLUMN()-1)/3)+1) とすると、山田さんのデータを参照できます。 このA1:C2に入れた式は、D1:F2に複写すれば佐藤さんのデータを参照します。お試し下さい。 ただ、Sheet2のデータの位置を簡単に移す事もできず、汎用性は疑問ですが。

takechanya
質問者

お礼

ご回答ありがとうございます。試してみましたがsheet2にうまく反映されませんでした。

  • redowl
  • ベストアンサー率43% (2140/4926)
回答No.1

印刷時に 質問のような レイアウトで・・・ 実現させたい。 ということでしょうか? 簡単な方法として sheet2 の A1に =CONCATENATE(Sheet1!A1,CHAR(10),Sheet1!C1,CHAR(10),Sheet1!E1) B1に =CONCATENATE(Sheet1!B1,CHAR(10),Sheet1!D1,CHAR(10),Sheet1!F1) この数式を下セルへドラッグ A,B列を選択して セルの書式設定→配置→折り返して全体を表示するにチェック→OK にすれば、 セル内で改行(2カ所)された状態で表示

takechanya
質問者

補足

早速のご回答ありがとうございます。 セル内で改行するのではなく sheet1の1列に6個あるデータを sheet2で1列に2個づつ3列使用して6個表示したい ということです。 横長の表を四角の表にするといった感じです。 1つのセルにすべてのデータをまとめるのではなく セルはあくまでも別々です。 6個のデータに対して6個のセルを使います。 よい方法がございましたらよろしくお願いします。

関連するQ&A