Excel VBA 合併資料

情況係

有N個Office 交Excel Report , Report個格式已經係A4 樣,可以直接印出黎.......
大約係咁,雖然份份都係一樣,但係....唔係整齊一行行,可以比我簡單合併的。
AABBCC.jpg
2019-10-17 16:03

Number 1 果格 實際係合併儲格既問題....右格入數字....
Number 2 果格 實際係長長長既問題....右格入數字......

當Office 叫 AA , 咁佢就會出個AA ASD.xlsx比我,BB 就會出個BB ASD.xlsx比我
All Report.jpg
2019-10-17 16:18

我就要將佢地 合併到 All_Report.xlsx 變做一張橫直整齊既Sheet
大約係咁, All_Report入面張Sheet1 已經有齊Office Code

簡單黎講就係....因為資料格分散,用唔到合併表格,而又要合併表格........

剛剛開始上BB班既 VBA堂 , 只係介紹開頭,未開始寫Code
唔知應該係 read 左All_Report 入面既OFFICE 名 去搵FILE , 再攞DATA
定係read 個FILE 名,對返All_Report 入面既OFFICE 名, 再貼上DATA......

( 個VBA係第3張Excel到整的 .xlsm )

求高手提示應該用咩CODE去整
同 個流程應該係點行

TOP

vba係網上search下都夠玩,洗咩出去學,學4,5個已經可以玩到天花龍鳳,寫prog唔係話學一句就得一個用法,加啲創意,真係5句能走天下

via HKEPC IR Pro 3.6.1 - Android(3.3.1)

TOP

if cell(a,1)=$$,then cell(a,2)=**

via HKEPC IR Pro 3.6.1 - Android(3.3.1)

TOP

sub xxxxx
dim i, fn
set all_r = workbooks("All_Report.xlsx").sheets("Sheet1")

i = 2
while not isempty(all_r.cells(i,1))
    fn = all_r.cells(i,1)+" ASD.xlsx"
    if dir(fn,vbnormal) <> ""
        workbooks.open(fn)
        all_r.cells(i, 2) = cells(2,3)
        all_r.cells(i, 3) = cells(4,3)
        all_r.cells(i, 4) = cells(6,5)
        all_r.cells(i, 5) = cells(8,5)
        all_r.cells(i, 6) = cells(10,5)
        activeworkbook.close false
    endif
    i = i +1
wend
end sub

TOP

Google 到既都係 本身要被合併既 資料係XY整整齊齊,只係減少複製貼上既時間。

我個情況係 雖然表格一樣
但係入面要抄走既資料 係分散開50個不相連既格仔。。。

另外。。。
就係自學睇唔明先去上個堂。。。T. T
上網搵既係當你已經識基本上語法結構既。。。
冇得問姐係點呀,淨睇文字,好多時真係唔知佢跳左去邊。。。。。。

只係知道做左,但係唔知點解。。。
簡稱 下次用唔返,或唔識點變化。。。
版竹我學習能力好低嫁ja.....
.

TOP

sub xxxxx
dim i, fn
set all_r = workbooks("All_Report.xlsx").sheets("Sheet1")

i = 2
while not isemp ...
salaryman 發表於 2019-10-18 08:09


謝謝

有3分1唔知做緊咩
返去研究下先

TOP

本帖最後由 黑道明 於 2019-10-18 10:32 編輯
sub xxxxx
dim i, fn
set all_r = workbooks("All_Report.xlsx").sheets("Sheet1")

i = 2
while not isemp ...
salaryman 發表於 2019-10-18 08:09


試左個CODE , 完全成功 , 我會再增加修改做實際既版本
我試下講下個Code 發生緊咩事, 大大睇下我有冇理解錯....

Sub Button1_Click()
' 我用左Button 去做, 暫時叫 Button1_Click 先
Dim i, fn'唔明呢度 , 係 設緊D咩?? , Dim 唔係要跟 As 咩類型嫁咩
'好似Dim i As Text 咁
' 依家 i,fn ,又唔係Dim緊一個座標 , 但係又RUN到......唔明........

Set all_r = Workbooks("All_Report.xlsx").Sheets("Sheet1")
'為簡化下面既Code , 所以 Set 個長既 Path 做幾隻字

i = 2
'由第2行開始

    While Not IsEmpty(all_r.Cells(i, 1))
    ' 當 i,1 果格 , 唔係 空白格
        fn = all_r.Cells(i, 1) + " ASD.xlsx"
        '咁 fn 就係 該格數據( 為什麼不用加 .Value?? ) 及 " ASD.xlsx"
            If Dir(fn, vbNormal) <> "" Then            
            ' 成句唔明 , 網上話係檢查文件是否存在,但係個流程同用法唔明
            
                Workbooks.Open (fn)               
               ' 開檔案
                all_r.Cells(i, 2) = Cells(2, 3)
                all_r.Cells(i, 3) = Cells(4, 3)
                all_r.Cells(i, 4) = Cells(6, 5)
                all_r.Cells(i, 5) = Cells(8, 5)
                all_r.Cells(i, 6) = Cells(10, 5)               
' 對格仔抄數據


                ActiveWorkbook.Close False
                ' 關檔案
            
            End If
            ' 完左個IF

        i = i + 1
        ' 唔係完左個 Wend 之後 先+1 , 再Loop While 嫁咩??
        ' 但係 放呢度先Work , 完全唔明.........

    Wend

End Sub
------------------------------------------------------------------
我自己尋日諗中間個流程係

If 名字=檔案i Then
打開
A=B
C=D
關閉
i+1
Else
i+1

前前後後 中間點寫係.....唔知點算XD

TOP

1) Dim i,fn
呢句係宣示i, fn兩個係local variable, 即係當Botton1_click運行中使用
正確句法應該係兩行:
Dim i as integer
Dim fn as string
但懶人寫小Program就會省略, 省略左VBA就會當佢個係Variant type.
小Program咁做無問題, 但大型Program就最好寫清楚

2) 咁 fn 就係 該格數據( 為什麼不用加 .Value?? ) 及 " ASD.xlsx"
cells(i,j) 正確寫法後邊應該加 => cells(i,j).value
乜都唔加 VBA default會認為係.value, 所以人懶唔加係可以嘅

3) If Dir(fn, vbNormal) <> "" Then  
呢句檢測個e.g. "CC ASD.xlsx" 存唔存在, 如果唔存在就SKIP下一個OFFICE
如果冇呢個檢測, 已CC office 又冇交Report, 咁個Program就會停左出Error,
因為下句 workbooks.open("CC ASD.xlsx") 彈ERROR

4) i = i + 1 wend
wend 之後緊接番去while, 所以要在wend之前加一, 咁個while先會檢測下一行

TOP

1) Dim i,fn
呢句係宣示i, fn兩個係local variable, 即係當Botton1_click運行中使用
正確句法應該係兩行:
D ...
salaryman 發表於 2019-10-18 12:08



    原來係咁~~~
食完飯之後 開始整複雜版

TOP