EXCELで名簿のデータを自動作成し、検索結果を名簿に書き込む方法

このQ&Aのポイント
  • Accessにある人物名簿のデータベースを利用して、特定の条件で人物を検索し、その結果を名簿に書き込む作業をVBAで行いました。検索をかけるたびに名簿が更新されます。
  • Excelで名簿のシートを作成し、それを人数分コピーすることが必要です。また、名簿のCSVファイルの内容をExcelシートに書き込む方法も必要です。
  • 名簿.xlsを開いた時点や名簿.csvが更新された時点で、名簿.xlsに名簿.csvの内容を書き込むことができるようにしたいです。
回答を見る
  • ベストアンサー

EXCELでシートを自動作成し、入力する。

いつも参考にさせて頂いております。 とても初歩的な質問ですが教えていただけないでしょうか? Accessに人物名簿のデータベースがあります。 人物をある条件で検索し、検索にヒットした人物の情報を名簿.csvへ書き出すという作業をVBAで行いました。 検索をかける度に名簿.csvの内容は更新されます。 ここからなのですが、 Excelに下のような名簿のシートを作成しました。(名簿.xls) ―――――――――――――――――――――――――    氏名:  生年月日:        住所:   Tell:         Fax:   会社名:   会社Tell:   会社Fax: ――――――――――――――――――――――――― (実際にはもっと沢山の項目があり、レイアウトも複雑ですが、簡略しています。) 名簿.xlsを開いた時、もしくは名簿.csvを更新した時点で名簿.xlsに名簿.csvの内容を書き込みたいのですが、 (1)検索にヒットした人物が複数いる事がほとんどなので、このシートを人数分コピーしたい。 (2)そもそもどうすればこのシートにCSVファイルの内容を書き込めるのでしょうか? よろしくご教授の程、お願い致します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

シート1枚のものを原本として使って下さい。 そのシート名は名簿001としています。(モジュールの内容と対応していれば当然、別の名前でもいいです) CSV_file_Readを実行すれば、CSVファイルを選択するダイアログが出ます。対象ファイルを選択します。 込み入ったことをすると長くなるのでmyPotをmyPot(CSVファイルの項目順,行または列番号)の意味に使っています。 myPot(0, 0) = 1: myPot(0, 1) = 2 は最初の項目は行=1、列=2(B1になります)を表します。実情に合うように変えてください。これは項目名が多い場合は、別シートに入力位置の行・列番号テーブルを作っておいて読み込むようにしたら簡単になると思います。 想定は例えば、項目名『氏名:』はA1で、氏名をB1に書き込むようにしています。 標準モジュールに貼り付けます。Excel2000です。97でしたら補足して下さい。修正します。 Public Sub CSV_file_Read()  Dim myPot(7, 1) As Variant 'シート上の座標  Dim dtNum As Integer '項目数(0から)  Dim cot As Integer 'カウンタ   dtNum = 7   myPot(0, 0) = 1: myPot(0, 1) = 2 '入力セルの座標をセットする   myPot(1, 0) = 2: myPot(1, 1) = 2 '読み込めば速いけど・・・   myPot(2, 0) = 2: myPot(2, 1) = 4   myPot(3, 0) = 3: myPot(3, 1) = 2   myPot(4, 0) = 3: myPot(4, 1) = 4   myPot(5, 0) = 4: myPot(5, 1) = 2   myPot(6, 0) = 4: myPot(6, 1) = 4   myPot(7, 0) = 4: myPot(7, 1) = 6  Dim CSVfilename As Variant 'CSVファイル名  Dim dat As String 'CSVデータ  Dim myArray As Variant 'CSVデータを配列化  Dim ShtNum As Integer 'シート数  CSVfilename = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")   If CSVfilename = False Then 'CSVファイルを選択    Exit Sub   End If  Application.ScreenUpdating = False  ShtNum = 0  Open CSVfilename For Input As #1  'Line Input #1, dat 'CSVファイルに項目名があれば『'』を削除すれば読み飛ばしになる  While Not EOF(1)   Line Input #1, dat '1シート分のデータを読む   ShtNum = ShtNum + 1   If ShtNum > 1 Then 'シートを追加    Worksheets("名簿001").Copy after:=Worksheets("名簿" & Right("00" & (ShtNum - 1), 3))    ActiveSheet.Name = "名簿" & Right("00" & ShtNum, 3)   End If   myArray = Split(dat, ",")   For cot = 0 To dtNum 'シートに展開    ActiveSheet.Cells(myPot(cot, 0), myPot(cot, 1)) = myArray(cot)   Next  Wend  Close #1  Worksheets("名簿001").Activate  Application.ScreenUpdating = True End Sub

as-naoki
質問者

お礼

