返回列表 上一主題 發帖

請問如何將資料"剪下"然後向中間的空格向上貼齊呢?

請問如何將資料"剪下"然後向中間的空格向上貼齊呢?

本帖最後由 vpower 於 2010-7-25 00:02 編輯

http://naturefruit.myweb.hinet.net/ask1.xls


共有兩個問向...

問向1:
Sheet1要變成Sheet2
把第4列剪下貼到第2列.第6列剪下貼到第3列.第9列剪下貼到第4列.第10列剪下貼到第5列
(只能用剪下.不能用刪除空白列.要如何做呢?)
就好像 http://naturefruit.myweb.hinet.net/ask2.xls 的"原稿"表一樣.只能剪下向上貼.不能刪除列.會嚴重錯誤!
問向2:
Sheet3要變成Sheet5
是否可以判斷到A欄是空值(注意:儲存格內有函數不知是否會影響判斷)
就好像 http://naturefruit.myweb.hinet.net/ask2.xls 的"分類"表一樣.只要判斷到A欄儲存格內的函數,運算出來的值是空值,就直接刪除該列

以上問向已於7月24日早上9點36分修正

2樓的大大已經很接近了(真的很感謝).麻煩各位大大囉!

本帖最後由 kimbal 於 2010-7-23 00:13 編輯

問題一: (這個是用刪除吧)
  1. on error resume next
  2. ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
複製代碼
問題二:
如hsieh大下面所說,如果沒有層疊關係, 以下可找出運行時是空百的然後刪除
  1.     Dim r, rs
  2.     Dim allR As Range
  3.    
  4.     With ActiveSheet.UsedRange
  5.         Set r = .Find("", LookIn:=xlValues)
  6.         Set rs = r
  7.         If Not r Is Nothing Then
  8.            Set allR = r
  9.             Do
  10.                 Set allR = Union(allR, r)
  11.                 Set r = .FindNext(r)
  12.             Loop While Not r.Address = rs.Address
  13.         End If
  14.         If Not allR Is Nothing Then
  15.             allR.Delete Shift:=xlUp
  16.         End If
  17.     End With
複製代碼
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

回復 1# vpower


    問題2若用複製/選擇性貼上/值
再刪除空格可行嗎?
學海無涯_不恥下問

TOP

或許也可以採用先清除空白行內的公式, (因為用不到)
再利用 Range的Copy函數依序將公式搬移上來.
這裡請恕不再列出如何找空白行的公式.

With Worksheets("Sheet3")
  .Range("A2:J3").Clear
  .Range("A5:J6").Clear
  .Range("A8:J9").Clear

  .Range("A4:J4").Copy _
      Destination:=.Range("A2")
  .Range("A4:J4").Clear


  .Range("A7:J7").Copy _
      Destination:=.Range("A3")
  .Range("A7:J7").Clear

  .Range("A10:J10").Copy _
      Destination:=.Range("A4")
  .Range("A10:J10").Clear

End With

TOP

回復 4# luhpro
樓主說明是此例較規則所以整列刪除並不影響
若這些公式得到非空值時刪除公式就不對了
學海無涯_不恥下問

TOP

http://naturefruit.myweb.hinet.net/ask2.xls

以上檔案為極機密.所以我把內容修改過了.所以應該可以請大大們看看!完成新增/修改/刪除
新增
如果我現在要把"原稿"表的內容.最下方"新增"第151筆資料.他的學校是國小好了
然後到"分類"表去.我們點選第55列然後插入一列.然後把第54列框起來向下填滿.
然後界會看到我們所新增的第151筆資料.
修改
如果我現在要把"原稿"表的內容."修改"第149筆資料.把電話改成B149149
然後到"分類"表去.我們可以看到第54列的電話也從原來的B149被修改成B149149
刪除
如果我現在要把"原稿"表的內容."刪除"第149筆資料.(我是直接刪除列)
然後到"分類"表去,會發生嚴重錯誤.我想了很久想到一個方法.
那就是不要刪除列.只要刪除內容就好.然後把剩下的150筆資料剪下貼上被刪除內容的第149筆資料列.
就不會發生嚴重錯誤了.
但是那些被我刪除的資料在"分類"表會出現空白.所以我就想到直接刪除列就好了.

