いつも参考にさせて頂いております。
とても初歩的な質問ですが教えていただけないでしょうか?
Accessに人物名簿のデータベースがあります。
人物をある条件で検索し、検索にヒットした人物の情報を名簿.csvへ書き出すという作業をVBAで行いました。
検索をかける度に名簿.csvの内容は更新されます。
ここからなのですが、
Excelに下のような名簿のシートを作成しました。(名簿.xls)
―――――――――――――――――――――――――
氏名:
生年月日: 住所:
Tell: Fax:
会社名: 会社Tell: 会社Fax:
―――――――――――――――――――――――――
(実際にはもっと沢山の項目があり、レイアウトも複雑ですが、簡略しています。)
名簿.xlsを開いた時、もしくは名簿.csvを更新した時点で名簿.xlsに名簿.csvの内容を書き込みたいのですが、
(1)検索にヒットした人物が複数いる事がほとんどなので、このシートを人数分コピーしたい。
(2)そもそもどうすればこのシートにCSVファイルの内容を書き込めるのでしょうか?
よろしくご教授の程、お願い致します。
No.1
- 回答日時:
どもども田吾作7です。
質問です。
CSVには項目のヘッダが入っていますか?
この回答への補足
項目のヘッダ・・・・Accessテーブルで言うフィールド名の事でしょうか?
入っていないです。私の希望する処理に無ければならないものでしたら、併せて御教授いただけないでしょうか?
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
コピペでWorkbook_Open()に貼り付けたらできました。まさに望んでいた処理です。
名簿.csvは検索をかける度に更新されるものですから、ダイアログでcsvファイルを指定するのでなく常に名簿.csvを開く様に処理を書き換えました。勝手にいじって申し訳ないです。
プログラム処理的には申し分ないのですが、どうやら私の理解力に申す所があるようでして、myPotの意味がよくわからず特定のセルに特定のデータを貼り付けられない・・・。(滝汗
もちろん自力で理解しようと最大限の努力は致しますが、myPotの解釈についての解説をお願いできないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 名簿 検索する関数 3 2023/07/25 10:33
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- 法人税 電子帳簿保存法について 1 2022/04/07 11:17
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセル 多数のファイルから値を抜き出したい 4 2022/12/12 16:49
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- Visual Basic(VBA) excel2016でリストからカレンダーに内容を反映させたいです 2 2022/10/27 15:32
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) 出勤簿の土、日、休日に色付けできない 2 2022/08/04 20:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
【ExcelVBA】全シートのセルの...
-
ExcelVBA シート名を複数セルか...
-
【VBA】特定の文字で改行(次の...
-
Excel チェックボックスにチェ...
-
VBAで指定シート以外の選択
-
【Excel VBA】Worksheets().Act...
-
VBA 存在しないシートを選...
-
VB6.0でEXCELにシートを追加したい
-
ListViewの画面の更新
-
特定の文字を含むシートだけマ...
-
エクセルのシート名変更で重複...
-
vba 環境依存文字がListViewボ...
-
リストボックスの複数データを...
-
XL:BeforeDoubleClickが動かない
-
同じ作業を複数のシートに実行...
-
ブック名、シート名を他のモジ...
-
Excel マクロについての相談
-
【VBA】色のついたシート名を取得
-
ユーザーフォームに入力したデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報