Board logo

標題: [發問] Excel問題 [打印本頁]

作者: 黃志全    時間: 2015-10-25 09:51     標題: Excel問題

Excel問題
我在access中有一個Table,內有3個column分別為人名,欄位值,列位值,請問我要在excel中能依據欄I 位值和列位值座標自動顯示人名應如何達成。
人名       欄位值       列位值
黃甲乙       15              12
李丙丁       15              17
李泰山       16              19
作者: hcm19522    時間: 2015-10-25 11:21

http://blog.xuite.net/hcm19522/twblog/352087114
作者: lpk187    時間: 2015-10-25 11:40

本帖最後由 lpk187 於 2015-10-25 11:47 編輯

回復 1# 黃志全


    若用一般函數!我不會,不過利用VBA可以很容易達成你需要的答案
  1. Public Sub ex()
  2.     Dim myCon As Object
  3.     Dim myRs As Object
  4.     Dim TabName$, Sql$, i, arr
  5.     Set myCon = CreateObject("ADODB.Connection")
  6.     Set myRs = CreateObject("ADODB.Recordset")
  7.     myCon.Open "provider=Microsoft.ACE.OLEDB.12.0;" & _
  8.                "Data Source=" & ThisWorkbook.Path & "\人員.accdb;" '路徑用本程式路徑相同資料庫名稱為"人員.accdb"
  9.     TabName = "人員" 'Tabel 名稱
  10.     Sql = "SELECT * FROM " & TabName & "';" 'SQL語法,在 TabName 表單中拿出所有項目
  11.     Set myRs = myCon.Execute(Sql)
  12.     arr = myRs.GetRows '取出 Recordset 的項目成為陣列
  13.     For i = 0 To UBound(arr, 2)
  14.         Cells(arr(1, i), arr(2, i)) = arr(0, i) '
  15.     Next
  16.     myRs.Close
  17.     myCon.Close
  18.     Set myRs = Nothing
  19.     Set myCon = Nothing
  20. End Sub
複製代碼

作者: yen956    時間: 2015-10-26 12:14

本帖最後由 yen956 於 2015-10-26 12:18 編輯

回復 3# lpk187
謝謝 lpk187 大大, 又學到一招,
但     Cells(arr(1, i), arr(2, i)) = arr(0, i) '
似為  Cells(arr(2, i), arr(1, i)) = arr(0, i)   'arr(2, i)列位值, arr(1, i)欄位值
之手誤! 總之, 謝謝!!

我改用
    Do While Not myRs.EOF
        Cells(myRs("列位值"), myRs("欄位值")) = myRs("人名")
        myRs.MoveNext
    Loop
聽說速度較慢, 但較不易手誤!
作者: lpk187    時間: 2015-10-26 13:13

回復 4# yen956


    謝謝更正,把arr = myRs.GetRows取出陣列,只是讓人家容易在區域變數視窗中觀察其中的值,也沒有比較快,
利於學習而已,實際上還是要用你的方式去做




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