1

タイトルが示すように、一部のセルは正しい値になり、一部のセルは月と日が入れ替わります。これが定数の場合は修正できますが、一部の値が乱れるだけで、理由がわかりません。

コードは次のとおりです。

For v2temp = 0 To 4
form1(v2temp) = Trim(form1(v2temp)) & ";"
tmpp = Left(form1(v2temp), Len(form1(v2temp)) - 1)

arr = Split(tmpp, "-")
ActiveWorkbook.Worksheets("TEMP2").Range("I2").NumberFormat = "dd-mm-yyyy"

If tmpp <> vbNullString Then
    dt = DateSerial(arr(2), arr(1), arr(0))
    ActiveWorkbook.Worksheets("TEMP2").Range("I2").Value = dt
    form1(v2temp) = ActiveWorkbook.Worksheets("TEMP2").Range("I2").Value
Else
    form1(v2temp) = ""
End If
Next

For v2temp = 0 To 4
    ActiveWorkbook.Worksheets("TEMP2").Range("C7").Offset(v2temp, 0).Value = form1(v2temp)
Next

したがって、これはいくつかの日付をセル C7 C8 C9 C10 および C11 に書き込む必要がありますが、既に説明した問題があります。

コードに debug.print を追加して、受け取った値と変換された値を段階的に記述しました。どちらも正しいことがわかりますが、セルに表示される値は間違っています。

これはデバッグ出力です:

---------MARK--------
var TMPP is 10-08-2013
var DT is   10-08-2013
---------MARK--------
var TMPP is 03-08-2013
var DT is   03-08-2013
---------MARK--------
var TMPP is 28-07-2013
var DT is   28-07-2013
---------MARK--------
var TMPP is 14-07-2013
var DT is   14-07-2013
---------MARK--------
var TMPP is 26-06-2013
var DT is   26-06-2013
---------MARK--------

5回正しく通過し、5回すべての日付と終了日は問題ありませんが、これがセルの最終的な結果であり、値はおそらく最も古いものから最も古いものへとソートされます:

28-07-2013
26-06-2013
14-07-2013 > this should be before the cell up from this, so it's wrong formated
08-10-13   > this should be 10-08-2013
08-03-13   > this should be 03-08-2013

誰でも私を助けてもらえますか?検索して検索してみましたが、解決策が見つかりません。

ありがとう


>編集1

私は追加しました:

For v2temp = 0 To 99
    ActiveWorkbook.Worksheets("TEMP2").Range("C2").Offset(v2temp, 0).NumberFormat = "dd-MM-yyyy"
Next
ActiveWorkbook.Worksheets("TEMP2").Range("I2").NumberFormat = "dd-MM-yyyy"

2013 年 7 月 28 日 2013 年 6 月 26 日 2013 年 7 月 14 日 2013 年 8 月 10 日 2013 年 8 月 3 日

並べ替えオプションは日付の並べ替えを表示するのではなく、文字列の並べ替えを表示するため、文字列として到着するように継ぎ目があります。

私は後でこのコードでそれらを並べ替えます:

ActiveWorkbook.Worksheets("TEMP2").Visible = True
Sheets("TEMP2").Select
Range("B1:D1").Select
Sheets("TEMP2").AutoFilterMode = False
Selection.AutoFilter
ActiveWorkbook.Worksheets("TEMP2").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("TEMP2").AutoFilter.Sort.SortFields.Add Key:=Range("C1:C11"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("TEMP2").AutoFilter.Sort
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
4

2 に答える 2

0

この関数を使用して、文字列値を日付に変換できます。

' Convert String to Date
Public Function stringToDate(ByRef dateString As String, ByRef dateFormat As String) As Date
    stringToDate = CDate(Format(dateString, dateFormat))
End Function

たとえば、dateFormat は「MM/dd/yyyy」または「dd-MM-yyyy」になります。

于 2013-08-12T18:20:46.187 に答える