Board logo

標題: [發問] 請指導VBA語法,謝謝 [打印本頁]

作者: idnoidno    時間: 2015-4-15 23:14     標題: 請指導VBA語法,謝謝

資料如表格,計算某年某月的日平均量。
I2和J2填入後,自動搜尋數據(當然數據可以再逐筆增加)可以在K2得到答案


Sub finddate()
myrows = Worksheets("工作表1").Cells(Rows.Count, 1).End(x1down).Row
For i = 2 To myrows
    If Year(Cells(i, 1)) = Cells(2, 9).Value And Month(Cells(j, 1)) = Cells(2, 10).Value Then
        Cells(2, 12) = Cells(i, 2)
    End If
Next
End Sub
作者: idnoidno    時間: 2015-4-15 23:26

資料如表格,計算某年某月的日平均量。
I2和J2填入後,自動搜尋數據(當然數據可以再逐筆增加)可以在K2得到 ...
idnoidno 發表於 2015-4-15 23:14


補上附件
作者: lpk187    時間: 2015-4-16 10:20

回復 2# idnoidno
試試
  1. Sub finddate()
  2. myrows = Worksheets("工作表1").Cells(Rows.Count, 1).End(xlUp).Row
  3. 日期 = [i2] & "/" & [j2]
  4. For i = 2 To myrows
  5.     If 日期 = Format(Cells(i, "A"), "yyyy/mm") Then
  6.         Cells(2, 12) = Cells(i, 2)
  7.     End If
  8. Next
  9. End Sub
複製代碼

作者: PKKO    時間: 2015-4-16 11:50

回復 1# idnoidno
若你所謂的日平均指的是每個人的抄表數字
則可使用此程式碼,引用樓上大大的程式碼做增加
  1. Sub finddate()
  2. myrows = Worksheets("工作表1").Cells(Rows.Count, 1).End(xlUp).Row
  3. 日期 = [i2] & "/" & [j2]
  4. For i = 2 To myrows
  5.     If 日期 = Format(Cells(i, 1), "yyyy/mm") Then
  6.         temp = 0
  7.         For j = 2 To 7
  8.             temp = temp + Cells(i, j)
  9.         Next
  10.         [k2] = temp / 6
  11.     End If
  12. Next
  13. End Sub
複製代碼

作者: idnoidno    時間: 2015-4-16 11:53

收到,消化中,不過真的沒想到這樣可以處理喔,真的十分謝謝
作者: idnoidno    時間: 2015-4-16 13:30

請問樓上兩位大大
我TRY的結果
日期好像比對不出來耶
是不是我哪邊有狀況沒處理呢
作者: idnoidno    時間: 2015-4-16 13:37

我的意思是
日期 = Format(Cells(i, "A"), "yyyy/mm")
測試結果好像比對不出來
作者: idnoidno    時間: 2015-4-16 13:48

Format(Cells(i, "A"), "yyyy/mm")
運算出來是2014/03
日期是2014/3
所以比對不出來
作者: lpk187    時間: 2015-4-16 13:50

本帖最後由 lpk187 於 2015-4-16 13:52 編輯

回復 7# idnoidno

下圖是你上傳的檔案沒修改過,
可以比對成功
裡面我多一個變數"A欄儲存格"是觀察變數用的,可刪除
    [attach]20669[/attach]
作者: lpk187    時間: 2015-4-16 13:55

本帖最後由 lpk187 於 2015-4-16 13:56 編輯

回復 8# idnoidno


    若不要0X月,也可以"yyyy/m"
就會是3月了不會是03月,10月也會是10月
作者: lpk187    時間: 2015-4-16 14:00

回復 8# idnoidno

讓他比對成功後結束程序Sub
  1. Sub finddate()
  2. myrows = Worksheets("工作表1").Cells(Rows.Count, 1).End(xlUp).Row
  3. 日期 = [i2] & "/" & [j2]
  4. For i = 2 To myrows
  5.     A欄儲存格 = Format(Cells(i, "A"), "yyyy/m")
  6.     If 日期 = Format(Cells(i, "A"), "yyyy/m") Then
  7.         Cells(2, 12) = Cells(i, 2)
  8.         End '加這個End比對成功後就結束程序
  9.     End If
  10. Next
  11. End Sub
複製代碼

作者: idnoidno    時間: 2015-4-16 14:52

謝謝,真的是有問有答有學到
作者: idnoidno    時間: 2015-4-16 15:22

