Board logo

標題: [發問] 如何利用Sheet1的Q欄顏色當標準,複製當列之C:E的值至Sheet2 [打印本頁]

作者: 棋語鳥鳴    時間: 2011-6-1 20:23     標題: 如何利用Sheet1的Q欄顏色當標準,複製當列之C:E的值至Sheet2

請問如何複製當Sheet1中的Q欄為紫色時,將其當列ㄉc欄到E欄的值複製至Sheet2的A13:C13,第二個的值貼至A14:C14以此類推,將當列Q欄有紫色部分ㄉC:E貼完,參考檔案在附件,請問此類的巨集該如何寫??[attach]6454[/attach]
作者: mark15jill    時間: 2011-6-2 11:12

本帖最後由 mark15jill 於 2011-6-2 11:14 編輯

回復 1# 棋語鳥鳴
若是要以 有紫色 儲存格的列下去做複製的話
    可以用篩選 先將紫色部分區別開來
    作法
     1.紫色那欄位弄個標題 再從 B欄位 到Q欄位 反白後 按篩選
     2.在有紫色的那欄位 選擇 依色彩篩選 然後選紫色
     3.等到全部篩選出來 在複製 選擇要貼上的活頁簿 貼上即可

附檔的代碼
  1.     Sheets("sheet1").Select   '---- 一開始要複製的活頁簿名稱  此行不加的話  有可能錯亂
  2.     Columns("B:Q").Select   '--------   資料範圍 (包含 顏色的Q欄位)
  3.     Selection.AutoFilter
  4.     ActiveSheet.Range("$B$2:$Q$50").AutoFilter Field:=16, Criteria1:=RGB(112, _
  5.         48, 160), Operator:=xlFilterCellColor
  6.     Range("B3:G32").Select
  7.     Selection.Copy
  8.     Sheets("Sheet4").Select  '-----  要貼上的活頁簿名稱
  9.     Range("G13").Select    '---- 要貼上的最左上角儲存格位置
  10.     ActiveSheet.Paste
  11.     ActiveWindow.SmallScroll Down:=6
  12.     Sheets("Sheet1").Select
  13.     Range("F4").Select
  14.     Application.CutCopyMode = False
  15.     Selection.AutoFilter
複製代碼
附檔內 已經有將其弄成巨集 請試驗看看吧..

[attach]6459[/attach]
作者: 棋語鳥鳴    時間: 2011-6-2 20:16

回復 2# mark15jill


    試驗結果可以!請問我要如何將此巨集改為!一開啟Sheet2就自動執行!
印象中好像是把開頭改成這個即可==>Private Sub Worksheet_Activate()
但是不知道為什麼會出現錯誤??
還是我打錯了??
作者: mark15jill    時間: 2011-6-3 08:37

本帖最後由 mark15jill 於 2011-6-3 10:36 編輯

回復 3# 棋語鳥鳴

