出産前後の痔にはご注意!

エクセルで作成した名簿の中から抽出したデータのみ別のブックに一覧作成したいのです。
シート毎に個人情報を入力してますが、同時に別ブックにて氏名、住所、連絡先のみを一覧にしたいです。
個人情報のシートは
ブック名「顧客情報詳細」の氏名欄がA6をブック「一覧表」のA1に。
住所はJ6→B1  連絡先J8→C3  といった具合です。

教えていただけないでしょうか? 
宜しくお願い致します。

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

A 回答 (5件)

一例です。


(1)一覧表ブックを開く→Sheet1タブ上で右クリック→コード表示→VBE(右上画面)に以下のコードを貼り付け
(2)コード内の「******」に顧客情報詳細ブックのパス名を設定→alt+F4キー押下(VBE画面終了)し、alt+F8キー押下→マクロを選択して実行

◎サンプルコード表
Sub 一覧表を作成()
Application.ScreenUpdating = False
myBook = "C:\***********\顧客情報詳細.xls"
i = 0
With Workbooks.Open(myBook)
For Each k In .Worksheets
i = i + 1
Sheet1.Cells(i, 1) = .Sheets(k.Name).Range("A6")
Sheet1.Cells(i, 2) = .Sheets(k.Name).Range("J6")
Sheet1.Cells(i, 3) = .Sheets(k.Name).Range("J8")
Next
.Close False
End With
Application.ScreenUpdating = True
End Sub

この回答への補足

すみません どうか教えてください。

>2)コード内の「******」に顧客情報詳細ブックのパス名を設定

「******」を削除してパス名を貼り付ければいいのですね?パス名っって何ですか?

引き続きお願いいたします。

補足日時:2010/04/02 14:41
    • good
    • 0

NO3です。


>パスはC:¥Documents and Settings¥~
⇒パス名から「¥」が全角文字のように思えますが如何でしょうか。
 半角でないとパス不正となりますのでご確認下さい。

この回答への補足

半角にしてますが何度やってもできないんです(泣)
エクセル2003ですが一覧表のシート1にて右クリック→コードの表示→貼り付けですね
パス名の表示ですがエクスプローラ画面がわからないのでファイル検索をしてプロパティからコピーをし
ファイル名を足しました。そこで何か違ってるのかも・・・。
エクスプローラー画面とはどこのことをさすのでしょうか。。。
何か面倒かけてますね。
どうぞお返事が大変でしたらあきらめます。

補足日時:2010/04/02 23:33
    • good
    • 0
この回答へのお礼

結果は残念でしたがご親切に教えていただきありがとうございました。
おそらく私のやり方違いからだと思います。
今回教えて頂いてマクロをもっと活用したいと感じました。
勉強してみたいと思います。

ありがとうございました。

お礼日時:2010/04/05 10:49

NO3です。


>「******」を削除してパス名を貼り付ければいいのですね?パス名っって何ですか?
⇒顧客情報詳細.xlsまでのローカルディスクのアドレスです。
 エクスプローラ画面のアドレス欄に表示されています。
 例えば、マイドキュメントフォルダにあるファイルは、C:\Documents and Settings\??????\My Documents\ファイルとなります。
 因みにサンプルコードでは、ローカルディスク(C)を想定にしましたので「C:\~」としていますが、ローカルディスク(D)ならば「D:\~」として下さい。
 

この回答への補足

残念ですができませんでした。
パスはC:¥Documents and Settings¥user¥デスクトップ¥顧客情報詳細.xls でしたので
貼り付けて設定しましたが
反映されません。どうしてでしょうか・・・?

補足日時:2010/04/02 16:07
    • good
    • 0

お、私の回答にも間違いが



>連絡先J8→C3

J8→C1
と考えています
    • good
    • 0

はじめに一言:


通常であれば一覧表を先に作成し詳細は一覧から抽出して作る形が一般的かと思います。

次に確認:
>連絡先J8→C3
これはJ8→C3の間違いではないですか?
以下の本題はJ8→C3と想定して考えています

本題:
1)顧客詳細情報のシート名が
Sheet1、Sheet2、Sheet3・・・・・
のような形式ならばExcelの関数のみで実現可能
一覧表A1
=INDIRECT("[顧客情報.xls]sheet"&ROW()&"!A6")
一覧表B1
=INDIRECT("[顧客情報.xls]sheet"&ROW()&"!J6")
一覧表C1
=INDIRECT("[顧客情報.xls]sheet"&ROW()&"!J8")
後は下方向にドラッグして


2)顧客情報のSheet名が個人名などになっている場合
マクロでの対応になると思われますが、マクロは大丈夫?


2)の場合はそれほど難しいマクロではないですが希望の場合は回答までに時間が必要

この回答への補足

すみません C1の間違いでした。
おっしゃる通りシート名は個人名になっております。


顧客情報のみを入力していましたが急遽DMも作成したいとの話に
なり質問の運びとなりました。
マクロですか・・・恥ずかしながら全くわかりません。
たびたびお手数ですが引き続き教えてください。
よろしくお願いします。困ってます。

