0

車の走行距離を記録するスプレッドシートに取り組んでいます。F6 で開始走行距離を、G6 で終了走行距離を手動で入力したいと思います。G6 の値が自動的に F7 にコピーされ、G7- などに終了走行距離を入力したいと思います。私が抱えている問題は、2 つまたは 3 つの空白セルが発生する可能性がある週末と祝日の処理です。のようなものを使ってみまし=if(D9=""," ", G6)たが、うまくいきません。

また、VBA でこの関数を試してみました: =IF(D9=""," ",LastNonBlankCell(G8:G39))[D9 is a datefield] で、最終的には 0 しかありませんでした。

Function LastNonBlankCell(Range As Excel.Range) As Variant

    Application.Volatile

    LastNonBlankCell = Range.End(xlDown).Value

End Function
4

2 に答える 2

0

週末や祝日の空白行は本当に必要ですか? D8そうでない場合は、数式に設定し、=workday.intl(D7,1)必要なだけコピーします。休日を考慮する必要がある場合は、 の Excel ドキュメントを参照してくださいWORKDAY.INTL。日付のリストには営業日のみが含まれるようになり、特別な処理なしで 1 つの行の終了走行距離を次の行にコピーできます。

これにより、土日祝日が一目でわかりにくくなっています。これは、条件付き書式を使用して対処できます。範囲の書式設定を設定しD8:D<whatever>、式を使用して=D8>(D7+1)、書式設定を自分にとってわかりやすいものに設定します。

于 2013-02-08T03:35:16.100 に答える
0

次の VBA マクロは、質問したものとは少し異なる方法で最終目標を達成します。

マクロをインストールした後、列 G のセルをダブルクリックすると、マクロは最後に入力された走行距離を列 F の左側のセルにコピーします。

たとえば、最後の終了マイレージ エントリがセル G6 にあり、セル G9 をダブルクリックすると、そのエントリがセル F9 にコピーされます。その後、セル G9 に新しい終了マイレージを入力できます。

  Private Sub WorkSheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

     If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
        Selection.Offset(0, -1).Value = Selection.End(xlUp).Value
     Else
        Exit Sub
     End If

  End Sub

マクロをインストールするには、ワークシートの名前タブを右クリックし、[コードの表示] を選択して、マクロ コードを貼り付けます。コードを通常のモジュールに入れると機能しません。

于 2013-02-08T19:05:09.333 に答える