軟體:EXCEL 2003 or 2007

問題影片:https://youtu.be/tw02ChhCEEg
1.2.3.4四個檔案為其他程式產生的訂單清單(基本上都一個一個產生,不須批次)
為了快速比對出個水果價格,故另外製作一個DATA檔(可以固定存放位置)
內有水果對應價格,並於E2儲存格KEY好公式
所以每次都必須:
1.開啟DATA檔→COPY"E2"
2.開啟清單(1.2.3.4)→貼上→往下拉→複製→選擇性貼上"值"
3.通常會一個一個清單產生後再處理,每個清單檔名不同,筆數不同,格式相同

有沒有更快的方法可以處理每一張訂單?
有試過錄製巨集,但是每個清單的檔名不同(1.2.3.4)所以無法使用
有沒有可以一鍵就處理好的方法? 譬如說打開清單1,按個快速鍵就弄好?
1.xls

e2==IF(ISERROR(INDIRECT("[data.xls]Sheet1!$B"&MATCH(D2,[data.xls]Sheet1!$A:$A,0))),"",INDIRECT("[data.xls]Sheet1!$B"&MATCH(D2,[data.xls]Sheet1!$A:$A,0)))


試做了一個用來複製公式的巨集,給您試用看看。

巨集名稱:複製儲存格公式至目標區域
預設起動鍵: Ctrl+Shift+C







附加壓縮檔:
Sorry~這個文件的巨集在下後來再做測試時發現有個bug^^"
如果需要的話,在下後面會再貼上修正過的.
yuehmao wrote:
試做了一個用來複製公式的巨集...(恕刪)



您的巨集太強大了,好像不需要用到這麼多的功能


如果我沒有會錯意的話(看影片)
他的問題大概是這樣
一、data 和其它檔案是一樣的,只差在e2有公式
價格ˋ物品會更新讓Vlookup搜尋
二、其它檔案因為是自動產生的,裡面欠一個公式連結到Data
三、因為公式ˋVlookUP資料存在data裡面,所以每次都要去打開data複製公式
四、公式只需要貼在其中一個表,Excel自動修改公式連結到Data
結果算出來後,保留內容,但不要公式
五、因為檔案多,所以要重覆四到每個檔案


所以我認為data那個檔案其實不用管它,只是存公式用的
那行公式甚至用文字檔、自黏便箋,抄起來都行
不過為什麼要顯示0000,很麻煩耶,要顯示出“內容是真正四位數的0”
本來只要4行的程式,要多寫6行
而且設計表單的人,為什麼不一開始就把公式放進去
我想大概是某離職員工或廠商做的半成品
不想花錢找不到人維護

這是根據您的檔案排列方式試作的
您的檔案的工作表2,請自行新增一些測試資料
測試目錄內多放一些檔案
測試目錄內C:\excel只能放excel檔

建立一個全新空白excel檔,不要放在測試目錄內
然後做一個按鈕

*注意,測試用的檔案會没任何提示直接存檔*
Sub Macro1()

Columns("A:A").ClearContents
Filename = Dir("C:\excel\*.*")
filecount = 1
Do While Filename <> ""
Cells(filecount, 1) = Filename
Workbooks.Open Filename:="C:\excel\" & Cells(filecount, 1)

'中間這一段10行程式碼,適用在單一檔案==========
'如果0000用其它文字代替,可減少6行
Sheets("工作表2").Select
Columns("E:E").NumberFormatLocal = "G/通用格式" '___這行可省略
Columns("E:E").ClearContents '___這行可省略
For i = 2 To Range("d1").CurrentRegion.Rows.Count
Cells(i, 5) = Evaluate("=IF(ISNA(VLOOKUP(D" & i & ",工作表1!$A$1:$B$7,2,FALSE)), ""0000"", VLOOKUP(D" & i & ",工作表1!$A$1:$B$7,2,FALSE))")
If Cells(i, 5) = "0" Then '___這行可省略
Cells(i, 5).NumberFormatLocal = "@" '___這行可省略
Cells(i, 5).FormulaR1C1 = "0000" '___這行可省略
End If '___這行可省略
Next
'==========================