已經弄OK了...
但是強烈建議 不要擅改程式碼...不然  嘿嘿嘿嘿嘿嘿(會當掉喔..
這不是我設下的陷阱 而是 擅改的話 會進入死回圈.. 又+上我是寫成 活頁簿活動的狀態 所以..

PS 這個檔案 是可以直接以欄位 下去做篩選 而沒有指定特定的儲存格...
如果要新增 請將 欄位擴充即可...
如 A:P  ->a欄位到 P欄位


有兩種方法可以試驗
1.按鈕 command
2.核選check

代碼如下
  1. '------在sheet1下
  2. Private Sub CheckBox1_Change()
  3. If CheckBox1.Value = True Then
  4.     Columns("A:P").Select
  5.     Selection.AutoFilter
  6.     Range("Q1").Select
  7.     ActiveSheet.Range("$A$1:$P$49").AutoFilter Field:=16, Criteria1:=RGB(112, _
  8.         48, 160), Operator:=xlFilterCellColor
  9.     Columns("A:P").Select
  10.     Range("P1").Activate
  11.     Selection.Copy
  12.     Sheets("Sheet4").Select
  13.     ActiveSheet.Paste
  14.     Sheets("Sheet1").Select
  15.     Selection.AutoFilter
  16.     Sheets("Sheet1").Select
  17.    
  18. End If
  19.         CheckBox1.Value = False
  20.     Columns("A:P").Select
  21.     Range("P1").Activate
  22.     Selection.AutoFilter

  23. End Sub


  24. Private Sub CommandButton1_Click()
  25.     Columns("a:p").Select
  26.     Range("p1").Activate
  27.     Selection.AutoFilter
  28.     Range("q1").Select
  29.     ActiveSheet.Range("$B$1:$Q$50").AutoFilter Field:=16, Criteria1:=RGB(112, _
  30.         48, 160), Operator:=xlFilterCellColor
  31.     Columns("a:d").Select
  32.     Selection.Copy
  33.     Sheets("Sheet4").Select
  34.    
  35.     ActiveSheet.Paste
  36.     Sheets("Sheet1").Select
  37.     Columns("p:p").Select
  38.     Application.CutCopyMode = False
  39.     Selection.Copy
  40.     Sheets("Sheet4").Select

  41.     Application.CutCopyMode = False
  42. Sheets("sheet1").Select
  43.     Columns("a:p").Select
  44.     Range("p1").Activate
  45.     Selection.AutoFilter
  46. End Sub
複製代碼
  1. '-sheet4下

  2. Private Sub Worksheet_Activate()
  3. If Range("a1").Value = "編號" Then
  4.         Columns("F:O").Select
  5.     Selection.ClearContents
  6.     Selection.Delete Shift:=xlToLeft
  7.     Range("A1").Select
  8.     End
  9. End If

  10. End Sub
複製代碼
[attach]6478[/attach]
作者: Hsieh    時間: 2011-6-3 08:49

回復 3# 棋語鳥鳴
  1. Private Sub Worksheet_Activate()
  2. [A:C] = ""
  3.    With Sheets("sheet1")
  4.     .Columns("B:Q").AutoFilter
  5.     .Range("$B$2").CurrentRegion.AutoFilter Field:=16, Criteria1:=RGB(112, _
  6.         48, 160), Operator:=xlFilterCellColor
  7.    .[C:E].SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible).Copy [A12]
  8.    .Columns("B:Q").AutoFilter
  9.    End With
  10. End Sub
複製代碼

作者: 棋語鳥鳴    時間: 2011-6-3 22:49

回復 5# Hsieh
請問第二行A:C是什麼意思??
如果我不要複製到第二列的A   B  C
想直接從C3開始複製,要如何修改(意思就是不要複製C2:E2)???
作者: Hsieh    時間: 2011-6-4 01:13

  1. Private Sub Worksheet_Activate()
  2. [A12:C1048576] = "" '清空先前資料
  3.    With Sheets("sheet1")
  4.     .Columns("B:Q").AutoFilter '自動篩選
  5.     .Range("$B$2").CurrentRegion.AutoFilter Field:=16, Criteria1:=RGB(112, _
  6.         48, 160), Operator:=xlFilterCellColor '篩選顏色
  7.    .Range(.[C3], .[C1048576].End(xlUp).Offset(, 2)).SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible).Copy [A13] '複製可見儲存格到A13
  8.    .Columns("B:Q").AutoFilter '取消自動篩選
  9.    End With
  10. End Sub
複製代碼

作者: 棋語鳥鳴    時間: 2011-6-4 06:42

回復 8# Hsieh
A12:C1048576,1048576不知是不是太多,會出現錯誤!我將它改成C100之後即可用
但是:    .Range("$B$2").CurrentRegion.AutoFilter Field:=16, Criteria1:=RGB(112, _
        48, 160), Operator:=xlFilterCellColor '篩選顏色<==這句不知哪裡出了問題!一直出現偵錯(改不好)??
作者: Hsieh    時間: 2011-6-4 08:29

回復 9# 棋語鳥鳴
2007版本最大列位是1048576沒錯啊,那改成65536試試
如果不是2007以後版本
接下去篩選就不會成立,因為2003版本無法以顏色篩選
若版本正確請將Q欄加上欄名稱
基本上建議EXCEL不要用顏色來統計數值
你的Q欄顏色是用格式化條件而來
應該用條件式來判斷成立與否
作者: 棋語鳥鳴    時間: 2011-6-4 18:54

回復 10# Hsieh


    我是2007版的!不過1048576就是不能??不知是我不是我是用二進位活頁簿的關係!
