Board logo

標題: 請教excel 陣列問題 [打印本頁]

作者: lionliu    時間: 2015-7-12 12:00     標題: 請教excel 陣列問題

各位大哥:
小弟有一個excel陣列問題想要將工作表1,轉到工作表2。
並將品名重排但是一直出問題。
還有是否可以不辨東工作表1就直接產生工作表2內容。
[attach]21368[/attach]
作者: GBKEE    時間: 2015-7-12 15:41

回復 1# lionliu
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng As Range, i As Integer, Msg As Boolean
  4.     Set Rng = Sheets(1).[A2]
  5.     With Sheets(2)
  6.         .UsedRange.Clear              '.UsedRange的範圍 < .Cells的範圍,處裡速度會快些
  7.         .Range("a1").Resize(, 4) = Array("Description", "Qty", "Price", "Amount") '一起給值
  8.         i = 2                          '設定起始值
  9.         Do While Rng <> ""             'Rng ="" 迴圈停止
  10.             If Msg = False Then
  11.                 .Cells(i, "A") = Rng.End(xlUp) & ": " & Rng
  12.                 i = i + 1
  13.             End If
  14.             .Cells(i, "A") = Rng.Cells(1, 2).End(xlUp) & ": " & Rng.Cells(1, 2) 'item no
  15.             .Cells(i, "B").Resize(, 3) = Rng.Cells(1, 4).Resize(, 3).Value      'qty,price, amount
  16.             .Cells(i + 1, "A") = Rng.Cells(1, 3)                                'Description
  17.             i = i + 2
  18.             Msg = False                              '設 po no 不相同
  19.             If Rng = Rng.Offset(1) Then Msg = True    'po no 相同
  20.             Set Rng = Rng.Offset(1)                  '下移一列
  21.         Loop
  22.     End With
  23. End Sub
複製代碼

作者: lionliu    時間: 2015-7-13 14:25

回復 2# GBKEE
謝謝gb大哥已可以用了,現在正嘗試把它吃透。
作者: lionliu    時間: 2015-7-17 10:13

回復 2# GBKEE
gbkee大哥好
小弟有將資料表和巨集內容進行修正,但是因為對照資料表rng問題,
無法將所有資料過到工作表2,不知應如何修正。[attach]21404[/attach]
作者: GBKEE    時間: 2015-7-17 12:31

回復 4# lionliu
這附檔與第1帖附檔格式不一樣.請再詳述這附檔的格式.
作者: lionliu    時間: 2015-7-17 16:30

本帖最後由 lionliu 於 2015-7-17 16:39 編輯

回復 5# GBKEE
不好意思,沒敘述清除
我的工作表一增加G、H欄,H只取","右邊的字串。
SHEETS(2) A欄的順序是如下,並將AMOUNT改成公式求得                                                        

         Description        Qty        Price        Amount
          po no : as123                                           'SHEETS(1)的A欄
          item no: ab11201        2        12        24      'SHEETS(1)的B欄
         FGHRT                 'SHEETS(1)的H欄 ","右邊字串  DSC                       
         acs 102 cdes                                           'SHEETS(1)的C欄
       AB3456                                                    'SHEETS(1)的G欄        
        
       item no: ab11200        23        10        230
        FGHRT                       
       zxc 2304 df                       
       AB3456                       
      
        item no: ab11203        24        10        240
        ERTT                       
        zxc 2335 df                       
        AC780F                       
不曉得說明是否清楚
作者: lionliu    時間: 2015-7-18 08:33

回復 5# GBKEE
附上修改後壓縮檔內有說明[attach]21408[/attach]
作者: GBKEE    時間: 2015-7-18 13:06

回復 7# lionliu
不好意思,看不出附檔的規律性,VBA寫不出來.
作者: lionliu    時間: 2015-7-18 20:45

本帖最後由 lionliu 於 2015-7-18 20:50 編輯

回復 8# GBKEE
其實是我不好意思,受到gb大哥的教導獲益良多,我會再努力去完成它
,還是要再此跟你說謝謝。我想若能克服工作表1的ROW值與工作表2的ROW對應問題即可。
作者: GBKEE    時間: 2015-7-19 07:13

回復 9# lionliu

第2帖的程式碼
Rng 不就是 第一個工作表的Row
i  是 第二個工作表的Row
  1.   Set Rng = Sheets(1).[A2]
  2. 05.    With Sheets(2)
  3. 06.        .UsedRange.Clear              '.UsedRange的範圍 < .Cells的範圍,處裡速度會快些
  4. 07.        .Range("a1").Resize(, 4) = Array("Description", "Qty", "Price", "Amount") '一起給值
  5. 08.        i = 2                          '設定起始值
  6. 09.        Do While Rng <> ""             'Rng ="" 迴圈停止
  7. 10.            If Msg = False Then
複製代碼

作者: lionliu    時間: 2015-7-19 11:33

本帖最後由 lionliu 於 2015-7-19 11:35 編輯

回復 10# GBKEE
剛剛在測試一次,結果是:DO WHILE RNG <>"" ,RNG=11 結束,SHEETS 2 RUN到 ROW =11時尚未結束,
這一段程式會出錯strcomma = WorksheetFunction.Find(",", Sheets(1).Cells(i, 8)),
所以我才這樣懷疑,但是當我停掉此錯誤又能跑完全。
不知此段語法哪裡出錯,還是不應該放在此位置,若有錯前3項又能產生感到非常不解。
作者: GBKEE    時間: 2015-7-19 14:03

回復 11# lionliu
是這樣嗎?
  1. R = Rng.Cells(1, 8).Value
  2.             strcomma = WorksheetFunction.Find(",", R) '修改位置 H欄,
  3.             lenstr = Len(R)
  4.             dsc = Right(R, lenstr - strcomma)
複製代碼

作者: lionliu    時間: 2015-7-20 11:45

回復 12# GBKEE
還是錯但問題不一樣

[attach]21429[/attach][attach]21430[/attach]
作者: GBKEE    時間: 2015-7-20 13:45

回復 13# lionliu
參考看看
  1. Dim R As String         '型態為字串

  2. '這裡也要修改 當作用中的工作表是工作表1時 會有 "型態不符合的錯誤
  3. '.Cells(i, 4) = Cells(i, 2) * Cells(i, 3)        '修改位置 D欄由計算求值

  4. .Cells(i, 4) = .Cells(i, 2) * .Cells(i, 3)                             '修改位置 D欄由計算求值
複製代碼

作者: lionliu    時間: 2015-7-20 15:14

回復 14# GBKEE
謝謝gb大哥的教導可以了,但是卻有地方有疑問。
r=rng.cells(1,8).value 為何不是 r=rng.cells( i , 8).value
作者: GBKEE    時間: 2015-7-20 20:05

回復 15# lionliu
看看位置的差異
  1. MsgBox rng.Cells(1, 8).Address  '為何不是
  2. MsgBox rng.Cells(i, 8).Address
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)