Board logo

標題: [發問] (已解決)使用自動篩選修改資料 [打印本頁]

作者: freeffly    時間: 2011-8-26 13:30     標題: (已解決)使用自動篩選修改資料

本帖最後由 freeffly 於 2012-2-22 16:59 編輯

如果我想用自動篩選的方式選出符合的條件然後再做修改
程式碼要如何寫?

Sheet1的資料是要修改的部份
條件就是符合Sheet2的品號(A欄)就將Sheet1 A欄符合的部份對應的B欄資料也要一樣
如果用迴圈資料多時會花很多時間
自己知道的方法目前還不知道如何用自動篩選的情況下修改




[attach]7593[/attach]
作者: GBKEE    時間: 2011-8-27 15:54

回復 1# freeffly
錄製新巨集: 自動篩選 練習 試試看
作者: Hsieh    時間: 2011-8-28 10:57

試看看
  1. Sub ex()
  2. Dim Rng As Range
  3. Application.ScreenUpdating = False
  4. Set d = CreateObject("Scripting.Dictionary")
  5. With 工作表2
  6.    For Each a In .Range(.[A2], .[A2].End(xlDown))
  7.       d(a.Value) = a.Offset(, 1).Value
  8.    Next
  9. End With
  10. With 工作表1
  11. If .AutoFilterMode = False Then .Range("A:B").AutoFilter
  12. For Each ky In d.keys
  13.    .Range("A:B").AutoFilter 1, ky
  14.    Set Rng = .AutoFilter.Range.Offset(1, 0).Columns(2).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants)
  15.    If Rng.Count > 0 Then Rng = d(ky)
  16. Next
  17. .Range("A:B").AutoFilter
  18. End With
  19. Application.ScreenUpdating = True
  20. End Sub
複製代碼
回復 1# freeffly
作者: freeffly    時間: 2011-9-1 14:54

回復 3# Hsieh

     大大謝謝
    SpecialCells(xlCellTypeVisible)   重點是這各嗎 可見的儲存格
     
        其他的簡略方式還看不太懂
         
       先消化一下好進一步發問
作者: freeffly    時間: 2011-11-1 10:46

回復 3# Hsieh


    版主大人我查看了幾次有一些不太了解
   Set d = CreateObject("Scripting.Dictionary")   這各的意思是什麼 ()裡面的意思又是什麼?
     For Each a In .Range(.[A2], .[A2].End(xlDown)) 這句為什麼Range的前面要加.()裡面的[]前面也要加.?
    d(a.Value) = a.Offset(, 1).Value 這句不太懂

   If .AutoFilterMode = False Then .Range("A:B").AutoFilter  沒用過這種方式(.Range("A:B").AutoFilter)做自動篩選有沒有限制
   .Range("A:B").AutoFilter 1, ky 這句不懂

   Set Rng = .AutoFilter.Range.Offset(1, 0).Columns(2).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants) 這句的意思?

   很抱歉拖這麼久才提問,而且還問了這麼多,希望版主幫忙回答依下
作者: freeffly    時間: 2011-11-1 11:28

回復 3# Hsieh


    Selection.AutoFilter Field:=14, Criteria1:="<>1"
    Range("N5:N" & Range("C65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants).ClearContents

   請問我用這種方式有達到我要的結果
  但是不確定是不是正確的用法
作者: Hsieh    時間: 2011-11-1 20:36

回復 5# freeffly


    Sub ex()
Dim Rng As Range
Application.ScreenUpdating = False
Set d = CreateObject("Scripting.Dictionary")  '創建一個字典物件
With 工作表2
   For Each a In .Range(.[A2], .[A2].End(xlDown))  '在A2以下儲存格做迴圈
      d(a.Value) = a.Offset(, 1).Value  '以a的值作為索引,a的右側儲存格的值加入字典物件
   Next
End With
With 工作表1
If .AutoFilterMode = False Then .Range("A:B").AutoFilter  '假如工作表非自動篩選狀態,就執行A:B欄資料自動篩選
For Each ky In d.keys  '以字典物件的索引做迴圈
   .Range("A:B").AutoFilter 1, ky    'A:B欄自動篩選,以第一欄(A欄),準則為字典物件索引值做篩選
   Set Rng = .AutoFilter.Range.Offset(1, 0).Columns(2).SpecialCells(xlCellTypeVisible).SpecialCells(xlCellTypeConstants)  '自動篩選範圍向下一列的第2欄中所有可見儲存格並且是非空格的部分賦予變數Rng
   If Rng.Count > 0 Then Rng = d(ky)  '如果Rng這個範圍的儲存格數量大於零,表示有此準則資料,就將這些儲存格填入以ky為索引值的字典內容
Next
.Range("A:B").AutoFilter  '解除自動篩選
End With
Application.ScreenUpdating = True
End Sub
作者: freeffly    時間: 2011-11-3 14:06

回復 7# Hsieh


    謝謝版主大人回覆
   雖然已經用中文解說
   但是有一些東西沒概念
   先收下學習
   感恩
作者: bgtsai    時間: 2012-2-9 12:54

我使用後
For Each a In .Range(.[A2], .[A2].End(xlDown))
這一句會發生錯誤(此處需要物件)
請問是哪出了問題?
作者: freeffly    時間: 2012-2-10 15:56

回復 9# bgtsai


    我使用是可以運作
   你要不要附上檔案看看
作者: GBKEE    時間: 2012-2-10 16:32

回復 9# bgtsai
這一句會發生錯誤(此處需要物件)
   
  1. With 工作表2  '<- 物件在這裡
  2.    For Each a In .Range(.[A2], .[A2].End(xlDown))  '在A2以下儲存格做迴圈'
  3. '   
  4. ' d(a.Value) = a.Offset(, 1).Value  '以a的值作為索引,a的右側儲存格的值加入字典物件
  5.    Next
  6. End With
複製代碼





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