いつも参考にさせて頂いております。
とても初歩的な質問ですが教えていただけないでしょうか?

Accessに人物名簿のデータベースがあります。
人物をある条件で検索し、検索にヒットした人物の情報を名簿.csvへ書き出すという作業をVBAで行いました。
検索をかける度に名簿.csvの内容は更新されます。

ここからなのですが、
Excelに下のような名簿のシートを作成しました。(名簿.xls)

―――――――――――――――――――――――――
   氏名:
 生年月日:        住所:
  Tell:         Fax:
  会社名:   会社Tell:   会社Fax:

―――――――――――――――――――――――――
(実際にはもっと沢山の項目があり、レイアウトも複雑ですが、簡略しています。)
名簿.xlsを開いた時、もしくは名簿.csvを更新した時点で名簿.xlsに名簿.csvの内容を書き込みたいのですが、
(1)検索にヒットした人物が複数いる事がほとんどなので、このシートを人数分コピーしたい。
(2)そもそもどうすればこのシートにCSVファイルの内容を書き込めるのでしょうか?

よろしくご教授の程、お願い致します。

A 回答 (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

この回答への補足

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

補足日時:2001/07/26 17:30
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/07/26 11:09

どもども田吾作7です。



質問です。
CSVには項目のヘッダが入っていますか?

この回答への補足

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

補足日時:2001/07/25 23:59
    • good
    • 0

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

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


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