返回列表 上一主題 發帖

[發問] [資料區域的選擇]含公式但無數值的儲存格視為空白

[發問] [資料區域的選擇]含公式但無數值的儲存格視為空白

翻了舊文,找到一個適用的,但是不會套用

請問如何將Sheets("日報表").Range("B3")內的資料
複製到Sheets("綜合資料庫").Range("B65536")

套用下列函式
lastRow = 65536 - Application.CountBlank(Columns(1))
[A1].Resize(lastRow).Copy

本帖最後由 jackson7015 於 2012-2-8 14:15 編輯

回復 2# GBKEE


    附上檔案
工作表.rar (29.15 KB)

1.
B5:B1000都有公式,要將日報表的B3複製到資料庫的B列無顯示日期的第一格空格

2.
日期可否只複製儲存格顯示的"當天日期",而非B3的TODAY()

TOP

本帖最後由 jackson7015 於 2012-2-8 19:17 編輯

回復 4# GBKEE

五體投地的感謝GBKEE版主..

這工作表想了好幾天快想破頭了..

要求的問題只有1.2個,卻把整篇都幾乎解決了..

小弟還有些問題,資料庫是日報表的累計

所以可以不清除資料庫,而是累計的方式繼續填入資料庫嗎

附上檔案 工作表.rar (22.07 KB)
  1. Sub Ex()
  2.     Dim Ar(), Rng As Range, Xi As Integer
  3.     With Sheets("日報表")
  4.         Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有料的列
  5.         ReDim Ar(1 To Rng.Count, 1 To 14)          '陣列的大小 1 To 14 => 資料範圍 B欄:O欄
  6.         For Xi = 1 To Rng.Count
  7.             Ar(Xi, 1) = Date                       '日期
  8.             Ar(Xi, 2) = .Cells(Rng(Xi).Row, "B")   '編號
  9.             Ar(Xi, 3) = .Cells(Rng(Xi).Row, "N")   '備註
  10.             Ar(Xi, 4) = .Cells(Rng(Xi).Row, "D")   '地點
  11.            S = "=IF(RC[4]=1,""查無"",IF(RC[3]=1,""成案"" & SUM(RC[6]:RC[9])&""KW"",""""))"
  12.             Ar(Xi, 5) = S                          '成案
  13.             Ar(Xi, 6) = .Cells(Rng(Xi).Row, "E")  '主要
  14.             Ar(Xi, 7) = .Cells(Rng(Xi).Row, "F")  '非主要
  15.             Ar(Xi, 8) = .Cells(Rng(Xi).Row, "G")  '是
  16.             Ar(Xi, 9) = .Cells(Rng(Xi).Row, "H") '否            
  17.             KK = "=IF(COUNTA(RC[-1]),""是"",IF(COUNTA(RC[-2]),""否"",""""))"            
  18.             Ar(Xi, 10) = KK
  19.             Ar(Xi, 11) = .Cells(Rng(Xi).Row, "I")  '燈
  20.             Ar(Xi, 12) = .Cells(Rng(Xi).Row, "J") '力
  21.              Ar(Xi, 13) = .Cells(Rng(Xi).Row, "K") '燈
  22.             Ar(Xi, 14) = .Cells(Rng(Xi).Row, "L") '力
  23.            '  Ar(Xi, 10) = .Cells(Rng(Xi).Row, "n")  '  ** 請問這裡 要寫些什麼?   **
  24.           '  Ar(Xi, 10) = .Cells(Rng(Xi).Row, "n")  '的部分是"是否成案的公式"=IF(COUNTA($I3),"是",IF(COUNTA($J3),"否",""))
  25.          Next
  26.      End With
  27.      With Sheets("綜合資料庫")
  28.          .Range("B5:O" & Rows.Count) = ""        '清除 資料
  29.          .[B5].Resize(Rng.Count, 10) = Application.Transpose(Application.Transpose(Ar))
  30.                                                 '轉置陣列  填入:資料
  31.      End With
  32. End Sub
複製代碼
還有上面
  1. Set Rng = .Range("d7", .[d7].End(xlDown))
複製代碼
這個程式碼中的.[d7]是代表什麼意思?

TOP

回復 6# GBKEE


   
大略了解意思了,剩下的那個逗點再好好研究

