Board logo

標題: 有條件取代儲存格內容 [打印本頁]

作者: mmggmm    時間: 2011-6-23 12:03     標題: 有條件取代儲存格內容

[attach]6762[/attach]請問可否解決這問題
作者: luhpro    時間: 2011-6-28 22:54

回復 1# mmggmm
1. 你的程式有設密碼, 所以看不到原始碼, 不能參照原始碼做修改
2. 敘述中的 :

請問可否改為SHEET"POST"O2:O10名單保留
SHEET"POST"O11:O45名單設定有"NO"和 "YES"
如果在SHEET"POST"G:G為"NO"則屬"YES"保留其他用"X"取代


中看不出來 "NO"和 "YES" 兩者有什麼不同.

而你所舉範例的 H7:AL7 只有 E08、O 與 A 三種值,
A 與 O 是你說要 "保留" 的部份,
而 E08 則屬於 "NO" 的部份,
其中沒有 "YES" 部分的範例資料.

所以無從下手修改.
作者: mmggmm    時間: 2011-6-30 16:27

[attach]6886[/attach]
作者: GBKEE    時間: 2011-7-1 09:28

回復 3# mmggmm
"如果在SHEET"POST"G:G為"NO"則屬"YES"保留其他用"X"取代"
這句話可以再白話些嗎?
作者: mmggmm    時間: 2011-7-1 12:53

[attach]6890[/attach]其實我原是用兩表分別執行,現想兩表一次執行巨集完成
作者: GBKEE    時間: 2011-7-1 18:30

回復 5# mmggmm
是這樣嗎?
  1. Sub Ex()
  2.     Dim Ay(1), Y
  3.     With Sheets("POSIT")
  4.         Ay(0) = Application.Transpose(.Range("O2:O" & .Range("O" & Rows.Count).End(xlUp).Row))
  5.         Ay(1) = Application.Transpose(.Range("P2:P" & .Range("P" & Rows.Count).End(xlUp).Row))
  6.     End With
  7.     For Each A In ActiveSheet.[H3:AL400]
  8.         Y = Application.Match(A, Ay(0), 0)
  9.         If IsError(Y) Then
  10.             A.Value = "X"
  11.         ElseIf Y > 0 And Cells(A.Row, "G") <> Ay(1)(Y) Then
  12.             A.Value = "X"
  13.         End If
  14.     Next
  15. End Sub
複製代碼

作者: mmggmm    時間: 2011-7-2 11:12

GBKEE :
我目的是將"NO"和"YES"兩頁合併在一頁執行取代,可能兩頁各有不同條件取代而變得複雜了,請看看附件中我在"POSIT"中的說明是否明白一些.[attach]6896[/attach]
作者: GBKEE    時間: 2011-7-3 11:24

本帖最後由 GBKEE 於 2011-7-3 11:26 編輯

回復 7# mmggmm
此區(P16:Q24)在執行巨集後必定保留
不管sheet"Meals"G:G是屬"YES" "NO" 都保留嗎?

Q2:Q14 是NO     ->sheet"Meals"G:G是屬"YES"必定保留
Q25:Q36 是YES  ->sheet"Meals"G:G是屬"NO"必定保留
請問POSIT 的P欄所有資料會重復嗎?
P15:Q15為何是空白的
作者: mmggmm    時間: 2011-7-3 19:51

GBKEE:
P欄資料不會重復,P15:Q15可以刪除,因為先前是有資料的.謝謝
作者: GBKEE    時間: 2011-7-3 20:40

回復 9# mmggmm
依據 7樓附檔修改的
  1. Sub Ex()
  2.     Dim Ay(1), Y
  3.     With Sheets("POSIT")
  4.         Ay(0) = Application.Transpose(.Range("P2:P" & .Range("P" & Rows.Count).End(xlUp).Row))
  5.         Ay(1) = Application.Transpose(.Range("Q2:Q" & .Range("O" & Rows.Count).End(xlUp).Row))
  6.     End With
  7.     For Each A In ActiveSheet.[H3:AL400]
  8.         Y = Application.Match(A, Ay(0), 0)
  9.         If IsError(Y) Then
  10.             A.Value = "X"
  11.         ElseIf Y > 0 Then
  12.             If (Y <= 14 Or Y >= 24) And Cells(A.Row, "G") = Ay(1)(Y) Then A.Value = "X"
  13.         End If
  14.     Next
  15. End Sub
複製代碼

作者: mmggmm    時間: 2011-7-3 22:25

GBKEE :
謝謝,請問H3:AL400內如是空格亦保留,請問如何?
作者: GBKEE    時間: 2011-7-4 07:18

回復 11# mmggmm
  1. Sub Ex()
  2.     Dim Ay(1), Y As Integer, A As Range
  3.     With Sheets("POSIT")
  4.         Ay(0) = Application.Transpose(.Range("P2:P" & .Range("P" & Rows.Count).End(xlUp).Row))
  5.         Ay(1) = Application.Transpose(.Range("Q2:Q" & .Range("O" & Rows.Count).End(xlUp).Row))
  6.     End With
  7.     For Each A In ActiveSheet.[H3:AL400]
  8.         If A <> "" Then
  9.             Y = Application.Match(A, Ay(0), 0)
  10.             If IsError(Y) Then
  11.                 A.Value = "X"
  12.             ElseIf Y > 0 Then
  13.                 If (Y <= 14 Or Y >= 24) And Cells(A.Row, "G") = Ay(1)(Y) Then A.Value = "X"
  14.             End If
  15.         End If
  16.     Next
  17. End Sub
複製代碼

作者: mmggmm    時間: 2011-7-4 22:24

[attach]6908[/attach]
[attach]6909[/attach]
GBKEE :執行後現以上情況
作者: GBKEE    時間: 2011-7-5 09:07

回復 13# mmggmm
Dim Ay(1), Y As Integer, A As Range
Y為數字型態是Integer
Y不為數字則傳回 錯誤值 "#NA"
固須改為   As Variantr 沒被明確宣告為其他型態
作者: mmggmm    時間: 2011-7-5 21:33

GBKEE :
   請問As Variantr 和 As Variant 有何分別因為改為 As Variant 就ok了
作者: GBKEE    時間: 2011-7-6 09:02

本帖最後由 GBKEE 於 2011-7-6 10:15 編輯

回復 15# mmggmm
更正是 As Variant 不是  As Variantr  是我不太用心!!  
PS:感謝 oobird 版主指正




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