コピペでWorkbook_Open()に貼り付けたらできました。まさに望んでいた処理です。 名簿.csvは検索をかける度に更新されるものですから、ダイアログでcsvファイルを指定するのでなく常に名簿.csvを開く様に処理を書き換えました。勝手にいじって申し訳ないです。 プログラム処理的には申し分ないのですが、どうやら私の理解力に申す所があるようでして、myPotの意味がよくわからず特定のセルに特定のデータを貼り付けられない・・・。(滝汗 もちろん自力で理解しようと最大限の努力は致しますが、myPotの解釈についての解説をお願いできないでしょうか?

as-naoki
質問者

補足

myPotの意味わかりました~。 おかげさまでできました。本当にありがとうございました。

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

どもども田吾作7です。 質問です。 CSVには項目のヘッダが入っていますか?

as-naoki
質問者

補足

項目のヘッダ・・・・Accessテーブルで言うフィールド名の事でしょうか? 入っていないです。私の希望する処理に無ければならないものでしたら、併せて御教授いただけないでしょうか?

関連するQ&A

  • エクセル シート自動 マクロ

    以前作っていたエクセルの自動シートです http://okwave.jp/qa/q9223527.html 今回別のエクセルを作ることになり 助けてほしいのですが シート1 名簿 A1に「=TODAY()」いれ日付表示  B列 C列  D列   E列以降に非表示にして隠しておく             変更があるときにボタンで再度表示して入力する 1 氏名  ボタン1 (生年月日・年齢・基礎体重・身長・握力・など)  2 氏名  ボタン2 (生年月日・年齢・基礎体重・身長・握力・など)  3 氏名  ボタン3 (生年月日・年齢・基礎体重・身長・握力・など)  4 氏名  ボタン4 (生年月日・年齢・基礎体重・身長・握力・など)  5 氏名  ボタン5 (生年月日・年齢・基礎体重・身長・握力・など)  のみ記載がある シート2 情報原本 それぞれの項目がある C1氏名・C2生年月日・C3年齢・C4基礎体重・C5血圧など D1   D2  ・・・・  などいろいろ情報を記入する場所を作る予定 シート1 それぞれボタンを作成 ボタン1~5をそれぞれ押した時、シート2(情報原本)をコピーして別シートにして 新しく名前を付けそれぞれのボタンに記録されている基本情報(氏名・生年月日・年齢 ・目標体重)が自動的に指定されたところに入力され作成されるものを作りたいのですが 毎日それぞれ人の情報シートを作り管理していこうと思っているため ボタン管理できたらうれしいのですが 助けてください

  • エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい

    現在顧客名簿シートがあり、修正フォームから顧客情報を修正できるようにマクロを組んでいる最中です。  例えば、textbox1→氏名、textbox2→生年月日、textbox3→住所、としていて、住所のみ変更情報を入力し修正ボタンをクリックすると氏名、生年月日が未入力のため顧客名簿の氏名、生年月日が消えてしまいます。  このような場合、入力がないtextboxのシート転記プログラムを飛ばす、若しくは入力があるtextboxのみシート転記を実施する方法を教えてください。

  • エクセルでcsvデータを自動読み込みする方法(至急)

    csv形式のファイル(内容は計測値データ)をエクセルに読み込み、csvファイルの各データが規定値内に納まっているかの確認が容易できる方法を探しています。 このとき条件として、 (1)csvファイル内のデータは10項目程度。 (2)csvデータはランダムに更新される。 (3)エクセルに読み込むときはエクセルシート内の決められたセルにそれぞれデータが格納されること。 (例)csvファイルに"110"と"119"の2種類のデータがあった場合、あらかじめxlsファイルのセルA1に「警察」、セルA2に「消防署」と記入しておき、csvファイルのデータを読み込んだとき、セルB1に"110"、セルB2に"119"と入力される。 (4)csvファイル自体は開かず、必要なときにあらかじめ作成したxlsファイルを立ち上げると、自動でcsvファイルの内容を吸い上げる。 (5)入力されたデータの適否をそれぞれ判定する。 (6)xlsファイルを立ち上げている間にcsvファイルが更新された場合、xlsファイルの更新方法は手動と自動を選択できる。 こんなこと出来るでしょうか? 特に(4)が困っています。csvファイルをエクセルで開いた状態であれば、この内容で出来たのですが・・・。 どなたか良い方法があったら教えて下さい。お願いします。

  • エクセルについて

    よろしくお願いします。例えば ファイル元: C:\エクセル\名簿.xls のsheet1の内容が以下  A   B   C   D   E 1 日付 氏名 住所 品名 金額 2 12 山田 日本 PC 79800 3 12 山本 日本 TV 68000 4 13  山田 日本 電話 29800 ...以下略 の場合に ファイル元: C:\エクセル\個人名簿 のsheet山田に 上の名簿.xls のsheet1の氏名欄が山田の行を  A   B   C   D   E 1 12 山田 日本 PC 79800 2 13  山田 日本 電話 29800 ...以下略 のようにピックアップしていくことはできますか? 色々考えてみたのですが知識不足もあり思いつくことが出来ませんでした。何卒よろしくお願いします。

  • エクセルでのシートの作成方法

    エクセルで入力したデータを別のシートで抽出したい。(毎月の作業で項目は同一、データ内容は異なります。) シート1に元データを入力☆会社名 社員数 資本金 決算年月日             A会社  500  40000  170331            B会社  100  50000  150331 すると、毎月自動で、 シート2にはA会社の情報☆会社名 社員数 資本金 決算年月日               A会社  500  40000  170331 シート3にはB会社の情報☆会社名 社員数 資本金 決算年月日               B会社  100  50000  150331 と、いうように表示させたい。CDE…といくつもあります。何を使えばこのようにできますか?

  • エクセル2003でフォームを作成しています(2)

    エクセル2003でフォームを作成しています(2) ネットワーク上にある社員名簿.xlsの情報を使って、フォーム上で ぶっちゃけて言えばお金を使い過ぎていないかのチェックをします。 エクセルのワークシート上でやればいいと思うかも知れませんが 社員名簿.xlsは専用端末からおとしたいくつかのcsvを加工した ものから作成するので、ファイル名だけは常に同じですが、ボタン などは設置出来ないので、フォームを作成してデータだけを ひっぱってくることにしました。 詳細画面フォーム上の検索ボタンを押すと、 社員名簿.xlsのデータを元に作成したリストボックスの貼り付いた 別フォームが開き、該当者をクリックすると別フォームは閉じられ、 詳細画面フォームに社員名簿の情報がそれぞれのテキストボックスに 反映される、ということがまずやりたいのです。 別フォームにリストボックスを貼り付けたのは、それしかやり方を 知らないからです。 ※コンボボックスで作成していましたが、変更しました。 判定額というのは、ここまではOKという金額が総計を元に計算される 仕組みになっています(これからします)。 その下の小さなテキストボックスには判定額と総計を比べてOKか否か の何かを出すようになっています(これもこれからします)。

  • エクセルでシートを反映させたい

    いつもお世話になっています。エクセル初心者です。 エクセル2003を使用中です。 シート1 に氏名や所属、生年月日等の基本情報があります。 シート2~13に誕生月毎に同様のデータを振り分けしたいのですが、どのようにしたら良いのでしょうか? (例 4月生シートには4月生の人のデータのみが表示される) シート1上では生年月日は誕生月と日は別々の列に入力されています。 シート1の基本情報は毎月更新されるので、できれば自動にしたいのです。 説明がわかりにくいかもしれませんが、よろしくお願いします。

  • EXCELのSheetを自動更新できないでしょうか

    掲題について質問させてください。 会社で社員各自が勤怠情報を記録しているエクセルがあります。 「勤怠10月_山田.XLS」のように名前が付けられています。 そのBookの中に、「マスタ」というSheetがあるのですが、 この内容が不定期で更新されます。(データの追加のみ) 社員は勤務先がバラバラな為、マスタ内容に更新がある度に、 各自に新しい勤怠ファイルをメールで配布しています。その後、 各自、自分が記録していた内容を新しいファイルにコピーするか、 又はマスタSheetを入れ替えるという手順になっています。 この作業が非常に面倒なのでなんとか自動化できないかと 考えた次第です。 例えばEXEファイルなどを配布して、それを起動すると指定した Bookの指定したSheetの中身が更新される、 というようなことはできないでしょうか? VB等でできないものでしょうか。 (私自身はAccessのVBAの経験しかありませんが、 VBでできるのであればがんばって勉強したいと思います。 Accessは各自の端末にインストされてないのです。) どなたかご教授いただけると大変助かります。 よろしくお願いいたします。

  • 複数のエクセルシートからの検索

    社員住所録が会社ごとに別シートに作成されている状態で、任意の会社(シート)の任意の氏名とか電話番号をキーにして個人情報(一行分)を検索(取り出し)する場合の関数の使い方を教えて下さい。 住所録の項目は左から下記の順で各セルに入っています。 『社員番号・氏名・〒・住所・電話番号・生年月日』 以上、宜しくお願いします。

  • エクセルで体温表入力シートをつくりたい

    とある病院の看護師です。当病院はカルテから電子カルテへの移行期で、体温表をエクセルで記入しています。しかし、患者さん50名分を一個一個エクセルを開いて記入するのは案外大変です。ですので体温表一括入力シートを作り、そこに記入したデータが各患者さんの体温表(.XLSファイル)のセルに自動的に記入されるようにしたいと考えています。 ※当病院はすでにエクセルを使って体温表を記入しています。 下記が体温表の画像+質問になります ご参照ください http://4vote.sakura.ne.jp/taion/taion.htm -------------------------------------------------------------- 【内容】 今までは、体温表名簿→リンクを一回一回ひらいて体温表をだして記入している ※入退院により氏名・順番は変動している 体温記入シートのイメージとしては、ここに記入すれば患者さん一人一人のデータを開かなくて済む→時間が掛からない、というのを作りたい -------------------------------------------------------------- 入退院があると体温表の名簿の順番などは変動してしまいます。そのことを考慮した、体温表一括記入シート(記入したデータが各患者さんの体温表のセルに自動的に記入されるシート)の作成方法をご教授いただければ幸に思います。宜しくお願いします。

専門家に質問してみよう