Board logo

標題: 可以幫我解一下嗎???3Q [打印本頁]

作者: color790    時間: 2010-8-16 19:37     標題: 可以幫我解一下嗎???3Q

本帖最後由 color790 於 2010-8-17 00:01 編輯

1.當B欄這一行由正轉負且絕對值大於5(ex. abs(B10-B9) = 6)
2.當負值開始變大時(ex. B13)
3.對應到A欄 步驟1 - 步驟2 (ex. C10= A10-A13)
4. 則為上面步驟相反(當B欄這一行由負轉正且絕對值大於5(ex.B15)--->正值開始變小(ex. B19)--->對應到A欄 步驟2 - 步驟1(ex. C19 - C15)

以下是我寫的,也是無法執行,可以幫我修改一下嗎?
Sub bbb()
For i = 3 To Worksheets("sheet1").Range("A1").End(xlDown).Row
j = i + 1
If Cells(i - 1, 2) < 0 And Cells(i, 2) > 0 And Abs(Cells(i - 1, 2) - Cells(i, 2)) > 5 Then
Do Until Cells(j, 2) < Cells(i, 2)
Cells(i, 3) = Cells(j, 1) - Cells(i, 1)
Else
If Cells(i - 1, 2) > 0 And Cells(i, 2) < 0 And Abs(Cells(i, 2) - Cells(i - 1, 2)) > 5 Then
Do Until Cells(j, 2) >Cells(i, 2)
Cells(i, 3) = Cells(i, 1) - Cells(j, 1)
End If
End If
Next

End Sub
作者: Hsieh    時間: 2010-8-16 23:29

試試看
  1. Sub nn()
  2. r = 2: yn = 1
  3. Do Until r > [B65536].End(xlUp).Row
  4. Do While Cells(r, 2) * yn > 0 Or Abs(Cells(r, 2)) < 5
  5. r = r + 1
  6. Loop
  7. Set x = Cells(r, 1)
  8. Do While Cells(r, 2) * yn < 0 And Cells(r, 2) * yn < Cells(r - 1, 2) * yn
  9. r = r + 1
  10. Loop
  11. Set y = Cells(r, 1)
  12. x.Offset(, 2) = (x - y) * yn
  13. yn = yn * -1
  14. Loop
  15. End Sub
複製代碼

作者: color790    時間: 2010-8-16 23:47

HI~感謝版主的回覆
在C20,C25時位置跔掉,應該在C19,C24,另外...按照RULE應該是C19=A19-A21
可以再幫我修改嗎?另外....可以幫我解釋一下嗎??感恩感恩
作者: Hsieh    時間: 2010-8-17 00:29

回復 3# color790
B19跟B24絕對值是小於5阿
其中只是yn變數用來反轉正負值
這樣你去比較不同處應該可以明瞭
  1. Sub nn()
  2. r = 2: yn = 1
  3. Do Until r > [B65536].End(xlUp).Row
  4. Do While Cells(r, 2) * yn > 0 'Or Abs(Cells(r, 2)) < 5
  5. r = r + 1
  6. Loop
  7. Set x = Cells(r, 1)
  8. Do While Cells(r, 2) * yn < 0 And Cells(r, 2) * yn < Cells(r - 1, 2) * yn
  9. r = r + 1
  10. Loop
  11. Set y = Cells(r, 1)
  12. x.Offset(, 2) = (x - y) * yn
  13. yn = yn * -1
  14. Loop
  15. End Sub
複製代碼

作者: color790    時間: 2010-8-17 22:58

本帖最後由 color790 於 2010-8-17 23:00 編輯

HI~版主
我的意思是紅色那一段是必需的,而且要上下相減的絕對值>5,但我改這樣卻會出現錯誤?
可以再請您幫我修改一下嗎?
Sub nn()
r = 2: yn = 1
Do Until r > [B65536].End(xlUp).Row
Do While Cells(r, 2) * yn > 0 And Abs(Cells(r, 2) - Cells(r - 1, 2)) > 5
r = r + 1
Loop
Set x = Cells(r, 1)
Do While Cells(r, 2) * yn < 0 And Cells(r, 2) * yn < Cells(r - 1, 2) * yn
r = r + 1
Loop
Set y = Cells(r, 1)
x.Offset(, 2) = (x - y) * yn
yn = yn * -1
Loop
End Sub
作者: Hsieh    時間: 2010-8-18 00:08

回復 5# color790
  1. Sub nn()
  2. r = 2: yn = 1
  3. Do Until r > [B65536].End(xlUp).Row
  4. Do While Cells(r, 2) * yn > 0 Or Abs(Cells(r, 2) - Val(Cells(r - 1, 2))) < 5
  5. r = r + 1
  6. Loop
  7. Set x = Cells(r, 1)
  8. Do While Cells(r, 2) * yn < 0 And Cells(r, 2) * yn < Cells(r - 1, 2) * yn
  9. r = r + 1
  10. Loop
  11. Set y = Cells(r, 1)
  12. x.Offset(, 2) = (x - y) * yn
  13. yn = yn * -1
  14. Loop
  15. End Sub
複製代碼

作者: color790    時間: 2010-8-18 00:47

本帖最後由 color790 於 2010-8-18 12:55 編輯

感謝版主的幫忙,這麼晚了還幫我修改...^^
真的沒問題了!!
另外請問版主一下
Or Abs(Cells(r, 2) - Val(Cells(r - 1, 2))) < 5
1.為什麼要用or , Val  ?
2.為什麼上下相減的絕對值>5 , 公式卻是寫<5
作者: Hsieh    時間: 2010-8-18 16:23

1.用Val是避免儲存格為文字造成錯誤
2.用or 跟寫<5,那是要不成立的狀況
作者: color790    時間: 2010-8-19 00:06

喔~~原來如此
感恩不盡




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