■12985 / 1階層) |
CSVデータ→エクセル(ソート)
|
□投稿者/ よねさん -(2016/04/14(Thu) 09:07:36)
| CSVファイルの書き出し部分が書いてなかったので追記しました。
ややこしいのはCSVでの項目順番と書き出し先の順番が異なるところです。
各項目ごとにコードを書く必要があるのでちょっと長くなります。
また、sort部分のコードは2007以降は変化しています。
こちらでは2010or2013でしたので、sortのコードを修正しています。
お書きになっていた元のコードはコメントアウトしていますので
バージョンに合わせて適切に修正してください。
Sub SheetCopy()
Dim myBook As Workbook
Dim OpenFileName As String
Dim myb_name1 As String
Dim myb_name2 As String
Dim mySh_name As String
Dim mySh1 As Worksheet, mySh2 As Worksheet
Dim mySh_name1 As String
Dim wSheetName As Variant
Dim wNewSheetName As Variant
Dim NewDate As Date
Dim Sh As Worksheet
Dim wLastGyou As Long
'アクティブなシート名を取得
wSheetName = ActiveSheet.Name
NewDate = DateAdd("m", 1, Range("A1").Value)
wNewSheetName = Format(NewDate, "yyyy.m")
'同名シートの有無を確認
For Each Sh In ThisWorkbook.Worksheets
If Sh.Name = wNewSheetName Then
MsgBox "すでに同名のシートが有りますので終了します "
Exit Sub
End If
Next Sh
'ワークシートのコピー
ActiveSheet.Copy after:=ThisWorkbook.Sheets(Sheets.Count)
'コピーしたシート名を変更する
ActiveSheet.Name = wNewSheetName
Range("A12:O119").ClearContents
'A1セルに新しい日付を入力
Range("A1").Value = NewDate
'転記先シートを変数にセット
myb_name1 = ThisWorkbook.Name
mySh_name1 = ActiveSheet.Name
Set mySh1 = Workbooks(myb_name1).Sheets(mySh_name1)
'CSVファイルを開く
OpenFileName = Application.GetOpenFilename("CSV ファイル (*.csv),*.csv")
If OpenFileName <> "False" Then
Workbooks.Open OpenFileName
End If
myb_name2 = ActiveWorkbook.Name
mySh_name = Left(myb_name2, Len(myb_name2) - 4)
'CSVシートを変数にセット
Set mySh2 = Workbooks(myb_name2).Sheets(mySh_name)
'--------書き出し
With mySh1
Dim Fcn As Long
Dim i As Long
Dim buf As String
Dim tmp As Variant
Open OpenFileName For Input As #1
Fcn = 9
Do Until EOF(1)
Line Input #1, buf
Fcn = Fcn + 1
tmp = Split(buf, ",")
If Fcn >= 11 Then
For i = LBound(tmp) To UBound(tmp)
If i = 2 Then
.Cells(Fcn + 1, 13).Value = tmp(i)
ElseIf i = 3 Then
.Cells(Fcn + 1, 1).Value = tmp(i)
ElseIf i = 4 Then
.Cells(Fcn + 1, 4).Value = tmp(i)
ElseIf i = 5 Then
.Cells(Fcn + 1, 15).Value = tmp(i)
End If
Next i
End If
Loop
Close #1
End With
'-------------
'並べ替えを実行する
wLastGyou = mySh1.Cells(Rows.Count, 1).End(xlUp).Row
' mySh1.Range("A12:O" & wLastGyou - 1).Sort _
Key1:=Range("O12"), _
Order1:=xlDescending, _
Header:=xlNo
mySh1.Sort.SortFields.Add Key:=Range("O12:O" & wLastGyou) _
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With mySh1.Sort
.SetRange Range("A12:O" & wLastGyou)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
|
|