|
コードは下記のようになっております。
150フィールド分のcsvを読み込みます。
3列目の受理番号は、シート既存のデータの最終行の受理番号に+1を加算していきます。
4列目と104列目は日付フィールドでcsvファイルのYYYYMMDD形式のテキストファイルを日付データに変換していきます。
Sub CSVファイル登録()
Dim RowNum As Long
Dim ColmunNum As Long
Dim EndjuriNum As Long
Dim myTxtFile As String
'データを登録していくシート
Worksheets("登録").Activate
'シートの最終行を選択
Cells(1, 3).Select
Selection.End(xlDown).Select
EndjuriNum = Cells(Selection.Cells.Row, 3).Value
RowNum = Selection.Row
'シートに登録するCSVファイルを開く、150のフィールド用にカンマで区切られている
myTxtFile = ActiveWorkbook.Path & "\入力データ.csv"
Open myTxtFile For Input As #1
Do Until EOF(1)
'1から164列までのデータを変数に入れる
Dim mybuf(1 To 150) As String
Dim i As Integer
For i = 1 To 150
Input #1, mybuf(i)
Next i
'必須項目が不正であれば入力をはじく、桁数で判定
If Len(mybuf(1)) <> 3 Or Len(mybuf(4)) <> 8 Or Len(mybuf(15)) <> 3 Or Len(mybuf(16)) <> 1 Or _
Len(mybuf(17)) <> 1 Or Len(mybuf(30)) <> 2 Or Len(mybuf(31)) <> 2 Or Len(mybuf(35)) <> 2 Or _
Len(mybuf(36)) <> 2 Or Len(mybuf(36)) <> 2 Or Len(mybuf(99)) <> 3 Or Len(mybuf(104)) <> 8 Or _
Len(mybuf(111)) <> 2 Then
MsgBox "データが不正のため終了"
Close #1
Exit Sub
End If
'3列目は受理番号、前レコードの受理番号に1を加算していく
mybuf(3) = EndjuriNum + 1
'4列目と104列目は日付フィールド、YYYYMMDDのテキスト形式から日付データに変換
mybuf(4) = Left(mybuf(4), 4) & "/" & Mid(mybuf(4), 5, 2) & "/" & Right(mybuf(4), 2)
mybuf(104) = Left(mybuf(104), 4) & "/" & Mid(mybuf(104), 5, 2) & "/" & Right(mybuf(104), 2)
RowNum = RowNum + 1
For ColmunNum = 1 To 150
Cells(RowNum, ColmunNum) = mybuf(ColmunNum)
Next ColmunNum
EndjuriNum = EndjuriNum + 1
Loop
Close #1
End Sub
以上がおおまかなコードですが、これを処理時間を短縮できるような方法を教えてください。(効率いい方法を)
|
|