2017-09-26 7 views
0

Excel-2010とExcel-2013で動作します。私は以下のようなことをしたい。Excelで特定のセルを計算する

セルに入力する数字が何であっても、その数値は60で割り切れなければならず、結果はTabキーを押すと同じセルに印刷されます。私がこのセルに戻ってくると、計算結果ではなく、入力した数値が再び現れるはずです。

私はKresimir L hereから素敵な答えを得ました。しかし私は自分の要求に彼の論理を適用することができません。私のExcelシートは、以下のようになります。

I want like this

ユーザーが指定した日付に対する彼の努力を入力する必要があります。 (現在の色分けは無視してください)。たとえば、ユーザがを入力した場合、特定の日付に対して45分を意味する場合、このセルは0.75に変換され、時間形式になります。この計算は、12,14,16,18,20行目以外のすべての行では必要ないことに注意してください。

もう1つのことは、このワークシートは2017年です。この同じテクニックを次の年に適用する必要がありますまた、したがって、この式を複数のワークシートで使用するにはどうしたらよいですか?

Excelでのプログラミングについてよくわかりません。私は会社のセキュリティポリシーのためにサイトのほとんどを開くことができません。

誰でもこの手伝いをすることができますか?

+0

*このセルに戻った場合、計算結果ではなく、入力した数値が再表示されます。* - この部分は非常に実装が難しく、VBAといくつかの拡張機能があなたはそれをキャプチャする必要がありますどのように多くの変更やSOのQ&Aフォーラムの範囲外ですすべてのもの。 –

+0

@ScottHoltzman - これは複雑になりますが、前の番号を別の(おそらく隠された)ワークシートに格納する 'Worksheet Change /' Selection'はどうでしょうか? @OP - セルで 'TAB'の代わりに' ENTER'を押すとどうなりますか? – BruceWayne

+0

なぜセルを出るときに変換する必要がありますか?入力したままにしておくのはなぜですか? –

答えて

0

私は複数の輝きの助けを借りてこの解決策を達成することができました。さまざまな人々からの異なる答えを集め、以下の答えを形成しました。本当に必要な人の参照のための投稿。

Option Explicit 

Dim DivRg1, DivRg2, DivRg As Range 

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error Resume Next 
    Set DivRg1 = Sheet14.Range(Cells(10, 1), Cells(10, 20)) 
    Set DivRg2 = Sheet14.Range(Cells(12, 1), Cells(12, 20)) 
    Set DivRg = Application.Union(DivRg1, DivRg2) 
    'For Each element In DivRg 
     'MsgBox element 
    'Next 
    If (Target > 2) Then 
     Application.EnableEvents = False 
     Target = Target/60 
     Target = WorksheetFunction.Floor(Target, 0.01) 'Rounding the result to two decimals 
     'Target.Offset(0, 5).Value = 1 
     Application.EnableEvents = True 
    End If 
    Set DivRg = Nothing 
End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    On Error Resume Next 
    Set DivRg1 = Sheet14.Range(Cells(10, 1), Cells(10, 20)) 
    Set DivRg2 = Sheet14.Range(Cells(12, 1), Cells(12, 20)) 
    Set DivRg = Application.Union(DivRg1, DivRg2) 

    Dim iSect As Range 
    Set iSect = Application.Intersect(Target, DivRg) 'Here, iSect gives me the value in the cell 
    If Not (iSect Is Nothing) And (iSect < 2#) Then 
     Application.EnableEvents = False 
     iSect = iSect * 60 
     If (iSect = 0) Then iSect = Empty 
     Application.EnableEvents = True 
    End If 
    Set DivRg = Nothing 
End Sub 
関連する問題