0

問題

ワークシートの日付フィールドから、配列に格納されている 1 ~ 3 桁の数値を減算したいと考えています。数値の絶対値を取得し、負の 1 を掛けてから、DateAdd 関数を使用して演算を実行します。エラー メッセージは表示されませんが、配列の値はプロセスで最初に送信された正確な 1 ~ 3 桁の数値のままです。

列 C は、現在の結果から得られるものです。

        A        B        C
1  1/8/09       54       54
2  3/3/11        1        1
3  8/1/10      132      132 

コード

If delType = "Numeric" Then
    ElseIf delChars = 3 Or delChars = 2 Or delChars = 1 Then
         del(i, 1) = Abs(del(i, 1))
         del(i, 1) = del(i, 1) * -1
         del(i, 1) = DateAdd("d", del(i, 1), Range("E" & i + 1))
         'I did confirm that this case is actually working 
         'by setting the above line to del(i,1) = "Digits" and
         'received "Digits" for all entries with 1 to 3 numeric digits.
    End If
End If
4

4 に答える 4

1

Excel の日付は、特定の日付からの日数として保存されます。ワークシートで列 A から列 B を直接差し引くことができます。VBA は必要ありません。結果を日付としてフォーマットするだけです。

于 2012-11-07T19:39:28.593 に答える
1

あなたのコードはそれを示していませんが、私の疑いは、配列が整数として扱われてOn Error Resume Nextおり、コードに含まれていることです。

日付が整数には大きすぎるため、情報は置き換えられません。

これを試して効果を確認してください

Sub test()
On Error Resume Next
Dim i As Integer
i = Now()
Debug.Print i
End Sub

エラー (非) 処理を行うと、 の結果が得られます0i=Now()エラー処理を行わないと、オーバーフロー エラーで Excel が停止します。

于 2012-11-07T19:53:34.940 に答える
1

Tim のコードは、実際には A.Webb の最初のコメントの概念に基づいています。

与えられた日付、DAYS はそれぞれ A、B 列にあり、列 C に回答を出力できます。実際には、列 A と B の両方を 1 つの 2 次元配列または 2 つの 1 次元配列に読み取ることができ、1 つの名前付きセルを次のように使用します。対話する必要があるすべてのセルへの参照ポイント。これにより、セルに依存しない/動的なプロセスが可能になります。繰り返しになりますが、問題はかなり小さいようです-Excelのデータ/DATES形式に奇妙な影響を与える特定のベンダーのExcelアドインに対処する必要がない限り. UDF を使用することはお勧めしません。これは BIG 操作フローの一部であるため、これをデータ操作クラス/モジュールの下にラップして、小さくても重要なデータの「マッサージ」をすべて行うことができます。また、大きなワークブックで DATES を使用する場合は、シートのパフォーマンスに注意してください。

非常にマイナーな提案:

arr(x, 1) = Abs(arr(x, 1)) - Range("B1").Offset(x - 1, 0).Value
于 2012-11-08T07:52:57.910 に答える
1
Sub Tester()

    Dim arr, x

    arr = Range("A1:A3").Value 'values to be subtracted


    For x = 1 To UBound(arr, 1)
        ' "base" date is in A5
        arr(x, 1) = Range("A5").Value - Abs(arr(x, 1))
    Next x

    With Range("D1:D3")
        .NumberFormat = "m/d/yyyy"
        .Value = arr 'dump values back to sheet
    End With

End Sub
于 2012-11-08T01:37:54.473 に答える