返回列表 上一主題 發帖

不好意思 新手又來請教 資料比對問題 麻煩各位了

vba 比對資料問題

不好意思 小弟這問題已經困擾很久 實在想不出來 所以上來求救 ,謝謝大家撥時間幫我看

有兩個excel檔,如附件

book1裡面的c sheet 是我想要建立一個button的地方,按下去之後能夠做以下動作

目的是希望能夠把book2 (b sheet) 裡面的資料 抓到book1的 (a sheet ),

也就是把顏色標出來的地方book2.b.sheet,COPY到book1.a.sheet

附檔的顏色是我後來加上去的,只是為了方便描述 ,

part_id 填完了往右邊儲存格shift一位 依此類推,

ope_no只需抓後三碼 前後需要固定用(),用,號隔開,每個數字都要有 ' '

內容已經簡化,實際上的table資料蠻多,不單只是兩筆, 我認為要用for迴圈 但還很嫩 不太熟 請教各位了

以上  感激不盡
question.rar (4.6 KB)

TOP

請問板大 不好意思 再請教一個問題 這樣的需求我可以參考書籍中的哪些function ? 謝謝

TOP

回復 2# ffntldj
特殊的需求 要自訂函數 你1 樓的需求 說的不清楚  book2  b欄 是遇到ope_no的下一列取3碼後的嗎?
a,d,e.f 如何來的
a        111
part_id        12345
ope_no        ('333','444','555','777')
d        444
e        555
f        666
f        777

TOP

板大你好~adef 只是我假設有其他的欄位已經在book1裡面,在book1中主要是去看ope_no 跟part_id 這兩個儲存格右手邊的資料(parit-id---->12345, ope_no ---> 333 444 555 777),這些資料是從book2裡面的b sheet來的,只是在book2 copy過來之後 在book1要做一些修改 ,ope_no 就是要變為 ('333','444','555','777')加上括弧,逗號和分號
partid 則是如果在book2裡面有一個以上的part_id出現時 ,在填入book1的時後,要變成  part id  12345   5678 (5678要填在12345旁邊那個儲存格)      

不知道這樣有清楚嗎? 謝謝你 我也會自己在試著寫~

TOP

回復 4# ffntldj
還是不清楚 ,範例請不要隨便列舉

TOP

回復 4# ffntldj


    就單純把book2的b工作表中part_id對應modify後3碼填入a工作表的第2、3列
  1. Sub nn()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. With Workbooks.Open("D:\book2.xls") '檔案路徑自行修改
  4. With .Sheets("b")
  5. For Each a In .Range(.[A1], .[A65536].End(xlUp))
  6.   If a = "part_id" Then mystr = a.Offset(, 1).Text
  7.   If a = "modify" Then
  8.      If d(mystr) = "" Then
  9.         d(mystr) = "'" & Right(a.Offset(, 1), 3) & "'"
  10.         Else
  11.         d(mystr) = d(mystr) & ",'" & Right(a.Offset(, 1), 3) & "'"
  12.      End If
  13.   End If
  14. Next
  15. End With
  16. .Close
  17. End With
  18. With Sheets("a")
  19. k = 2
  20. For Each ky In d.keys
  21.    .Cells(2, k) = ky
  22.    .Cells(3, k) = "(" & d(ky) & ")"
  23. k = k + 1
  24. Next
  25. End With
  26. End Sub
複製代碼
學海無涯_不恥下問

TOP

@超級版主   謝謝你 我在研究一下你的寫法  
@版主    抱歉 我在描述清楚一點 謝謝

TOP

謝謝兩位版主, code我已經看完了也看懂了,也自己試著做了一些修改 非常感謝
有兩個問題想請教
第一個問題就是 以下這段code為什麼沒有對應的end if? 是不需要嗎?
If a = "part_id" Then mystr = a.Offset(, 1).Text
第二個問題是
這個code主要是把part_id 可以跟 ope_no去做對應 ,如下表示
part_id                   y                   z
                   ('356','456')        ('556')
如果我想改成
part_id                   y                              z
                   ('356','456','556')      
應該是修改以下這一段code,試了一下午,可否再教我一下 感激不盡
If d(mystr) = "" Then
     d(mystr) = "'" & Right(a.Offset(, 1), 3) & "'"
      Else
      d(mystr) = d(mystr) & ",'" & Right(a.Offset(, 1), 3) & "'"
     End If

TOP

本帖最後由 Hsieh 於 2011-7-20 20:58 編輯

回復 8# ffntldj
問題1
IF陳述式的語法兩種
1.   
If 判斷式 then 執行陳述式
2.   
If 判斷式 then
          執行TRUE陳述式
       Else
          執行False陳述式
End If
問題2
這樣你就不分part_id
只是把所有modify的號碼全寫入同一個儲存格嗎?
  1. Sub nn()
  2. With Workbooks.Open("D:\book2.xls") '檔案路徑自行修改
  3. With .Sheets("b")
  4. For Each a In .Range(.[A1], .[A65536].End(xlUp))
  5.   If a = "modify" Then
  6.      If mystr = "" Then
  7.         mystr = "'" & Right(a.Offset(, 1), 3) & "'"
  8.         Else
  9.         mystr = mystr & ",'" & Right(a.Offset(, 1), 3) & "'"
  10.      End If
  11.   End If
  12. Next
  13. End With
  14. .Close
  15. End With
  16. With Sheets("a")
  17.    .Cells(3, 2) = "(" & mystr & ")"
  18. End With
  19. End Sub
複製代碼
學海無涯_不恥下問

TOP

謝謝版主你熱心的回覆 真的很感謝

有問題想請教 上面這各code的mystr 不用定義嘛?? 不用用到Dictionary了?這樣寫是定義mystr是矩陣的意思嘛?

我應該是不分part id 把ope_no寫進去儲存格裡沒錯
但是part_id 是要分儲存格的 如下面 y z 這樣
part_id                   y                      z            
                       ('356','456','556')      

我會好好努力的 謝謝

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題