返回列表 上一主題 發帖

[發問] 如何在同一個儲存格打上代碼跑出對應的資料

回復 1# j2888237
試試看:
  1. Option Explicit
  2. '每新增一張 Worksheet, 就將此VBA複製過去
  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4.     Dim rngD, rngA As Range, sh1 As Worksheet, endRow As Integer
  5.     Dim 代碼
  6.     Set sh1 = Sheets("車子資料")
  7.    
  8.     endRow = sh1.[A2000].End(xlUp).Row
  9.     Set rngA = sh1.[A2].Resize(endRow, 1)
  10.    
  11.     endRow = [D2000].End(xlUp).Row
  12.     Set rngD = [D2].Resize(endRow, 1)
  13.    
  14.     If Not Intersect(Target, rngD) Is Nothing Then
  15.         代碼 = Application.Match(Target, rngA, 0)
  16.         On Error Resume Next
  17.         Target = sh1.[A1].Offset(代碼, 2)
  18.     End If
  19. End Sub
複製代碼

TOP

本帖最後由 yen956 於 2014-3-22 04:44 編輯

回復 6# j2888237
抱歉, 沒注意到日期往橫的,
請將
Set rngD = [D2].Resize(endRow, 1)
改成
Set rngD = [D2].Resize(endRow, 31)
就可以了, 抱歉!!

如果日期改成從[E2]開始, 則
Set rngD = [E2].Resize(endRow, 31)
就可以了

若改
Set rngE = [E2].Resize(endRow, 31)
則這裡也要改
If Not Intersect(Target, rngE) Is Nothing Then

TOP

回復 8# j2888237
大大你好:
請將
    '由[D2000]開始向上查, 直到找到非空白格為止
    endRow = [D2000].End(xlUp).Row
改成(因司機在 欄C)
    '由[C2000]開始向上查, 直到找到非空白格為止
    endRow = [C2000].End(xlUp).Row
也可改成 endRow = 2000, 固定 rngD 的範圍,
但範圍愈大. Excel 的執行效率愈差.
又上次沒說清, rngD 只是個變數(命名為 Rng, myRng, XY 均可),
與 欄D 無關, 與
    Set rngD = [D2].Resize(endRow, 31)
才有關.

TOP

        靜思自在 : 【時間如鑽石】時間對一個有智慧的人而言,就如鑽石般珍貴;但對愚人來說,卻像是一把泥土,一點價值也沒有。
返回列表 上一主題