ActiveWorkbook.Close savechanges:=true
filecount = filecount + 1
Filename = Dir
Loop

End Sub

p.s.這是用yuehmao的排版方式做出來的的範例
不能直接套用到樓主的問題
如果要用,只需修改工作表名稱、EValute括號内的公式
順便多加上一個if當檔名是Data不開啟檔案即可
謝謝 Snare大大 的鼓勵^^

在下有大致看了一下您的編碼內容,發覺有些敍述功能是在下尚未接觸過的,
不過,倒是可以看得明白大體上您整個編碼的運作邏輯,
請待在下先研究過內容後並做些測試,之後會再來做回復,
在此先謝謝您的心得分享了^^


感謝各位的回覆~
發現好像我有些沒說清楚的地方~

yuehmao wrote:
試做了一個用來複製公式的巨集,給您試用看看。
巨集名稱:複製儲存格公式至目標區域

感謝yuehmao大的檔案,我試過把DATA檔和其他清單檔案分開
然後依圖示更改來源和欲複製區域的參照,無法正常使用~
會出現編譯錯誤,沒有定義這個SUB或FUNCTION
另外,每筆清單的行數不同,小於或大於20行也可以處理嗎?

snare wrote:
一、data 和其它檔案是一樣的,只差在e2有公式
價格ˋ物品會更新讓Vlookup搜尋

這裡可能就是我影片誤導各位的地方
DATA有公式和對應表,而其他1.2.3.4是沒有的
實際上比較像這樣才對

清單1.


DATA公式


DATA對應欄位


而DATA的對應欄位之後會增加、變動,所以每個轉出來的清單,都必須依對應表對應出金額
所以目前才會用公式先行處理

snare wrote:
而且設計表單的人,為什麼不一開始就把公式放進去
我想大概是某離職員工或廠商做的半成品
不想花錢找不到人維護

唉~您真內行,這原本是一整套的ACCESS進銷存
其實只要在原ACCESS的"水果"資料表新增"價錢"的欄位,在每次運算後,EXCEL跟著代出來就好
但公司和原軟體公司鬧翻,現在要新增功能原公司也不願意處理...
找新的廠商也只願意用他們的方式從頭開發,但畢竟遠水救不了近火
現有的一堆問題只能自己土砲處理

而這一部分,我只能從後端的EXCEL著手,雖說用公式勉強可以處理
只是每產生一次清單,就要開一次DATA檔複製貼上一次,著實有點麻煩
所以才會問,是否可以固定DATA檔案的位置後,有其參照路徑
讓每次產生的清單可以比對出金額~

至於0000,則是轉到下一個程式,該欄位預設只有四碼,所以沒有對應到的乾脆預設0000
在下一個程式中該欄位若不夠4碼,我有加公式補0上去..所以只出現00.XX...之類的也可以
再次感謝各位的回覆~


Tzyuh wrote:
至於0000,則是轉到下一個程式
...(恕刪)

到底是用了幾個程式在轉這一個簡單的表格
原來這就是您複製公式後,還要特別把公式刪掉的原因
因為下個程式有可能會出錯

建議老闆花錢比較快啦
明明一開始,只要加一行公式就可以解決的東西,搞到這麼複雜

Tzyuh wrote:
這裡可能就是我影片誤導各位的地方
DATA有公式和對應表,而其他1.2.3.4是沒有的...(恕刪)


這樣程式要修改一下,data檔不打開的話,不能用Evaluate

*注意,檔案會沒有任何提示直接存檔*
Sub Macro1()
Dim i, lastrow, filename, filecount, t
Columns("A:A").Select
Selection.ClearContents
filename = Dir("C:\excel\*.*")
filecount = 1

