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