感謝版主的解惑,獲益良多

也謝謝版主直接幫小弟的表格細調完整:loveliness:

TOP

回復 6# GBKEE


   
想在跟GBKEE大請益

可以將
  1. Ar(Xi, 1) = Date                       '日期
複製代碼
套用日報表的"B3",的日期嗎

因為有時會因為當天無法作業,所以隔天做他日的日報,所以不會為當日日期

TOP

本帖最後由 jackson7015 於 2012-2-9 22:06 編輯

回復 9# GBKEE


    如果所需要的日期不是當日,[B3]我會設定TODAY()-N來當作日報表的日期格式

這樣感覺比較不會破壞日期格式

如果要將 Ar(Xi, 1) = Date  更改成以日報表的[B3]所顯示的日期為數據的話

請問 Date 該改成什麼 ?

因為不像其他列式一樣是整列去做COPY所以好像不能使用  .Cells(Rng(Xi).Row, "B3"

小弟只會舉一反一,希望能多多指教

PS.有點回歸到原問題的討論,只複製B3顯示的日期,而非公式的TODAY()

TOP

回復 11# GBKEE


    瞭解了,自己也試過[B3],卻出現錯誤,少一個逗點真的就差好多

感謝版主指導

TOP

回復 11# GBKEE

這兩天新增了一些項目,可是忽然出現第六行"溢位"錯誤訊息

可以麻煩幫忙看看是怎樣的錯誤嗎
  1. Sub 累計日報表資料()
  2.     If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
  3.     Dim Ar(), Rng As Range, Xi As Integer
  4.     With Sheets("日報表")
  5.         Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有資料的列
  6.         ReDim Ar(1 To Rng.Count, 1 To 20)          '陣列的大小 1 To 20 => 資料範圍 B欄:V欄
  7.         For Xi = 1 To Rng.Count
  8.             Ar(Xi, 1) = .[B3]                      '日期
  9.             Ar(Xi, 2) = .Cells(Rng(Xi).Row, "B")   '編號
  10.             Ar(Xi, 3) = .Cells(Rng(Xi).Row, "N")   '電
  11.             Ar(Xi, 4) = .Cells(Rng(Xi).Row, "D")   '地點
  12.             SS = "=IF(RC[4]=1,""查無"",IF(RC[3]=1,""成案"" & SUM(RC[6]:RC[9])&""KW"",""""))"
  13.             Ar(Xi, 5) = SS                         '是否成案
  14.             Ar(Xi, 6) = .Cells(Rng(Xi).Row, "E")   '密
  15.             Ar(Xi, 7) = .Cells(Rng(Xi).Row, "F")   '非密
  16.             KK = "=IF(COUNTA(RC[+1]),""是"",IF(COUNTA(RC[+2]),""否"",""""))"
  17.             Ar(Xi, 8) = KK                         '現場檢驗結果
  18.             Ar(Xi, 9) = .Cells(Rng(Xi).Row, "G")   '是
  19.             Ar(Xi, 10) = .Cells(Rng(Xi).Row, "H")  '否
  20.             Ar(Xi, 11) = .Cells(Rng(Xi).Row, "I")  '燈(惡
  21.             Ar(Xi, 12) = .Cells(Rng(Xi).Row, "J")  '力(惡
  22.             Ar(Xi, 13) = .Cells(Rng(Xi).Row, "K")  '燈(非惡
  23.             Ar(Xi, 14) = .Cells(Rng(Xi).Row, "L")  '力(非惡性
  24.             Ar(Xi, 15) = .Cells(Rng(Xi).Row, "A")  '項目
  25.             Ar(Xi, 16) = .Cells(Rng(Xi).Row, "O")  '營業
  26.             Ar(Xi, 17) = .Cells(Rng(Xi).Row, "R")  '行業別
  27.             Ar(Xi, 18) = .Cells(Rng(Xi).Row, "Q")  '方式
  28.             Ar(Xi, 19) = .Cells(Rng(Xi).Row, "S")  '移送
  29.             Ar(Xi, 20) = .Cells(Rng(Xi).Row, "P")  '部門
  30.          Next
  31.     End With
  32.          With Sheets("綜合資料庫").Cells(Rows.Count, "B").End(xlUp).Offset(1)
  33.          .Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
  34.     End With
  35. End Sub
複製代碼
ReDim Ar(1 To Rng.Count, 1 To 20)
出現錯誤

TOP

回復 14# GBKEE

之後要出差幾天

先附上檔案

123.rar (93.54 KB)

TOP

本帖最後由 jackson7015 於 2012-2-20 13:50 編輯

回復 16# GBKEE

今天測試了修改後的巨集

如果再日報表內只有1欄(如檔)資料,則使用巨集後會出現了錯誤訊息"執行階段錯誤1004"

這個錯誤只有在日報表只有一則資料才會發生,多於1則不會

附上檔案和代碼

工作日報表.rar (155.08 KB)
  1. Sub 累計日報表資料()
  2.     Dim Ar(), Rng As Range, Xi As Long
  3.     With Sheets("日報表")
  4.         Set Rng = .Range("d7", .[d7].End(xlDown))  '資料範圍: B欄有資料的列
  5.         If Application.CountA(Rng) = 0 Then MsgBox "日報表 沒有資料 !!!": Exit Sub '判斷日報表有沒有資料
  6.         If MsgBox("是否執行複製?", vbYesNo) = vbNo Then Exit Sub
  7.         ReDim Ar(1 To Rng.Count, 1 To 20)          '陣列的大小 1 To 20 => 資料範圍 B欄:V欄
  8.         For Xi = 1 To Rng.Count
  9.             Ar(Xi, 1) = .[B3]                      '日期
  10.             Ar(Xi, 2) = .Cells(Rng(Xi).Row, "B")   '實調書編號
  11.             Ar(Xi, 3) = .Cells(Rng(Xi).Row, "N")   '電號
  12.             Ar(Xi, 4) = .Cells(Rng(Xi).Row, "D")   '地點
  13.             SS = "=IF(RC[4]=1,""查無竊電"",IF(RC[3]=1,""稽查成案"" & SUM(RC[6]:RC[9])&""KW"",""""))"
  14.             Ar(Xi, 5) = SS                         '是否成案
  15.             Ar(Xi, 6) = .Cells(Rng(Xi).Row, "E")   '密告
  16.             Ar(Xi, 7) = .Cells(Rng(Xi).Row, "F")   '非密告
  17.             KK = "=IF(COUNTA(RC[+1]),""是"",IF(COUNTA(RC[+2]),""否"",""""))"
  18.             Ar(Xi, 8) = KK                         '現場檢驗結果
  19.             Ar(Xi, 9) = .Cells(Rng(Xi).Row, "G")   '是
  20.             Ar(Xi, 10) = .Cells(Rng(Xi).Row, "H")  '否
  21.             Ar(Xi, 11) = .Cells(Rng(Xi).Row, "I")  '燈(惡性
  22.             Ar(Xi, 12) = .Cells(Rng(Xi).Row, "J")  '力(惡性
  23.             Ar(Xi, 13) = .Cells(Rng(Xi).Row, "K")  '燈(非惡性
  24.             Ar(Xi, 14) = .Cells(Rng(Xi).Row, "L")  '力(非惡性
  25.             Ar(Xi, 15) = .Cells(Rng(Xi).Row, "A")  '項目
  26.             Ar(Xi, 16) = .Cells(Rng(Xi).Row, "O")  '營業
  27.             Ar(Xi, 17) = .Cells(Rng(Xi).Row, "R")  '行業別
  28.             Ar(Xi, 18) = .Cells(Rng(Xi).Row, "Q")  '竊電方式
  29.             Ar(Xi, 19) = .Cells(Rng(Xi).Row, "S")  '移送情形
  30.             Ar(Xi, 20) = .Cells(Rng(Xi).Row, "P")  '提報部門
  31.          Next
  32.     End With
  33.          With Sheets("綜合資料庫").Cells(Rows.Count, "B").End(xlUp).Offset(1)
  34.          .Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
  35.     End With
  36. End Sub
複製代碼
.Resize(Rng.Count, UBound(Ar, 2)) = Application.Transpose(Application.Transpose(Ar))
第34行出現錯誤

請問要修改什麼呢?

而原本的Integer 變數,為什麼不直接使用Long變數就好,執行位元組較多
是否有版本的問題而不能直接使用Long變數?

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題