- ベストアンサー
EXCELで名簿のデータを自動作成し、検索結果を名簿に書き込む方法
- Accessにある人物名簿のデータベースを利用して、特定の条件で人物を検索し、その結果を名簿に書き込む作業をVBAで行いました。検索をかけるたびに名簿が更新されます。
- Excelで名簿のシートを作成し、それを人数分コピーすることが必要です。また、名簿のCSVファイルの内容をExcelシートに書き込む方法も必要です。
- 名簿.xlsを開いた時点や名簿.csvが更新された時点で、名簿.xlsに名簿.csvの内容を書き込むことができるようにしたいです。
- みんなの回答 (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
その他の回答 (1)
- TAGOSAKU7
- ベストアンサー率65% (276/422)
どもども田吾作7です。 質問です。 CSVには項目のヘッダが入っていますか?
補足
項目のヘッダ・・・・Accessテーブルで言うフィールド名の事でしょうか? 入っていないです。私の希望する処理に無ければならないものでしたら、併せて御教授いただけないでしょうか?
お礼
コピペでWorkbook_Open()に貼り付けたらできました。まさに望んでいた処理です。 名簿.csvは検索をかける度に更新されるものですから、ダイアログでcsvファイルを指定するのでなく常に名簿.csvを開く様に処理を書き換えました。勝手にいじって申し訳ないです。 プログラム処理的には申し分ないのですが、どうやら私の理解力に申す所があるようでして、myPotの意味がよくわからず特定のセルに特定のデータを貼り付けられない・・・。(滝汗 もちろん自力で理解しようと最大限の努力は致しますが、myPotの解釈についての解説をお願いできないでしょうか?
補足
myPotの意味わかりました~。 おかげさまでできました。本当にありがとうございました。