iT邦幫忙

0

excel從不同工作表抓資料

hywu 2019-08-19 16:59:3153388 瀏覽
  • 分享至 

  • xImage

想請教各位高手從不同工作表取數值的問題。
Excel小白如我現在要幫同仁們統計工時。如下圖一,A-F這5個人各交了一個檔案給我,我希望把每個工作表的第18列,抓到圖二的統計表內,我用連結儲存格的方式,顯示的公式為 =A!C18,可是如果我想套用這個公式到其他檔案,圖二裡的公式還是會連結到原檔案的(=[路徑&檔名]A!C18):

1.請問甚麼方法可以解決這個問題?
2.或是請問有沒有其他的方法可以從統計表快速抓取其他儲存格的資料?
3.能否不需先把A-F五個檔案合併到同個活頁簿就可以抓取資料?
謝謝

圖一 A-F 各人的工時表
https://ithelp.ithome.com.tw/upload/images/20190819/20119940yeW4mQvm4j.jpg

圖二 統計表
https://ithelp.ithome.com.tw/upload/images/20190819/20119940Dl2zpYZGXm.jpg

看更多先前的討論...收起先前的討論...
實際測試可以跨檔案抓取資料
=[t4.xlsx]工作表1!A1
=[檔名.xlsx]工作表名!A1

參考
活頁簿中建立外部參照
https://support.office.com/zh-hk/article/%E5%9C%A8%E5%8F%A6%E4%B8%80%E5%80%8B%E6%B4%BB%E9%A0%81%E7%B0%BF%E4%B8%AD%E5%BB%BA%E7%AB%8B%E5%A4%96%E9%83%A8%E5%8F%83%E7%85%A7-%EF%BC%88%E9%80%A3%E7%B5%90%EF%BC%89-%E7%9A%84%E5%84%B2%E5%AD%98%E6%A0%BC%E7%AF%84%E5%9C%8D-c98d1803-dd75-4668-ac6a-d7cca2a9b95f
hywu iT邦新手 5 級 ‧ 2019-08-20 23:02:59 檢舉
謝謝。
我目前的問題是如果將拉好的=工作表1!A1,想複製公式到新工作表,就變成[檔名.xlsx]工作表名!A1,有沒有只複製=工作表1!A1的方式?

或者有沒有比每一格都拉一次=工作表1!A1更好的方法?
同仁給你的檔案,
有命名規則嗎?
[同仁A.xlsx]工作表1!A1
...
[同仁F.xlsx]工作表1!A1
hywu iT邦新手 5 級 ‧ 2019-08-22 23:41:06 檢舉
檔案名原則上會是 [姓名+月份].xlsx
有考慮在每位姓名前編號 ex. [01 姓名 月份].xlsx 這樣
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
dadou1211
iT邦新手 5 級 ‧ 2019-08-20 10:50:54

我是覺得如果A-F這5個人的資料是不會再異動的話,你不如把18欄的資料(CTRL+C再到圖二要貼的欄位上,點右鍵有一個貼上值圖示有個123那個),直接貼死在圖二表統計就好了!

看更多先前的回應...收起先前的回應...
hywu iT邦新手 5 級 ‧ 2019-08-20 22:58:53 檢舉

因為實際人數大概有20位,而且每個月都會有新資料要彙整,才想請問有沒有更簡便的方法。
本來在統計表都拉好 =工作表!C18的公式,可是發現無法直接複製套用到新工作表裡。

dadou1211 iT邦新手 5 級 ‧ 2019-08-22 11:19:33 檢舉

那就用貼上公式的方式
[檔名.xlsx]工作表名!A1
之後利用CTRL+F 將[檔名.xlsx]取代成空白就可以了,檔名部份就不會見了

hywu iT邦新手 5 級 ‧ 2019-08-22 23:37:23 檢舉

我按space後點全部取代,結果每個儲存格都會跳出視窗詢問要連結到哪一個excel檔,點取消就全部都出現 #REF!。沒辦法直接刪掉檔名耶...

dadou1211 iT邦新手 5 級 ‧ 2019-08-23 11:39:28 檢舉

=[7月統計表.xlsx]工作表1!A3
=[路徑&檔名]A!C18
表示你取代的部份有問題
以上面的兩種例子
你要取代的是
[7月統計表.xlsx] 取代部份不要就不用打字
[路徑&檔名] 取代部份不要就不用打字