補足日時:2010/04/02 13:28
    • good
    • 0
この回答へのお礼

遅くなりましたが
マクロ活用で随分と便利になるものだと知りました。
今回結果は残念でしたが(精進します)
親切に教えていただきありがとうございました。

お礼日時:2010/04/05 10:51

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

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

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

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

Qエクセル管理の名簿から必要な名簿だけを抽出したいんですが

windowsXPとエクセル2002を使ってますが、エクセルで管理している名簿(住所録)から、共通のキーワードを使ってまとめて検索・抽出する、良い方法はありませんか?
例えば宛名が「パン工場」「チーズ工場」「ジャム工場」のようにある場合、キーワードを「工場」というくくりだけでデータを抽出したいのです。
因みに「フィルターオプションの設定」だと、同一セルの中に他の語彙や文字が入っていると、除外されてしまいます。
例)キーワード「すし」⇒「すし屋」×(抽出されず)、といったような感じです。「Ctrl+F」ですと一つ一つ拾わないといけないので、大容量のデータですと、全て見つけ出すのに大変な労力と時間が掛かってしまいます。上記以外で何か良い方法はないでしょうか?よろしくお願いいたします。

Aベストアンサー

フィルタオプションで「工場」「を含む」とするだけで良さそうな気がしますが……。
どんな操作をされたのでしょうか?

Q会員名簿から出席者のみ一覧表の作成

   EXCLE2007にて
下記表のように名簿から出席者のみの表を作成したのです。
     
     1 会員1 出         1 会員1
     2 会員2            2 会員5
     3 会員3            3 会員6
     4 会員4            4 会員9
     5 会員5 出
     6 会員6 出
     7 会員7
     8 会員8
     9 会員9 出
    10 会員10

        つたない説明ですがよろしくお願いたします。

Aベストアンサー

ご希望のデータを抽出したいなら、フィルタの機能を利用されることをお勧めします。

「データ」「フィルタ」で出欠の欄の▼をクリックして「出」だけにチェックを入れます。

該当データが抽出された状態でデータ範囲をそのままコピーし、新規シートに貼り付けます。


もし関数で表示させたいのであれば(抽出対象が文字列の場合)、配列数式がすでに提案されていますが、以下のような数式の方がデータ位置を変更する必要が無いのでわかりよいかもしれません。

=INDEX(Sheet1!A:A,SMALL(INDEX((Sheet1!$B$2:$B$100<>"")*1000+ROW($B$2:$B$100),),ROW(A1)))&""

QExcel 抽出したデータで別シート自動作成

Excelで、条件で抽出したデータを、自動で別シート作成およびデータ出力したい

外部サイトで恐縮ですが、
こちら → http://oshiete1.nifty.com/qa6295795.html   の内容が似ているとは思いますが、

シートの自動作成まで含めるとどうなるのでしょうか

添付画像のように、
sheet1に(画像ではすでに入力済みですが)、たとえば 地区 列に「え」と入力すると
【え】というシートが自動作成の上、地区え の行が出力される
次に「え」と入力すると同シートの次の行に出力される

【い】というシートも同様です。

このようにするにはどうすればいいのでしょうか?
事情により急いでいます。何卒よろしくお願いいたします。

Aベストアンサー

続けてお邪魔します。

No.4の
(1)新しく作成されたシートの番号欄は再び1から表示するようにしたい。
(2)入力シート(今はsheet1)で消した値や行は作成されたシートでも消えるようにしたい。
 ex.バックスペースで地区に入力した値を消す
   →作成されたシートの対応する値も消える
(3)新しく作成されたシートの行列の幅は入力シートと同じにしたい。

の件について
(1)
今までのコードはSheet名を「地区」名にするようにしていましたので
「番号欄は再び1から・・・」というのがよくわからないのですが、
とりあえずは入力順にSheetが追加されるはずですので手作業でSheet見出しをドラッグして
順番を入れ替えてみてください。
(もちろんコードでSheetを並び替えることも可能ですが、そんなにたびたび並び替える必要はなさそうなので)

(2)と(3)
コードをやり替えてみました。
まず前回の「標準モジュール」のコードをすべて削除して↓のコードにしてください。

Sub Sheet分け() 'この行から
Dim k As Long, str As String, wS As Worksheet, myFlg As Boolean
Set wS = Worksheets(1)
str = wS.Cells(Selection.Row - 1, "E")
Application.ScreenUpdating = False
For k = 2 To Worksheets.Count
If Worksheets(k).Name = str Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = str
End If
Worksheets(str).Cells.ClearContents
With wS.Range("A1")
.AutoFilter field:=5, Criteria1:=str
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
Worksheets(str).Activate
ActiveSheet.Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths
Selection.PasteSpecial Paste:=xlPasteAll
End With
wS.AutoFilterMode = False
Application.CutCopyMode = False
Application.ScreenUpdating = True
wS.Activate
End Sub 'この行まで