再請益,以下的問題
欄位甲乙丙丁戊等等甚至隨時欄位可再增加時
計算符合日期(EX:2014/8)的"(當月抄表量-前一個月的抄表量)/日數"
把計算甲乙丙丁........的"(當月抄表量-前一個月的抄表量)/日數"計算結果寫到下一個工作表內
的解決方法
小弟正在想如何做,晚點會把初想法PO出
謝謝
作者: idnoidno    時間: 2015-4-16 20:07

  1. Sub caldata()
  2. mysheet1 = Worksheets("工作表1")
  3. mysheet2 = Worksheets("工作表2")
  4. myrow = mysheet1.Cells(Rows.Count, 1).End(x1updown).Row
  5. mycolumn = mysheet2.Cells(1, colunn.Count).End(x1tpleft).Column
  6. mydate = mysheet2.Cells(1.2) & "/" & mysheets.Cells(2.2)
  7. For i = 2 To myrows
  8.     If mydate = Format(Cells(1, "a"), "yyyy/m") Then
  9.      For j = 4 To mycolumn
  10.         mysheet2.cells(1.j)=left(mysheet1.cells(1,j-2),2) & "日平均量"
  11.      Next
  12.     End If
  13. Next
  14. End Sub
複製代碼
回復 13# idnoidno

有點問題
請大大指點
謝謝
作者: idnoidno    時間: 2015-4-16 20:22

  1. Sub caldata()
  2. Dim myrow As Integer
  3. Dim mycolumn As Integer
  4. Dim i As Integer
  5. Dim j As Integer
  6. myrow = Worksheets("工作表1").Cells(Rows.Count, 1).End(xlUp).Row
  7. mycolumn = Worksheets("工作表1").Cells(1, Columns.Count).End(xlToLeft).Column
  8. mydate = Worksheets("工作表2").Cells(1.2) & "/" & Worksheets("工作表2").Cells(2.2)
  9. For i = 2 To myrows
  10.     If mydate = Format(Worksheets("工作表1").Cells(1, i), "yyyy/m") Then
  11.      For j = 4 To mycolumn
  12.         Worksheets("工作表2").Cells(1, j) = Left(Worksheets("工作表1").Cells(1, j - 2), 2) & "日平均量"
  13.         Worksheets("工作表2").Cells(2, j) = Worksheets("工作表1").Cells(1, i + 1)
  14.      Next
  15.     End If
  16. Next
  17. End Sub
複製代碼
前一個有錯
這一個請指正
謝謝
作者: lpk187    時間: 2015-4-16 20:41

回復 15# idnoidno


    For i = 2 To myrows
多了一個S
作者: lpk187    時間: 2015-4-16 20:57

回復 15# idnoidno


    mydate = Worksheets("工作表2").Cells(1.2) & "/" & Worksheets("工作表2").Cells(2. 2)應該最 " , "逗點
作者: idnoidno    時間: 2015-4-16 20:58

請問
一、mydate = mysheet2.Cells(1,2) & "/" & mysheets.Cells(2,2)中,Cells(1,2)和[a2]會不一樣嗎
二、11~13好像沒辦法在工作表運算寫入要的文字
作者: idnoidno    時間: 2015-4-16 21:10

回復 18# idnoidno


    把檔案附上
請幫忙,謝謝
作者: lpk187    時間: 2015-4-16 21:23

回復 19# idnoidno
[A2]=Range("A2")=Cells(2,1),這三種寫法都可以
  1. Sub caldata()
  2. Dim myrow As Integer
  3. Dim mycolumn As Integer
  4. Dim i As Integer
  5. Dim j As Integer
  6. myrow = Worksheets("工作表1").Cells(Rows.Count, 1).End(xlUp).Row
  7. mycolumn = Worksheets("工作表1").Cells(1, Columns.Count).End(xlToLeft).Column
  8. mydate = Worksheets("工作表2").Cells(2, 1) & "/" & Worksheets("工作表2").Cells(2, 2)
  9. For i = 2 To myrow
  10.     If mydate = Format(Worksheets("工作表1").Cells(i, 1), "yyyy/m") Then
  11.      For j = 4 To mycolumn + 2
  12.         Worksheets("工作表2").Cells(1, j) = Left(Worksheets("工作表1").Cells(1, j - 2), 2) & "日平均量"
  13.         Worksheets("工作表2").Cells(2, j) = Format(Worksheets("工作表1").Cells(i + 1, 1), "yyyy/m/d")
  14.      Next
  15.      End '結束程序
  16.     End If
  17. Next
  18. End Sub
複製代碼

作者: lpk187    時間: 2015-4-16 21:30

回復 20# lpk187

執行結果如下,是這樣嗎?
    [attach]20677[/attach]


執行時善用F8單行執行,開啟區域變數視窗來觀察變化會更容易瞭解錯在哪裡!
把不知道的值化成變數來觀察例如:AAA=Left(Worksheets("工作表1").Cells(1, j - 2), 2) & "日平均量"
作者: idnoidno    時間: 2015-4-16 22:35

本帖最後由 idnoidno 於 2015-4-16 22:37 編輯

回復 21# lpk187


剛剛做家事,所以離開
數據是要對應到的月份的(當月超表量減去上一個月的抄表量)除以天數
不是日期
所以我的計算式有點錯誤了




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)