Board logo

標題: 將許多儲存格數值改為0 [打印本頁]

作者: vvcvc    時間: 2013-2-1 16:04     標題: 將許多儲存格數值改為0

我使用錄製的方式得到以下程式碼(只完成一小部份的需求)
以下程式碼處理列2401~2500、2501~2600
原資料每100列會重復相同的格式一次(ex.E5:AJ11、E105:AJ111...E2405:AJ2411、E2505:AJ2511、E2605:AJ2611...)
想簡化程式碼
目前需求為清除1~3399範圍
  1. Sub Macro4()
  2. '
  3. ' Macro4 Macro
  4. '   在 2013/2/1 錄製的巨集
  5. '
  6. ' 快速鍵: Ctrl+a
  7. '
  8.     Range("E2403:E2404,E2405:AJ2411").Select
  9.     Range("E2405").Activate
  10.     Range("E2403:E2404,E2405:AJ2411,E2415,E2417:AJ2418").Select
  11.     Range("E2417").Activate
  12.     Range("E2403:E2404,E2405:AJ2411,E2415,E2417:AJ2418,E2421:AJ2421").Select
  13.     Range("E2421").Activate
  14.     Range( _
  15.         "E2403:E2404,E2405:AJ2411,E2415,E2417:AJ2418,E2421:AJ2421,E2425:E2426,E2427:AJ2428" _
  16.         ).Select
  17.     Range("E2427").Activate
  18.     Range( _
  19.         "E2403:E2404,E2405:AJ2411,E2415,E2417:AJ2418,E2421:AJ2421,E2425:E2426,E2427:AJ2428,E2430:AJ2432,E2437:AJ2438,E2444:AJ2444,E2446:AJ2446" _
  20.         ).Select
  21.     Range("AJ2446").Activate
  22.     Range( _
  23.         "E2403:E2404,E2405:AJ2411,E2415,E2417:AJ2418,E2421:AJ2421,E2425:E2426,E2427:AJ2428,E2430:AJ2432,E2437:AJ2438,E2444:AJ2444,E2446:AJ2446,E2455" _
  24.         ).Select
  25.     Range("E2455").Activate
  26.    
  27.    
  28.     Range("E2503:E2504,E2505:AJ2511").Select
  29.     Range("E2505").Activate
  30.     Range("E2503:E2504,E2505:AJ2511,E2515,E2517:AJ2518").Select
  31.     Range("E2517").Activate
  32.     Range("E2503:E2504,E2505:AJ2511,E2515,E2517:AJ2518,E2521:AJ2521").Select
  33.     Range("E2521").Activate
  34.     Range( _
  35.         "E2503:E2504,E2505:AJ2511,E2515,E2517:AJ2518,E2521:AJ2521,E2525:E2526,E2527:AJ2528" _
  36.         ).Select
  37.     Range("E2527").Activate
  38.     Range( _
  39.         "E2503:E2504,E2505:AJ2511,E2515,E2517:AJ2518,E2521:AJ2521,E2525:E2526,E2527:AJ2528,E2530:AJ2532,E2537:AJ2538,E2544:AJ2544,E2546:AJ2546" _
  40.         ).Select
  41.     Range("AJ2546").Activate
  42.     Range( _
  43.         "E2503:E2504,E2505:AJ2511,E2515,E2517:AJ2518,E2521:AJ2521,E2525:E2526,E2527:AJ2528,E2530:AJ2532,E2537:AJ2538,E2544:AJ2544,E2546:AJ2546,E2555" _
  44.         ).Select
  45.     Range("E2555").Activate
  46.    
  47.    
  48.     Selection.FormulaR1C1 = "0"
  49. End Sub
複製代碼

作者: stillfish00    時間: 2013-2-1 19:12

回復 1# vvcvc
你錄製的東西  基本上code#41行前都是沒作用的
應該是錄製時一直沒選好範圍
  1. Sub Test()
  2.     Dim i As Long
  3.     For i = 0 To 33
  4.         ActiveSheet.Range("E3:E4,E5:AJ11,E15,E17:AJ18,E21:AJ21,E25:E26,E27:AJ28,E30:AJ32,E37:AJ38,E44:AJ44,E46:AJ46,E55").Offset(i * 100).Value = 0
  5.     Next i
  6. End Sub
複製代碼

作者: GBKEE    時間: 2013-2-2 14:51