Do While filename <> ""
Cells(filecount, 1) = filename

Workbooks.Open filename:="C:\excel\" & Cells(filecount, 1)

'中間這一段10行程式碼,適用在單一檔案==========
'如果0000用其它文字代替,可減少7行
Sheets("工作表2").Select

Columns("E:E").NumberFormatLocal = "G/通用格式" '可省略
Columns("E:E").ClearContents '可省略
For i = 2 To Range("d1").CurrentRegion.Rows.Count
Cells(i, 5).FormulaR1C1 = "=IF(ISNA(VLOOKUP(RC[-1],'C:\excel\[data.xlsm]工作表1'!R1C1:R7C2,2,FALSE)),""0000"",VLOOKUP(RC[-1],'C:\excel\[data.xlsm]工作表1'!R1C1:R7C2,2,FALSE))"


If Cells(i, 5) = "0000" Then '可省略
Cells(i, 5).NumberFormatLocal = "@" '可省略
Cells(i, 5).FormulaR1C1 = "0000" '可省略
Else '可省略
Cells(i, 5) = Cells(i, 5)
End If '可省略

Next
'========================================
ActiveWorkbook.Close savechanges:=True
filecount = filecount + 1
filename = Dir

Loop

End Sub

保留一些部份沒加上,您要自己改,我不會幫您改,提示很明顯了
我會回答只是因為有2位高手先回答了
所以交流一下處理問題的方式
不然這種公司的問題,我通常無視


如果您改好的話,不用開啟data檔
自動處理目錄內所有檔案,約1秒1個檔
(我有用您的排列方式,檔名、工作表名稱測試過了,確定可正常執行)

一、目錄、工作表名稱、公式data檔的路徑
二、多加一個if ,檔名是data時不開啟
不加的話,必需把data放到別的地方

或是您直接用yuehmao那個強大的巨集就可以了
snare wrote:
到底是用了幾個程式...(恕刪)


其實,在後來看了 Snare大大 對這個CASE的處理方式之後,
在下也是同感用這樣的處理方式感覺是會方便得多,
原先,由於在下還未熟悉有關 Workbook 的文件開啟和關閉方面的操作,
以及如何查詢資料夾中的文件,所以最初就只想到用把文件先全部手動開啟的方式來做處理,也因此才會弄了上面那一個巨集...^^"
所以,原本的對這個CASE運作的想法是,首先把巨集直接寫在 公式來源的表格(DATA.xls) 中,
然後要做公式複製,就是先開啟 DATA.xls ,接著再開啟 清單 1 2 3 4 這四個 .xls 文件來做公式複製的動作。

然而,現在在下也正改採用 Snare大大 在上頭給的文件處理範例做為參考,
以其中的處理方式做為IDEA,來另外試作一個巨集處理文件,在完成之後就會貼上來了。
已完成公式複製Excel作業文件 第一版本,樓主如有需要請先測試看看喔,
有問題可以再反映,在下會再做修改。


附加壓縮檔: 201705/mobile01-6d39f45d20c43480c7aaf56d574583ae.zip


還有 第二版本 尚在編修中...



另外,下面這是最上頭先前弄的 複製巨集 Debug版,預設起動鍵:ctrl+Shift+c
不過這個巨集的使用必需先將 公式來源 和 目標表格 都先一併開啟,才可以執行巨集做複製動作,
但是複製目標參照也只能指定固定的區域範圍,而範圍大小可以自訂。

附加壓縮檔: 201705/mobile01-b192628e7f0306f27eb45397f86f2be7.zip

yuehmao wrote:
已完成公式複製Excel作業文件 第一版本...(恕刪)


看完了…

我通常只回答關鍵的部份,其它要讓提問者自己想辦法補上

而您把,美觀 + 幾乎所有可能出現的使用者操作錯誤,全寫上了

不管程式難度如何,但這種處理方式,己達外面的收費標準

您對提問者太好了

感想是,您是一個非常熱心的人
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!