2016-09-03 7 views
0

私は、次のVBAコードを=合計

Sub CopyDataByDay() 
    Dim data As Range 
    Dim today As Date 

    Set data = ThisWorkbook.Worksheets(1).Range("A1") 
    today = Date 

    If (Weekday(today) = vbMonday) Then 
     ThisWorkbook.Worksheets(1).Range("B1") = data.Value 
    ElseIf (Weekday(today) = vbTuesday) Then 
     ThisWorkbook.Worksheets(1).Range("B2") = data.Value 
    ElseIf (Weekday(today) = vbWednesday) Then 
     ThisWorkbook.Worksheets(1).Range("B3") = data.Value 
    ElseIf (Weekday(today) = vbThursday) Then 
     ThisWorkbook.Worksheets(1).Range("B4") = data.Value 
    ElseIf (Weekday(today) = vbFriday) Then 
     ThisWorkbook.Worksheets(1).Range("B5") = data.Value 
    ElseIf (Weekday(today) = vbSaturday) Then 
     ThisWorkbook.Worksheets(1).Range("B6") = data.Value 
    End If 

    data.Value = "" 
End Sub 

を使用しています。しかしA1に、私は、このVBAを使用するたびに削除される=sumを持っています。 A1=sumを削除するにはどうすればよいですか?

+0

のように書くことができ、非常に大きなループをしていました'、何が起こっているはずですか? – GSerg

+0

あなたのコードは複数の 'If'と' ElseIf'の代わりに 'Select Case'のために"悲鳴を上げる "のです。 –

答えて

3

あなたはこの行を削除

data.Value = ""

+0

ありがとう私はVBAを使い始めました。 –

1

常に定義してシートオブジェクトを参照しようとする必要があります。 はまた、Select Caseを使用して、それを多くのことを簡素化:

Sub CopyDataByDay() 

Dim sht As Worksheet 
Dim data As Range 
Dim today As Date 

Set sht = ThisWorkbook.Worksheets(1) 

Set data = sht.Range("A1") 
today = Date 

With sht 

    Select Case Weekday(today) 
     Case vbMonday 
      .Range("B1") = data.Value 

     Case vbTuesday 
      .Range("B2") = data.Value 

     Case vbWednesday 
      .Range("B3") = data.Value 

     Case vbThursday 
      .Range("B4") = data.Value 

     Case vbFriday 
      .Range("B5") = data.Value 

     Case vbSaturday 
      .Range("B6") = data.Value 

    End Select 

End With 

End Sub 
4

これは@Vahidが既に問題が何であるかを指摘しているように、質問に答えるための試みではありません。これは、簡潔なコードの記述方法の詳細です。pointerです。ここで

vbMondayの値が2とvbSaturdayであること

Sub Sample() 
    Dim data As Range 
    Dim i As Long 

    With ThisWorkbook.Worksheets(1) 
     Set data = .Range("A1") 

     For i = 2 To 7 
      If Weekday(Date) = i Then .Range("B" & i - 1) = data.Value 
     Next i 
    End With 
End Sub 

注7です。ですから、実際にそれのためにループを書くことができ、あなたのコードを書くための最短の方法です。

は、さてあなたは明示的に `data.Value = "" であなたの` A1`をクリアしているライン

If Weekday(Date) = i Then .Range("B" & i - 1) = data.Value 

If Weekday(Date) = i Then .Range("B" & i - 1) = data.Value: Exit For 
+2

[いいループではありません](https://blogs.msdn.microsoft.com/oldnewthing/20111227-00/?p=8793/)。あなたが必要とするのは、 '平日(日)の場合はvbSunday、次に.Range(" B1 ")、オフセット(平日(日付)-2).Value = data.Value'です。 – GSerg

+0

私はリンクをチェックしますが、あなたが与えたコードはさらに優れています:) –

関連する問題