Board logo

標題: 如何用vba按條件取代儲存格內容 [打印本頁]

作者: mmggmm    時間: 2011-4-17 03:23     標題: 如何用vba按條件取代儲存格內容

[attach]5375[/attach]請問如何用巨集把A3:I22範圍內和A1:I1內容相同包括空格保留,其他的用X取代
作者: chin15    時間: 2011-4-17 08:46

內容相同包括空格保留,其他的用X取代

內容與什麼相同?
作者: yanto913    時間: 2011-4-17 09:30

本帖最後由 yanto913 於 2011-4-17 09:38 編輯

因為我是初學者所以只會這樣判斷...用了很多And
  1. Sub 取代()
  2. For j = 1 To 9
  3. For i = 3 To 22
  4. If Cells(i, j) <> Cells(1, 1) And Cells(i, j) <> Cells(1, 2) And Cells(i, j) <> Cells(1, 3) And Cells(i, j) <> Cells(1, 4) And Cells(i, j) <> Cells(1, 5) And Cells(i, j) <> Cells(1, 6) And Cells(i, j) <> Cells(1, 7) And Cells(i, j) <> Cells(1, 8) And Cells(i, j) <> Cells(1, 9) Then
  5. Cells(i, j) = "X"
  6. End If
  7. Next i
  8. Next j
  9. End Sub
複製代碼

作者: oobird    時間: 2011-4-17 10:43

Sub yy()
a = Join([a1:i1&""])
For Each c In [a3:i22]
If InStr(a, c) = 0 Then c.Value = "x"
Next
End Sub
作者: mmggmm    時間: 2011-4-17 19:47

oobird :
  測試了你給的,其中E21中"L"未能取代,叧請問a = Join([a1:i1&""])
直接填上"A","B","C",....""代替Join([a1:i1&""])如何
寫,謝謝
作者: Hsieh    時間: 2011-4-17 22:00

  1. Sub ex()
  2. For Each a In [A3:I22]
  3. If a <> "" And IsError(Application.Match(a, [A1:I1], 0)) Then a.Value = "X"
  4. Next
  5. End Sub
複製代碼

作者: oobird    時間: 2011-4-17 22:05

Sub yy()
For Each c In [a3:i22]
If [a1:i1].Find(c, , , 1) Is Nothing Then c.Value = "x"
Next
End Sub
作者: yourstory    時間: 2011-5-8 07:17

本帖最後由 yourstory 於 2011-5-8 07:49 編輯

請問 Hsieh 版大大~為何我將你的語法改成下面這樣…會出現階段錯誤13...型態不符合呢??
改成符合條件就打勾勾,這樣不行嗎??...一頭霧水中.....
執行後目標儲存格有打勾勾說…但是會出現型態不符合…怎會這樣@@
該如何改...麻煩會的大大教一下~感激不盡唷

Sub ex()
For Each a In [A3:I22]
If a <> "" And Application.Match(a, [A1:I1], 0) Then a.Value = "v"
Next
End Sub
作者: GBKEE    時間: 2011-5-8 09:11

本帖最後由 GBKEE 於 2011-5-8 09:14 編輯

回復 8# yourstory
If a <> "" And Application.Match(a, [A1:I1], 0) Then a.Value = "v"  是簡化後的寫法
正式的寫法   If a <> "" And Application.Match(a, [A1:I1], 0)=True Then a.Value = "v"  

Application.Match(a, [A1:I1], 0)) =>找到時傳回數字 Excel 自動轉換數字大於0 為 True  正確可行
但當Match找不到時傳回錯誤值  #Na      所以會有資料型態不符的錯誤產生
請修正如下
  1. Sub ex()
  2. For Each a In [A3:I22]
  3.     If a <> "" And IsNumeric(Application.Match(a, [A1:I1], 0))=True Then a.Value = "v"  '正式的寫法
  4.     ' If a <> "" And IsNumeric(Application.Match(a, [A1:I1], 0)) Then a.Value = "v"        '簡化的寫法
  5. Next
  6. End Sub
複製代碼

作者: yourstory    時間: 2011-5-8 10:12

謝謝 GBKEE 大大解答...終於解決了^^...
又學了一課~~謝謝哩




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