回復 1# vvcvc
  1. Sub Ex()
  2.     Dim Rng As Range
  3.     Set Rng = Range("E5:AJ11")          '最上方的資料位址
  4.     Do
  5.         Rng = 0
  6.         Set Rng = Rng.Offset(100)       '原資料每100列會重復相同的格式一次
  7.     Loop While Rng.Cells(1).Row < 3399  '清除1~3399範圍: .Row>=3399 離開迴圈
  8. End Sub
複製代碼

作者: vvcvc    時間: 2013-2-2 23:15

謝謝2位的回答
其實有選好,真的是要選的儲存格很亂
我自己去除下拉動作的程式碼
可能有誤刪部份儲存格
不過大致上知道怎麼修改2位指導的程式碼
先謝囉!
作者: vvcvc    時間: 2013-2-2 23:25

重新看了一次自己錄出來的程式碼
範圍一直重覆出現
哈哈...連錄都錄的不好
作者: vvcvc    時間: 2013-3-1 11:00

2位, 如果我要在輸入0之前加入一段如下程式
這樣寫的結果會出錯,出錯的位置於
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
這段程式碼
可否幫我看看這段內容那邊寫錯嗎?
  1. Sub Macro4()
  2. '
  3. ' 快速鍵: Ctrl+n
  4. '
  5. Sheets("sheet3").Select
  6. Dim i As Long
  7.      For i = 0 To 38
  8.         Range("AJ3:AJ4,AJ15,AJ25:AJ26,AJ55").Select
  9.         Selection.Copy
  10.         Range("E3:E4,E15,E25:E26,E55").Select
  11.         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  12.         :=False, Transpose:=False
  13.          ActiveSheet.Range("E5:AJ11,E17:AJ18,E21:AJ21,E27:AJ28,E30:AJ32,E37:AJ38,E44:AJ44,E46:AJ46").Offset(i * 100).Value = 0
  14.      Next i
  15. End Sub
複製代碼

作者: Hsieh    時間: 2013-3-1 11:14

回復 6# vvcvc


    無法在不相鄰的區域貼上
作者: vvcvc    時間: 2013-3-1 11:51

主要需求是要在清除所有數值前先把AJ3:AJ4,AJ15,AJ25:AJ26,AJ55的結果以選擇性貼上「值」的方式貼到E3:E4,E15,E25:E26,E55
原資料每100列會重復相同的格式一次(ex.E5:AJ11、E105:AJ111...E2405:AJ2411、E2505:AJ2511、 E2605:AJ2611...)
我這樣的寫法可以嗎?
  1. Sub Macro4()
  2. '
  3. ' 快速鍵: Ctrl+n
  4. '
  5. Sheets("sheet3").Select
  6. Dim i As Long
  7.      For i = 0 To 38
  8.         Range("AJ3:AJ4,AJ15,AJ25:AJ26,AJ55").Offset(i * 100).Select
  9.         Selection.Copy
  10.         Range("E3:E4,E15,E25:E26,E55").Offset(i * 100).Select
  11.         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  12.         :=False, Transpose:=False
  13.          ActiveSheet.Range("E5:AJ11,E17:AJ18,E21:AJ21,E27:AJ28,E30:AJ32,E37:AJ38,E44:AJ44,E46:AJ46").Offset(i * 100).Value = 0
  14.      Next i
  15. End Sub
複製代碼

作者: Hsieh    時間: 2013-3-1 23:55

回復 8# vvcvc
試試看
  1. Sub Macro4()
  2. '
  3. ' 快速鍵: Ctrl+n
  4. '
  5. Dim i As Long
  6.      For i = 0 To 38
  7.         Set Rng = Range("AJ3:AJ4,AJ15,AJ25:AJ26,AJ55").Offset(i * 100)
  8.         Set Rng1 = Range("E3:E4,E15,E25:E26,E55").Offset(i * 100)
  9.         For j = 1 To Rng.Areas.Count
  10.           Rng1.Areas(j) = Rng.Areas(j).Value
  11.         Next
  12.          ActiveSheet.Range("E5:AJ11,E17:AJ18,E21:AJ21,E27:AJ28,E30:AJ32,E37:AJ38,E44:AJ44,E46:AJ46").Offset(i * 100).Value = 0
  13.      Next i
  14. End Sub
複製代碼





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