【最大10000ポイント】当たる!!質問投稿キャンペーン!

エクセルで作成した一覧表をカード形式にしたいのですが
例えば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列目以降に正しくコピーできません。
何か関数が必要なのでしょうか?過去の質問も検索しましたが
よく分かりません。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

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でやるほうが素直に考えてできます。

この回答への補足

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

補足日時:2007/11/07 21:30
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/08 22:49

それではご質問の列→行と置き換えて、下記でいかがでしょうか。


         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個のセルを単位に複写してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/11 23:16

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 山田氏名 山田備考 山田備考 佐藤氏名 佐藤備考 佐藤備考 大山氏名 大山備考 大山備考 高田氏名 高田備考

この回答への補足

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

Sheet2   A  B
   行1住所、氏名
   行2年齢、職業
   行3電話、備考 です。
しっかり考えて文書を書いたつもりでしたが
申し訳ございません。

補足日時:2007/11/08 22:15
    • good
    • 0

確かに+3ずれますね。


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

この回答への補足

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

補足日時:2007/11/08 22:29
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/11/07 21:39

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のデータの位置を簡単に移す事もできず、汎用性は疑問ですが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/07 21:23

印刷時に 質問のような レイアウトで・・・ 実現させたい。


ということでしょうか?

簡単な方法として
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カ所)された状態で表示

この回答への補足

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

補足日時:2007/11/06 21:40
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルの表になってる名簿から個人別のカードを印刷するには

エクセルのひとつのシートに一覧になった名簿があるのですが(6000人分くらい)この表から任意の250人位を選んで別のシートに用意されてるカードに名前、住所、電話番号、所属など必要な項目を個人別に印刷したいのです。一枚一枚手作業で設定して印刷するのは大変なので、自動的に250人のデータ-を差し換えながら250枚のカードを印刷する方法をお教えください。なお、250人のデターだけを選択して他を削除してもいいのでデータ-の抽出方法には困らないのですが、エクセル上の250のシートにカードを作ることは、容量上困難です。また、個々のカードは、印刷すればよくエクセル上にファイルとして残る必要はありません

Aベストアンサー

朝時間がなくて応えられませんでしたが、夜見ると似た質問があり、そちらに解答を入れました。参考にしてください。
http://www.okweb.ne.jp/kotaeru.php3?qid=667710
の#7です。
抽出した後のやり方です。私は似たようなことを全体を
VBAでやってますが、上記では関数式+最少のVBAで自動化
を工夫しました。

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qユーザフォームを使ってのデータの書き換え(エクセル)

sheet1に下記のように商品のデータ一覧が入っており、
価格の改定があった時に[単価]に新しい価格をいれ、
当初[単価]に入っていた価格を[旧単価]に入れるようを作っています。

コード 商品名  単価  旧単価  改定日
1111  商品A  1000
1112  商品B  1500
1113  商品C  1200



コード 商品名  単価  旧単価  改定日
1111  商品A  1100  1000   2008/5/2
1112  商品B  1500
1113  商品C  1200

<UserForm>
コード [コードのTextBox]
商品名[商品名のLabel]
単価  [単価ののLabel]
新単価[新単価のTextBox]
改定日[改定日のTextBox]


ユーザーフォムでテキストボックスにコードを入れたら、
コードを商品のデータ一覧から検索して商品名と単価を
ユーザーフォムのLabel Captionに自動で表示されるようにしたいのです。

1.コードの入力
2.商品名、単価が表示される
3.新単価、改定日の入力
4.元のデータ(Sheet1)の書き換え

上記のような順序で考えていたのですが、
どうしてもコード入力からの検索表示が上手くいかないのです。
どうすれば良いのでしょうか?

※ユーザーフォームで[商品名][単価]をLabelにしてるのは、
数値・文字列として書き換えの必要がないので動かせないほうがいいのでは
とういう個人的な思い込みからですので、特にこだわりはございません。

相当な初心者のため、少しばかり注釈をつけてくださる大変ありがたいです。
上記のよう順番でなくても、よい方法があれば教えて下さい。
よろしくお願い致します。

sheet1に下記のように商品のデータ一覧が入っており、
価格の改定があった時に[単価]に新しい価格をいれ、
当初[単価]に入っていた価格を[旧単価]に入れるようを作っています。

コード 商品名  単価  旧単価  改定日
1111  商品A  1000
1112  商品B  1500
1113  商品C  1200



コード 商品名  単価  旧単価  改定日
1111  商品A  1100  1000   2008/5/2
1112  商品B  1500
1113  商品C  1200

<UserForm>
コード [コードのTextBox]
商品名[商品名...続きを読む

Aベストアンサー

コードのテキストボックスのChangeイベントで検索すればいいのでは

たとえば
コードテキストボックス : CodeText
新単価テキストボックス : NewPriceText
改定日テキストボックス : UpdateDateText
商品名ラベル      : NameLabel
単価ラベル       : PriceLabel
データの記述してあるシート: 商品マスター
といった名前だとします

Sub CodeText_Change()
  ' 検索二一致したセルを記憶する変数
  dim r as Range
  Set r = Worksheets("商品マスター").Range("A:A"). _
    Find( CodeText.Text, MatchCase = False )
  if r is nothing then
    ' 検索したが コードが見つからなかった場合
    Name.Label.Caption = "---"
    PriceLabel.Caption = "---"
    NewPriceText.Text = ""
    UpdateText.Text = ""
  else
    ' 該当コードがある場合
    ' 見つかったセルの隣のセルの内容をコントロール設定
    ' この場合に Rangeオブジェクトの Offsetメソッドで指示
    Name.Label.Caption = r.Offset(0,1).Value
    PriceLabel.Caption = r.Offset(0,2).Value
    NewPriceText.Text = r.Offset(0,2).Value
    UpdateText.Text = r.Offset(0,4).Value
  end if
End Sub

といった具合で検索出来るともいます

改訂 などのボタンを準備しておいて
Sub Kaitei_Click()
dim r as Range
  Set r = Worksheets("商品マスター").Range("A:A"). _
    Find( CodeText.Text, MatchCase = False )
  if r is Nothing then
    MsgBox "コードが見つかりません"
    Exit Sub
  end if
  ' 単価を更新
  r.Offset(0,2).value = NewPriceText.Text
  ' 旧単価列を更新
  r.Offset(0,3).Value = PriceLabel.Caption
  ' 改訂日を更新
  r.Offset(0,4).Value = DateValue( UpdateText.Text )
End Sub

# エラー処理を何もしていないので 適宜書き加えてください
# 日付がありえない日付であるとか、単価が金額として意味を成さない文字列であるとか
# 必要な箇所のデータが入力されていないなど

コードのテキストボックスのChangeイベントで検索すればいいのでは

たとえば
コードテキストボックス : CodeText
新単価テキストボックス : NewPriceText
改定日テキストボックス : UpdateDateText
商品名ラベル      : NameLabel
単価ラベル       : PriceLabel
データの記述してあるシート: 商品マスター
といった名前だとします

Sub CodeText_Change()
  ' 検索二一致したセルを記憶する変数
  dim r as Range
  Set r = Worksheets("商品マスター").Range("A:A"). _
   ...続きを読む


人気Q&Aランキング