請問一下為什麼我將這句的.Range(.[C3], .[C1048576].End(xlUp).Offset(, 2)).SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible).Copy [A13]
Range(.[C3], .[C1048576]改成Range(.[C3], .[C47]
為什麼不能到預期的效果,他只複製C2:E2而已,但是將C47改成C100卻能使用??因為在檔案中C48有文字敘述,所以如果用C100會將文字刪掉!,所以能否簡略篩選的範圍??
作者: Hsieh    時間: 2011-6-4 19:54

.[C1048576]是要取得C欄最底下的儲存格,那就改這樣吧
.Range(.[C3], .Cells(.Rows.count,3).End(xlUp).Offset(, 2)).SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeVisible).Copy
作者: 棋語鳥鳴    時間: 2011-6-5 12:09

回復 12# Hsieh

此句好像也是會出現錯誤!
我改了個方式使用!不過:我如果將它改成開啟sheet時立即執行,整個excel就會當掉!如果用成按鈕就不會!是因為裡面有Select的關係嗎?
  1. Sub 測試()
  2. '
  3. ' 測試 Macro
  4. '

  5. '
  6.     Application.ScreenUpdating = False
  7.     Sheets("篩選專區").Visible = xlSheetVisible
  8.     Range("A14:G47").ClearContents
  9.     Sheets("篩選專區").Select
  10.     Range("A13:H60").AutoFilter
  11.     ActiveSheet.Range("$A$13:$H$60").AutoFilter Field:=8, Criteria1:=RGB(112, _
  12.         48, 160), Operator:=xlFilterCellColor
  13.     Range("A14:G29").Copy
  14.     Sheets("總覽").Range("A14").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  15.         :=False, Transpose:=False
  16.     Sheets("篩選專區").Select
  17.     Selection.AutoFilter
  18.     Range("G12").Select
  19.     Sheets("總覽").Select
  20.     Sheets("篩選專區").Visible = xlSheetVeryHidden
  21.     Application.ScreenUpdating = True
  22. End Sub
複製代碼
請問我如果要將此巨集改成,開啟"總覽"工作表時!立即執行,請問要如何改??
作者: Hsieh    時間: 2011-6-5 22:20

回復 12# 棋語鳥鳴 [/

    [attach]6503[/attach]
作者: 棋語鳥鳴    時間: 2011-6-6 16:36

回復 13# Hsieh


    Hsieh 板大:我知道我之所以錯誤在哪了!應該是我的塞選來源是連接的格式!因為我用直接輸入的方式可以!但是利用連結別的數據檔案的!在複製時會出現錯誤!請問這樣要如何改??[attach]6507[/attach]
檔案中Sheet1為Sheet2的連接!sheet4也是要篩選sheet1的檔案!如果Sheet1的來源為手動鍵入的話!巨集不會有問題!但是Sheet1的來源為連結的話!就會出現錯誤??請問這樣要如何改巨集!可以使他在sheet1為連結時可以正常使用??
作者: Hsieh    時間: 2011-6-6 18:37

回復 14# 棋語鳥鳴
  1. Private Sub Worksheet_Activate()
  2. Range([A14], [G14].End(xlDown)) = ""
  3.    With Sheets("sheet1")
  4.    If .AutoFilterMode = False Then .Columns("B:Q").AutoFilter
  5.     .Range("$B$2").CurrentRegion.AutoFilter Field:=16, Criteria1:=RGB(112, _
  6.         48, 160), Operator:=xlFilterCellColor
  7.    .Range(.[C3], .Cells(.Rows.Count, 7).End(xlUp).Offset(, 2)).SpecialCells(xlCellTypeFormulas).SpecialCells(xlCellTypeVisible).Copy [A14]
  8.    .Columns("B:Q").AutoFilter
  9.    End With
  10. End Sub
複製代碼

作者: 棋語鳥鳴    時間: 2011-6-7 06:06

回復 15# Hsieh


    不好意思~不知道哪裡出了問題!只要當sheet1數值少於不知幾行時!sheet4就無法顯是正確值,但是如果多行時可以正常使用![attach]6512[/attach]
作者: Hsieh    時間: 2011-6-7 18:41

回復 16# 棋語鳥鳴


   你看複製過去的公式一不一樣?
不是說過最好依照條件化格式的條件去做判斷比較好嗎?
而且為何不直接用SHEET2的原來數值來做來源,還要多一個SHEET1來用公式過渡呢?
自找麻煩罷了
作者: 棋語鳥鳴    時間: 2011-6-8 06:42

回復 17# Hsieh


    因為要篩選的檔案是連接個不同的地方來的~公式一樣!後來用了另一的方式解決了!於sheet1Q欄下方增加幾個紫色儲存格數據欄為空白!這樣數據來源會多了好幾行!複製時,因為下面是空白!所以就算複製到了也沒差!




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