[]要包含進去
https://ithelp.ithome.com.tw/upload/images/20190823/20109710mkEgdvBIvr.jpg

0
來杯拿鐵
iT邦新手 2 級 ‧ 2019-08-21 15:45:45

是這樣嗎?
填入B20公式會自動帶入{s1~s3}的資料表名稱
https://ithelp.ithome.com.tw/upload/images/20190821/20091910JNgnJ2HTB6.jpg

不合併檔案取得資料可以用INDIRECT()
但是20個檔案要同時開啟,
電腦會吃不消。

用VBA是一個辦法,
但是要有一點基礎。
公式外部參照exceljet
VBA外部參照1藍色小舖
VBA外部參照2奇摩問答

*8/23新增
下次貼程式碼,前後加「```」。

Dim i%, sht As Worksheet

'第一張工作表表到最後一張
For Each sht In Sheets

    '當這張工作表不是彙總表才新增資料
    If sht.Name <> "彙總表" Then
    '跳到彙總表A欄下一列
    i = i + 1
    '彙總表A欄新增工作表的D36資料
    Sheets("彙總表").Range("A" & i) = _
    sht.Range("D36").Value
    End If

Next

測試程式

Public Sub text()
'測資
'初始化
    Dim sht As Worksheet
    Dim data As Integer
    data = 7 '測試資料
    
'程式執行
    '每張工作表
    For Each sht In Sheets
    
        '非彙總表才新增資料
        If (sht.Name <> "彙總表") Then
        
            '其它工作表填入資料
            sht.Range("C18", "AG18").Value = data 
            data = data + 1
        End If
    Next
    
'備註欄
    '測試日:2019/08/23
    '版本:office 365

End Sub

主程式

不過你的Excel只能有總表和分表(這樣稱呼?),
分表資料全部會彙總到總表。

Public Sub copy()
'初始化
    Dim sht As Worksheet
    Dim row As Integer
    row = 6

'程式執行
    '每張工作表
    For Each sht In Sheets
    
        '新增非彙總表資料
        If sht.Name <> "彙總表" Then
        
            '彙總表新增其它工作表資料
            sht.Range("C18", "AG18").copy '複製範圍
            Sheets("彙總表").Range("B" & row).Select
            ActiveSheet.Paste '貼上
    
            '跳到彙總表下一列
            row = row + 1
        End If
    Next
    
'備註欄
    '測試日:2019/08/23
    '版本:office 365

End Sub
hywu iT邦新手 5 級 ‧ 2019-08-22 23:56:01 檢舉

感謝~。但不好意思我不太懂上圖INDIRECT和ADDRESS的使用法(有試著搜尋了解,但是慧根有限.... ><)

我的問題是,有很多個相同格式的工作表,如果我想要把每一個工作表中的C18至AG18, 複製到彙整表的B欄至AF欄:
例:
工作表2的C18~AG18 -> 彙整表的 B6~AF6
工作表3的C18~AG18--> 彙整表的 B7~AF7
工作表4的C18~AG18--> 彙整表的 B8~AF8
以此類推
請問這樣能用INDIRECT嗎?

我找了幾個比較類似的VBA,有一個跟我情況比較接近的,是把每個工作表的D36,複製到彙總表

Public Sub demo()
Dim i%, sht As Worksheet
For Each sht In Sheets
If sht.Name <> "彙總表" Then
i = i + 1
Sheets("彙總表").Range("A" & i) = sht.Range("D36").Value
End If
Next
End Sub

我嘗試先在自己檔案貼一格試試看(把D36改為C18),結果就出現錯誤了...請問上面程式能調整成我需要的格式嗎?

不過我很好奇是什麼錯誤?
i%用法第一次看到,
我以為要用interger

不過學公式比較好,
畢竟網路上程式有風險。

hywu iT邦新手 5 級 ‧ 2019-08-29 15:50:17 檢舉

謝謝你~~
我試了你提供的程式(直接複製在模組,沒有更動)
它出現的錯誤訊息跟我上面嘗試的程式是一樣的耶
'執行階段錯誤'9
陣列索引超出範圍

我要發表回答

立即登入回答