• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELでシートを自動作成し、入力する。)

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

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