OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.109315
  • 閲覧数564
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 20% (2/10)

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

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

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

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

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

よろしくご教授の程、お願い致します。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

シート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

お礼率 20% (2/10)

myPotの意味わかりました~。
おかげさまでできました。本当にありがとうございました。
投稿日時 - 2001-07-26 17:30:40
お礼コメント
as-naoki

お礼率 20% (2/10)

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

その他の回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

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

質問です。
CSVには項目のヘッダが入っていますか?
補足コメント
as-naoki

お礼率 20% (2/10)

項目のヘッダ・・・・Accessテーブルで言うフィールド名の事でしょうか?
入っていないです。私の希望する処理に無ければならないものでしたら、併せて御教授いただけないでしょうか?
投稿日時 - 2001-07-25 23:59:53
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