Board logo

標題: [發問] 想將重量搬到相同資料的第一行 [打印本頁]

作者: joslau    時間: 2013-11-23 11:40     標題: 想將重量搬到相同資料的第一行

大家好!

我想將左方綠色的重量
搬到和右方資料一樣(E1:G11)
即是將
C5資料搬到C2
(即是B列中1234567894的第一行)

C11搬到C6
(即是B列中1234567900的第一行)

我用IF CELLS(I , 2)  = 1已可將C5資料COPY
但我不懂向上檢查相同資料中的第一行位置

先謝

[attach]16840[/attach]
作者: GBKEE    時間: 2013-11-23 14:13

回復 1# joslau
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, E As Range
  4.     With ActiveSheet
  5.         Set Rng = .Range("C:C").SpecialCells(xlCellTypeBlanks)
  6.         For Each E In Rng.Areas
  7.             If E.Cells(E.Rows.Count).Row < .Rows.Count Then
  8.                 E.Cells(1) = E.Cells(E.Rows.Count + 1)
  9.                 E.Cells(E.Rows.Count + 1) = ""
  10.             End If
  11.         Next
  12.     End With
  13. End Sub
複製代碼

作者: joslau    時間: 2013-11-23 17:42

回復  joslau
試試看
GBKEE 發表於 2013-11-23 14:13



謝謝回覆

但如果我以A列做一個範圍
而該範圍是以A12開始

範圍外的上下隔了一行可能會有其他資料
[attach]16846[/attach]
即是紅色部份可能會有其他資料

是改" Set Rng = "那行?
  1. Worksheets("Sheet1").Range("c12").End(xlDown).SpecialCells(xlCellTypeBlanks)
複製代碼
好像起不了作用

應該是怎樣寫?
作者: GBKEE    時間: 2013-11-23 18:54

本帖最後由 GBKEE 於 2013-11-23 18:57 編輯

回復 3# joslau
  1. Sub Ex()
  2.     Dim Rng As Range, E As Range
  3.     With ActiveSheet
  4.         Set Rng = .Range("C12:C23").SpecialCells(xlCellTypeBlanks)
  5.         For Each E In Rng.Areas
  6.             If E.Cells(E.Rows.Count).Row < 23 Then
  7.                 E.Cells(1) = E.Cells(E.Rows.Count + 1)
  8.                 E.Cells(E.Rows.Count + 1) = ""
  9.             End If
  10.         Next
  11.     End With
  12. End Sub
複製代碼

作者: GBKEE    時間: 2013-11-24 06:54

回復 5# bmouth
你可製作 3# 圖示內容,執行4#的程式碼,試試
作者: c_c_lai    時間: 2013-11-24 07:28

回復 5# bmouth
4# 用滑鼠貼製即可。
作者: joslau    時間: 2013-11-25 20:11

回復 5# GBKEE

謝謝回覆

    因每次行數不不樣....正研究中
作者: joslau    時間: 2013-11-25 20:28

本帖最後由 joslau 於 2013-11-25 20:29 編輯

完成!!!!!!
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, E As Range, lastrow As Long
  4.     With ActiveSheet
  5.     lastrow = Worksheets("sheet1").Range("a12").End(xlDown).Row
  6.         Set Rng = .Range("a12:L" & lastrow&).SpecialCells(xlCellTypeBlanks)
  7.         For Each E In Rng.Areas
  8.             If E.Cells(E.Rows.Count).Row < .Rows.Count Then
  9.                 E.Cells(1) = E.Cells(E.Rows.Count + 1)
  10.                 E.Cells(E.Rows.Count + 1) = ""
  11.             End If
  12.         Next
  13.     End With
  14. End Sub
複製代碼

作者: joslau    時間: 2013-12-3 13:10

