Board logo

標題: 請教vba的撰寫問題 [打印本頁]

作者: lionliu    時間: 2014-4-30 18:06     標題: 請教vba的撰寫問題

本帖最後由 lionliu 於 2014-4-30 18:07 編輯

各位大哥好
小弟試著寫出下列程式但是會有問題,請教要如何解
第9行會代出公式,但是代不出資料。
第10行會出錯。

1.  Sub trnprg()
2.  Dim myrow As Long
3.  Dim myrange As Range
4  Dim i As Integer
5  myrow = Range("a1").End(xlDown).Row
6 For i = 2 To myrow
7    Set myrange = Cells(i, 1)
              
8       If myrange <> Empty Then
9             Cells(i, 2).FormulaR1C1 = "=VLOOKUP(CELLS(1,I),Jsc_Data!A:G,6,FALSE)"
10          Cells(i, 5).FormulaR1C1 = "=CONCATENATE(""代墊款""," - ",LEFT(cells(i,2))"
         
11      End If
12  Next i
     
  13 Set myrange = Nothing
   
14  End Sub
作者: GBKEE    時間: 2014-5-1 17:34

回復 1# lionliu
  1. Option Explicit
  2. Sub trnprg()
  3.     Dim myrow As Long
  4.     Dim myrange As Range
  5.     Dim i As Integer
  6.     myrow = Range("a1").End(xlDown).Row
  7.     For i = 2 To myrow
  8.         Set myrange = Cells(i, 1)
  9.         If myrange <> Empty Then
  10.           'Cells(i, 2).FormulaR1C1 = "=VLOOKUP(" & Cells(1, i) & ",Jsc_Data!A:G,6,FALSE)" '<-是R1C1,但有A:G
  11.          
  12.           'FormulaR1C1 傳回或設定物件的公式,用巨集語言的 R1C1 樣式符號表示
  13.           'Cells(i, 2).FormulaR1C1 = "=VLOOKUP(" & Cells(1, i) & ",Jsc_Data!A:C1:C7,6,FALSE)"
  14.          
  15.           'Formula 傳回或設定 A1 樣式的物件公式
  16.           'Cells(i, 2).Formula = "=VLOOKUP(" & Cells(1, i) & ",Jsc_Data!A:G,6,FALSE)"
  17.           '
  18.           Cells(i, 2) = "=VLOOKUP(" & Cells(1, i) & ",Jsc_Data!A:G,6,FALSE)"  '簡單一點
  19.          
  20.           '但 VLOOKUP 傳回#N/A 時 Cells(i, 5).FormulaR1C1 會錯誤
  21.             Cells(i, 5).FormulaR1C1 = "=CONCATENATE(""代墊款"", "" - "",Left(""" & Cells(i, 2) & """,2))"
  22.             If Not IsError(Cells(i, 2)) Then Cells(i, 5) = "代墊款  - " & Left(Cells(i, 2), 2)
  23.             '何不改為如此
  24.         End If
  25.     Next i
  26.     Set myrange = Nothing
  27.   End Sub
複製代碼

作者: lionliu    時間: 2014-5-2 08:26

感謝gbkee大個的教學:
      
     謝謝GB大哥解惑喔,原來還有這麼多的訣竅在裡面。
我想好多基本觀念都被我給忽略掉了,在大哥詳細解說下又幫我開了一扇窗。
我要趕快來測試啦,有問題在向大家報告。

:D :D :D
作者: lionliu    時間: 2014-5-2 14:07

GB大大
  經過測試後VLOOKUP的部分還是不行,只出現公式
可否幫我看一下。
[attach]18202[/attach]
作者: GBKEE    時間: 2014-5-2 15:13

回復 4# lionliu
  1. 工作表函數VLOOKUP
  2. VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
  3. Lookup_value    是您打算在陣列的最左欄中搜尋的值。Lookup_value 可以是數值、參照位址或文字字串。
複製代碼
Lookup_value: 當搜尋的值是字串,但你不是指定參照位址時
工作表上的函數公式=VLOOKUP("PB04002",ABC_Data!A1:G50,7,FALSE)
  1. Cells(i, 2) = "=VLOOKUP(""" & Cells(i, 1) & """,ABC_Data!a:g,7,FALSE)"
  2.           'Cells(i, 2) = "=VLOOKUP(" & Cells(i, 1) & ",ABC_Data!a1:g50,7,FALSE)"
  3.          
複製代碼

作者: lionliu    時間: 2014-5-2 16:48

本帖最後由 lionliu 於 2014-5-2 16:50 編輯

回復 5# GBKEE
謝謝gb的解答已經可以了。
請叫大哥有關於類似位址的寫法,是否都可用  """ & cells(i ,j) & """   這樣來處理呢
還是這是取該欄位的值,若要取位置(A2)應如何處理
作者: GBKEE    時間: 2014-5-3 15:46

回復 6# lionliu
  1. Cells(i, 2) = "=VLOOKUP(" & Cells(i, 1).Address & ",ABC_Data!a:g,7,FALSE)"
複製代碼
但你附檔的工作表ABC.[B4]開始的儲存格格式都是文字,需改成通用格式
作者: lionliu    時間: 2014-5-4 08:58

回復 7# GBKEE


   謝謝gb大哥,測試已可以。





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