標題:
[發問]
如何自行判斷並填入
[打印本頁]
作者:
j88141
時間:
2014-4-22 21:14
標題:
如何自行判斷並填入
本帖最後由 j88141 於 2014-4-22 21:15 編輯
請問在原始資料中(檔案1)有五個地名
[attach]18120[/attach]
然後想要用VBA判斷並自動填入到另一個excel檔案(檔案2)
像下列這樣
[attach]18116[/attach]
請問有辦法嗎
[attach]18119[/attach]
作者:
GBKEE
時間:
2014-4-23 06:17
本帖最後由 GBKEE 於 2014-4-27 05:56 編輯
回復
1#
j88141
自動填入到另一個excel檔案(檔案2)的ThisWorkbook程式碼
Option Explicit
Dim D As Object
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Rng As Range
Application.EnableEvents = False
If Target.Address = "$A$1" Then
Dictionary_Ex
Set Rng = Sh.[A2]
Do While Rng <> ""
If D.exists((Rng & Target)) Then '字典物件中有這 key 值
D(Rng & Target).Copy Rng.Offset(, 1).Resize(3)
Else
Rng.Offset(, 1).Resize(3) = ""
End If
Set Rng = Rng.Offset(, 2) '向左移動2欄
Loop
End If
Application.EnableEvents = True
End Sub
Private Sub Dictionary_Ex()
Dim Rng(1 To 2) As Range, i As Integer, a
Set D = CreateObject("SCRIPTING.DICTIONARY")
With Workbooks("Xl0000001.xls").Sheets("工作表1") '原始資料檔案必須是開啟的
Set Rng(1) = .[A1] 'A欄的星期是合併3列的儲存格
Do While Rng(1) <> ""
Set Rng(2) = Rng(1).CurrentRegion.Rows(Rng(1).Row & ":" & Rng(1).Row + 2)
'CurrentRegion 屬性 傳回 Range 物件,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀
'Rng(1).Row + 2 : Rng(1)所在的列號+ 2
For i = 2 To Rng(2).Columns.Count '星期的欄位從第2欄開始到最後一欄
Set D(Rng(1) & Rng(2).Cells(3, i)) = Rng(2).Columns(i)
'Rng(1) :星期 , Rng(2).Cells(3, i) :地名
Next
Set Rng(1) = Rng(1).End(xlDown) '下一個星期的位置
Loop
End With
End Sub
複製代碼
作者:
j88141
時間:
2014-4-23 12:46
回復
2#
GBKEE
輸入之後怎麼會出現編譯錯誤
Dictionary_Ex
這一個沒有定義sub或 function
作者:
j88141
時間:
2014-4-23 21:11
回復
3#
j88141
GBKEE老師
我還有一個問題
就是在資料2的A1 不是有地名嗎
可是好像要重新輸入 才會觸發VBA
請問該怎麼修改
或是加入一個CommandButton呢
作者:
GBKEE
時間:
2014-4-24 04:57
本帖最後由 GBKEE 於 2014-4-27 06:04 編輯
回復
4#
j88141
Option Explicit
Dim D As Object
Private Sub Ex() 'Excel檔案(檔案2),加入一個CommandButton 的程式碼
Dim SH As Worksheet, Rng As Range
Dictionary_Ex '執行這個程序
For Each SH In Sheets 'Sheets :Excel檔案(檔案2)中的工作表集合
Set Rng = SH.[A2]
Do While Rng <> ""
If D.exists(Rng & SH.[A1]) Then '字典物件中有這 key 值
D(Rng & SH.[A1]).Copy Rng.Offset(, 1).Resize(3)
Else
Rng.Offset(, 1).Resize(3) = ""
End If
Set Rng = Rng.Offset(, 2) '向左移動2欄
Loop
Next
End Sub
複製代碼
作者:
j88141
時間:
2014-4-27 00:33
回復
5#
GBKEE
GBKEE 老師
如果 我想把 地名 改變 如 原始資料金門改成台北
但在檔案二 好像 還是會自動搜尋金門 然後填入
我這兩天 查了 dictionary 這物件
知道 要用d.RemoveAll 來清除字典中的數據
但卻不知道如何加入
順便一問 看不太懂這一句...
Set Rng(2) = Rng(1).CurrentRegion.Rows(Rng(1).Row & ":" & Rng(1).Row + 2)
謝謝GBKEE 老師
作者:
GBKEE
時間:
2014-4-27 06:05
回復
6#
j88141
2# ,5# 的程式碼都更新,可再看一次
作者:
j88141
時間:
2014-4-28 22:29
回復
7#
GBKEE
GBKEE 老師
這是我想出來的
因為一開始的 只有一個符合項目 就可以填入檔案2中
那如果需要符合 兩個項目 才可以填進
那程式碼需要怎麼改才行
[attach]18184[/attach][attach]18185[/attach]
[attach]18186[/attach]
作者:
GBKEE
時間:
2014-4-29 07:04
回復
8#
j88141
兩檔案的"中午" 這字串要一致
Option Explicit
Dim D As Object
Private Sub Ex() 'Excel檔案(檔案2),加入一個CommandButton 的程式碼
Dim SH As Worksheet, Rng As Range, i As Integer
Dictionary_Ex '執行這個程序
For Each SH In Sheets 'Sheets :Excel檔案(檔案2)中的工作表集合
Set Rng = SH.[A3] '編號
Do While Rng <> ""
For i = 4 To SH.UsedRange.Columns.Count
If D.exists(SH.Cells(2, i) & Rng & SH.[A1]) Then '字典物件中有這 key 值
'key 值-> 星期 & 編號 & 地名
'星期: Sh.Cells(2,i)
'編號: Rng
'地名" SH.[A1]
D(SH.Cells(2, i) & Rng & SH.[A1]).Copy Rng.Cells(1, i).Resize(4)
Else
Rng.Cells(1, i).Resize(4) = ""
End If
Next
Set Rng = Rng.End(xlDown) '下一個星期的位置
Loop
Next
End Sub
Private Sub Dictionary_Ex()
Dim Rng(1 To 3) As Range, i As Integer, a
Set D = CreateObject("SCRIPTING.DICTIONARY")
With Workbooks("Xl0000001.xls").Sheets("工作表1") '原始資料檔案必須是開啟的
Set Rng(1) = .[A4] '星期
Do While Rng(1) <> ""
Set Rng(2) = Rng(1).Offset(, 1) '編號
Do While Not Intersect(Rng(1).MergeArea, Rng(2).Offset(, -1)) Is Nothing
For i = 4 To .UsedRange.Columns.Count - 1
If Rng(2).Cells(1, i) <> "" Then '
Set D(Rng(1) & Rng(2) & Rng(2).Cells(3, i)) = Rng(2).Cells(1, i).Resize(4)
'地名: Rng(2).Cells(3, i)
End If
Next
Set Rng(2) = Rng(2).End(xlDown) '下一個編號的位置
Loop
Set Rng(1) = Rng(1).End(xlDown) '下一個星期的位置
Loop
End With
End Sub
複製代碼
作者:
j88141
時間:
2014-5-1 00:43
回復
9#
GBKEE
謝謝GBKEE 老師
我學到很多
作者:
j88141
時間:
2014-10-27 22:07
本帖最後由 j88141 於 2014-10-27 22:08 編輯
回復
9#
GBKEE
GBKEE大:
如果我想要把檔案二的"地區" 改成輸入 檔案一的 "符號"
也就是從E3開始算起的A、B、C等
檔案一 檔案二
[attach]19401[/attach]
請問GBKEE大該怎麼修改?
謝謝~~~
[attach]19402[/attach]
作者:
GBKEE
時間:
2014-10-28 06:16
回復
11#
j88141
如果我想要把檔案二的"地區" 改成輸入 檔案一的 "符號"
也就是從E3開始算起的A、B、C等
複製代碼
附檔上 檔案二的"符號" 在哪裡判斷??
作者:
j88141
時間:
2014-10-28 08:51
回復
12#
GBKEE
原本檔案二只要符合 檔案一的 " 星期 & 編號 & 地區 " 項目
檔案一就會自動判斷填入檔案二中
現在想要把檔案二自動輸入完畢後,在檔案二的 "地區"可以自動轉換成 檔案一的"符號"
[attach]19409[/attach]
作者:
GBKEE
時間:
2014-10-28 10:01
回復
13#
j88141
多加一字典物件
Dim D(1 To 2) As Object
Private Sub Ex() 'Excel檔案(檔案2),加入一個CommandButton 的程式碼
Dim SH As Worksheet, Rng As Range, i As Integer
Dictionary_Ex '執行這個程序
For Each SH In Sheets 'Sheets :Excel檔案(檔案2)中的工作表集合
Set Rng = SH.[A3] '編號
Do While Rng <> ""
For i = 4 To SH.UsedRange.Columns.Count
If D(1).exists(SH.Cells(2, i) & Rng & SH.[A1]) Then '字典物件中有這 key 值
'key 值-> 星期 & 編號 & 地名
'星期: Sh.Cells(2,i)
'編號: Rng
'地名" SH.[A1]
D(1)(SH.Cells(2, i) & Rng & SH.[A1]).Copy Rng.Cells(1, i).Resize(4)
Rng.Cells(1, i).Range("a3") = D(2)(SH.Cells(2, i) & Rng & SH.[A1])
Else
Rng.Cells(1, i).Resize(4) = ""
End If
Next
Set Rng = Rng.End(xlDown) '下一個星期的位置
Loop
Next
End Sub
Private Sub Dictionary_Ex()
Dim Rng(1 To 3) As Range, i As Integer, a
Set D(1) = CreateObject("SCRIPTING.DICTIONARY")
Set D(2) = CreateObject("SCRIPTING.DICTIONARY")
With Workbooks("檔案1.xlsx").Sheets("工作表1") '原始資料檔案必須是開啟的
Set Rng(1) = .[A4] '星期
Do While Rng(1) <> ""
Set Rng(2) = Rng(1).Offset(, 1) '編號
Do While Not Intersect(Rng(1).MergeArea, Rng(2).Offset(, -1)) Is Nothing
For i = 4 To .UsedRange.Columns.Count
If Rng(2).Cells(1, i) <> "" Then '
Set D(1)(Rng(1) & Rng(2) & Rng(2).Cells(3, i)) = Rng(2).Cells(1, i).Resize(4)
D(2)(Rng(1) & Rng(2) & Rng(2).Cells(3, i)) = .Cells(3, Rng(2).Cells(1, i).Column)
End If
Next
Set Rng(2) = Rng(2).End(xlDown) '下一個編號的位置
Loop
Set Rng(1) = Rng(1).End(xlDown) '下一個星期的位置
Loop
End With
End Sub
複製代碼
作者:
j88141
時間:
2014-10-29 20:54
TKS~
作者:
j88141
時間:
2014-11-2 22:46
回復
14#
GBKEE
GBKEE大
我發現一個問題
當檔案一要複製到檔案二中 時
如果 檔案一 同排有很多資料
但檔案二也只會選擇其中一個作複製
請問有沒有辦法 當檔案一同排資料多的時候, 檔案二可以全部複製到同一儲存格?
[attach]19460[/attach]
作者:
GBKEE
時間:
2014-11-6 14:54
回復
16#
j88141
請問有沒有辦法 當檔案一同排資料多的時候, 檔案二可以全部複製到同一儲存格
那要看你檔案二的工作頁儲存格的編排!!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)