次にSheet1のシートモジュールもすべて削除し、↓のコードにしてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
Dim i As Long, j As Long, lastCol As Long, str As String
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
i = Target.Row
j = Target.Column
If j <= lastCol And Target.Count = 1 Then
If Target <> "" Then
Call Sheet分け
Else
str = Cells(Target.Row, "E")
Worksheets(str).Cells.ClearContents
Range("A1").AutoFilter field:=5, Criteria1:=str
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets(str).Range("A1")
AutoFilterMode = False
End If
End If
End Sub 'この行まで

※ E列データを消去してしまうとフィルタがかけられませんので、エラーになってしまいます。
※ 今回もE列「地区」?でフィルタを掛けてE列をSheet名としています。

今度はどうでしょうか?m(_ _)m

続けてお邪魔します。

No.4の
(1)新しく作成されたシートの番号欄は再び1から表示するようにしたい。
(2)入力シート(今はsheet1)で消した値や行は作成されたシートでも消えるようにしたい。
 ex.バックスペースで地区に入力した値を消す
   →作成されたシートの対応する値も消える
(3)新しく作成されたシートの行列の幅は入力シートと同じにしたい。

の件について
(1)
今までのコードはSheet名を「地区」名にするようにしていましたので
「番号欄は再び1から・・・」というのがよくわからないので...続きを読む

QEXCELで一覧表のデータを個別に印刷したい

こんにちわ。
質問させて頂きます。

EXCEL(エクセル)で一覧表になっているデータがありまして、それを1件1件『A4用紙1枚づつ』に印刷したい。
という発案で、色々調べたのですが上手くいかず・・・。

WORDからの差込印刷も試してみましたが、レイアウトや罫線などの設定も細かく出来ないので駄目でした。



ちなみに、一覧表のデータというのは顧客データでして、名前や住所・生年月日等が入っています。

一番理想的なのは、『EXCEL一覧表のデータ』を『別のシートに作成したテンプレート』にデータを飛ばし、テンプレートに一覧表のデータが反映される。
顧客データは数十人分のデータがありますので、印刷する際にはどのデータを印刷するかしないかを選択できる。
・・・以上が出来れば素晴らしいです。


どなたか、その方法・もしくはヒント的な事を知っている方が居ましたら教えていただけると有難いです。
宜しくお願い致します。

Aベストアンサー

Wordで様式をつくり差し込み印刷がいいと思いますが 

>WORDからの差込印刷も試してみましたが
 差し込み印刷は、エクセルデータをWordの様式に差し込みます。
 参考
  http://www.miyazaki-cci.or.jp/nichinan/pc/case92.html

なお、
>レイアウトや罫線などの設定も細かく出来ないので駄目<
とは具体的にどのようなところが設定できずにダメなのかを提示するといい案を教えていただけるのではないですか

Qエクセルで複数の条件を抽出し自動的に別シートに反映する方法を教えてください。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 井上 派遣 企画 29  未調整

◇シート2◇ ※部署が人事で移動時期が未調整の人のみ抽出
 A      B     C     D    F
1 氏名 役職 部署 年齢 移動時期 
2 高橋 役員 人事 50  未調整


補足
・元データ(シート1)はこれからもデータを追加するので
 その度、シート2、シート3もそれぞれ自動で反映されるようにした いです。

・マクロ、VBAは知識がないので
 関数で作成したいです。

・できるだけエラー(#N/Aなど)表示されないようにしたいです。

説明が不十分で伝わりにくいかと思いますが
よろしくお願いします。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 ...続きを読む

Aベストアンサー

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるため)
.Range("A1:E1").AutoFilter 'A1:E1にオートフィルタ設定
.Range("A1:E1").AutoFilter Field:=3, Criteria1:="=人事", Operator:=xlOr, Criteria2:="=企画" '左から3つ目のフィルタを"人事"と"企画"のOR条件で抽出
.Range("A1:E1").AutoFilter Field:=5, Criteria1:="未調整" '左から5つ目のフィルタを"未調整"で抽出
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") 'A1から最終セル範囲の可視セルをこのシートのA1以降に貼り付け
.AutoFilterMode = False 'オートフィルタ終了
End With 'Sheet1に対する記述おわり
End Sub

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるた...続きを読む

Qエクセルで特定のデータの一部のみ抽出して別表に表示することができますか

エクセルで特定のデータの一部のみ抽出して別表に表示することができますか?

たとえば、左端に名前、その隣にアンケートの質問項目(1)(2)(3)(4)の回答結果が入力されている表があるとします。
その表から、質問(1)の回答がaの人の名前のみを別表に表示したいのです。
オートフィルタではごちゃごちゃしてしまうので不可です。

よろしくお願いします。

Aベストアンサー

>オートフィルタではごちゃごちゃしてしまうので不可です。

どうして、オートフィルタが不都合なのかわからないのですが、関数でリアルタイムで表示したいという意味なら、添付ファイルのレイアウトなら以下のような数式になります(まとめ方のレイアウトによって適宜数式を変更する必要があります)。

H2セルに以下の式を入力し下方向および右方向にオートフィルします。

=INDEX($A:$A,SMALL(INDEX(($B$2:$B$100<>H$1)*1000+ROW($B$2:$B$100),),ROW(A1)))&""


人気Q&Aランキング