2樓的答案已經快要接近我的需求了.但是還差一點點.

TOP

本帖最後由 luhpro 於 2010-7-26 00:14 編輯

回復 6# vpower

如果只是單純的要將資料放在一起,
我之前有想到一種方法可以達成.
(因為之前用的方式就不是用公式做的, 所以先提供給你應急用, 至於用公式來達成的方式就煩請其他人提供給你囉)

就是先在某欄最上方訂定一個基數(0 或 1000 皆可),
C1 = 1000
然後利用公式將有資料的那一列依序編號,
C2 = IF(A1="",IF(C1<1000,C1+1000,C1),IF(C1<1000,C1+1,C1-1000+1))
C3 以後直接 下拉即可,(範例中下拉到 C501, 因為 C1並未對應到資料的第一列)
最後再一一抓出來顯示資料即可,
D1 = IF(ROW()>$F$1,"",INDIRECT(CONCATENATE("A",MATCH(ROW(),$C$1C$501,0)-1)))
E1 = IF(ROW()>$F$1,"",INDIRECT(CONCATENATE("B",MATCH(ROW(),$C$1C$501,0)-1)))
D2 與 E2 以後亦直皆下拉即可,,(範例中下拉到 D500, 因為 D1有對應到資料的第一列)

至於要怎樣使用抓出來的資料那就要看你的需求囉.
ask2_a.zip (84.19 KB)

TOP

回復  vpower

如果只是單純的要將資料放在一起,
我之前有想到一種方法可以達成.
(因為之前用的方式就 ...
luhpro 發表於 2010-7-26 00:11



您好.首先非常謝謝您的用心.但是我不會使用耶.請問如何使用呢?
因為我刪除"原稿"表的資料列.就會導致錯誤.原因也不知道從何查起.

我重點是放在"分類"表
然後"綜合"表只是幫他分類用的.不是主要讓我看的.

TOP

本帖最後由 luhpro 於 2010-7-27 00:21 編輯

我剛剛想到可以用公式套用我在第 7 篇上所使用的方法,
就是用程式在 "原稿" 的 NOPQRST 等欄分別列出各級學校名稱如 "托兒所"、"小學"...等依次的關鍵字,
再於各欄將每筆資料抓出來依序給予編號,
以上程式如下:

Sub Main()
  Dim iCount As Integer, iCol As Integer, iFrow As Integer, iRow As Integer
  Dim iI As Integer, iJ As Integer
  Dim rC As Range

  With Sheets("原稿")
    With .Range("a1:m1")
      Set rC = .Find("學校", LookIn:=xlValues)
      If Not rC Is Nothing Then
        iCol = rC.Column
      End If
    End With
    iCount = .Cells(Rows.Count, iCol).End(xlUp).Row()

    .Range(Cells(2, 14), Cells(iCount, 20)).Clear

    For iI = 1 To 7
      With .Range(Cells(1, iCol), Cells(iCount, iCol))
        Set rC = .Find(Cells(1, 13 + iI), LookIn:=xlValues)
        If Not rC Is Nothing Then
          iJ = 0
          iFrow = rC.Row
          Do
            iJ = iJ + 1
            iRow = rC.Row
            Cells(iRow, 13 + iI) = iJ
            Set rC = .FindNext(rC)
          Loop While Not rC Is Nothing And rC.Row <> iFrow
        End If
      End With
    Next iI
  End With
End Sub

ask2_a2.zip (75.51 KB)

如此甚至整個 "分類" Sheet 的內容與文字格式等都可以用程式直接產生出來. (只要沒刪到第一列的欄位名稱,應該都不受原稿編修的影響)
因為時間晚了來不及繼續下去這部份就要請你自己做或等我晚上有時間才能做囉.

TOP

依然不懂您要表達的是什麼.

先告一段落好了.我有點打算放棄.改別的寫法了.謝謝您的用心

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題