大致完成我需要的東西了
再次多謝GBKEE
  1. Sub autopl()
  2. Dim i As Long
  3. Dim MyString, myLen

  4. For i = 15 To [a65536].End(4).Row
  5. MyString = Cells(i, 2)
  6. If Len(MyString) = 10 Then
  7.         Cells(i, 9).FormulaR1C1 = ""
  8.         Cells(i, 10).FormulaR1C1 = ""
  9.         Cells(i, 11).FormulaR1C1 = ""
  10. End If




  11. Next i

  12. Ex
  13. Ex2
  14. Ex3
  15. Ex4
  16. add1
  17. ctn1


  18. End Sub

  19. Sub Ex()
  20.     Dim Rng As Range, E As Range, lastrow3 As Long
  21.     With ActiveSheet
  22.     lastrow3 = Worksheets("sheet1").Range("a15").End(xlDown).Row
  23.         Set Rng = .Range("J15:J" & lastrow3&).SpecialCells(xlCellTypeBlanks)
  24.         For Each E In Rng.Areas
  25.             If E.Cells(E.Rows.Count).Row < .Rows.Count Then
  26.                 E.Cells(1) = E.Cells(E.Rows.Count + 1)
  27.                 E.Cells(E.Rows.Count + 1) = ""
  28.             End If
  29.         Next
  30.     End With
  31. End Sub

  32. Sub Ex2()
  33.     Dim Rng2 As Range, D As Range, lastrow2 As Long
  34.     With ActiveSheet
  35.     lastrow2 = Worksheets("sheet1").Range("a15").End(xlDown).Row
  36.         Set Rng2 = .Range("I15:I" & lastrow2&).SpecialCells(xlCellTypeBlanks)
  37.         For Each D In Rng2.Areas
  38.             If D.Cells(D.Rows.Count).Row < .Rows.Count Then
  39.                 D.Cells(1) = D.Cells(D.Rows.Count + 1)
  40.                 D.Cells(D.Rows.Count + 1) = ""
  41.             End If
  42.         Next
  43.     End With
  44. End Sub

  45. Sub Ex3()
  46.     Dim Rng3 As Range, f As Range, lastrow5 As Long
  47.     With ActiveSheet
  48.     lastrow5 = Worksheets("sheet1").Range("a15").End(xlDown).Row
  49.         Set Rng3 = .Range("k15:k" & lastrow5&).SpecialCells(xlCellTypeBlanks)
  50.         For Each f In Rng3.Areas
  51.             If f.Cells(f.Rows.Count).Row < .Rows.Count Then
  52.                 f.Cells(1) = f.Cells(f.Rows.Count + 1)
  53.                 f.Cells(f.Rows.Count + 1) = ""
  54.             End If
  55.         Next
  56.     End With
  57. End Sub

  58. Sub Ex4()

  59. Dim rw As Long
  60. For rw = 15 To [a65536].End(4).Row
  61. If Cells(rw, 2).Value = 1 Then Cells(rw, 2).EntireRow.Delete
  62. Next rw

  63. End Sub

  64. Sub add1()

  65. Dim l As Long

  66. For l = 15 To [a65536].End(4).Row
  67. If Cells(l, 2) <> "" Then
  68.         Cells(l, 2).FormulaR1C1 = ""
  69. End If
  70. Next l
  71.    

  72. End Sub

  73. Sub ctn1()
  74. Dim lastrow4 As Long

  75.     With ActiveSheet
  76.     lastrow4 = Worksheets("sheet1").Range("a15").End(xlDown).Row
  77.     Range("b15").FormulaR1C1 = "0"
  78.     Range("b16").FormulaR1C1 = "=IF(RC[7]="""",R[-1]C,R[-1]C+1)"
  79.     Range("b16").AutoFill Destination:=Range("b16:b" & lastrow4)
  80.     End With
  81. End Sub
複製代碼

作者: Hsieh    時間: 2013-12-3 14:15

回復 9# joslau
  1. Sub ex()
  2. Dim A As Range, B As Range, Rng As Range
  3. With Sheet1
  4. Set Rng = .Range("A:A").Find("DATA1", lookat:=xlWhole) '找A欄標題列位置
  5. If Not Rng Is Nothing Then
  6. If Application.Count(Rng.CurrentRegion.Columns(3)) > 0 Then '資料C欄數值數量判斷
  7.    For Each A In Rng.CurrentRegion.Columns(3).SpecialCells(xlCellTypeConstants, 1) '每個數值做迴圈
  8.      Set B = Rng.CurrentRegion.Columns(2).Find(A.Offset(, -2), lookat:=xlWhole) '找到B欄第一個位置
  9.      If Not B Is Nothing Then A.Cut B.Offset(, 1) '移動位置
  10.    Next
  11. End If
  12. End If
  13. End With
  14. End Sub
複製代碼

作者: joslau    時間: 2013-12-3 16:43

回復  joslau
Hsieh 發表於 2013-12-3 14:15



    哈哈~~~謝謝Hsieh回覆
....要再研究

(其實GBKEE那段CODE已花了不少時間研究...)




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