返回列表 上一主題 發帖

[發問] INDIRECT後取值

[發問] INDIRECT後取值

本帖最後由 yc1031 於 2020-5-28 10:38 編輯

請問大家

1. 用INDIRECT取不同工作表的資料要怎麼辦到? 目前查到的用=INDIRECT($C$1&""&"B4"), 但也無法帶出貨料
2. 帶入資料後, 再怎麼全部以取值的資料帶到 資料貼入區? 我有試著用 f5 去取, 但都會取到空白格
    *帶到資料貼入區時, 要跳到空白列才能貼, 我是用Range("L4").End(xlDown).Offset(1, 0).Select

我也有把我的問題列在excel檔裡, 再請大家幫忙, 感謝!

2020年_帳戶進出記錄TEST.rar (63.28 KB)

回復 12# 准提部林


    十分感謝你!  問題已經有解決了。  再次謝謝

TOP

回復 11# yc1031

Sub 依帳戶貼入值()
Dim Sht As Worksheet, T$, R&, xE As Range
[驗算!I3:P6000].ClearContents
For Each Sht In Sheets
    If INSTR(Sht.NAME ,"#")=0 Then GoTo 101
    R = Sht.Cells(Rows.Count, 2).End(xlUp).Row - 3
    If R <= 0 Then GoTo 101
    Set xE = [驗算!I1].Cells(Rows.Count, 1).End(xlUp)
    xE(2, 3).Resize(R, 6) = Sht.[A4].Resize(R, 7).Value
    xE(2, 1).Resize(R) = Sht.Name
    xE(2, 2).Resize(R) = "#" & SPLIT(Sht.Name,"#")(1)
101: Next
End Sub

TOP

回復 10# 准提部林

你好,

謝謝幫忙! 想再請問一下, 若帳號#後, 不是用A-Z, 而是用數字表示, 類如 一銀#7777, 一銀#8888,  這樣的話, VBA碼要怎麼改呢?

TOP

回復 9# yc1031

用不到公式,
只要工作表名稱最後為"#"加英文字, 即自動陸續抓出有效範圍貼入值:

Sub 依帳戶貼入值()
Dim Sht As Worksheet, T$, R&, xE As Range
[驗算!I3:P6000].ClearContents
For Each Sht In Sheets
    T = Right(Replace(UCase(Sht.Name), "#", "$"), 2)
    If Not T Like "$[A-Z]" Then GoTo 101
    R = Sht.Cells(Rows.Count, 2).End(xlUp).Row - 3
    If R <= 0 Then GoTo 101
    Set xE = [驗算!I1].Cells(Rows.Count, 1).End(xlUp)
    xE(2, 3).Resize(R, 6) = Sht.[A4].Resize(R, 7).Value
    xE(2, 1).Resize(R) = UCase(Sht.Name)
    xE(2, 2).Resize(R) = Right(T, 1)
101: Next
End Sub


'=====================================

TOP

回復 7# 准提部林


感謝你解答我所有的問題!

第一步: S欄有新增/刪減帳戶工作表時可自動更新檔名  <----已OK
第二步: 帶入各帳戶明細到C~G欄位 <----已OK
第三步: 把C~G欄位的值貼入J~P ( 不覆蓋原本的資料) <--已OK
* 我試著用錄VBA的方式把U欄位的代碼輸入A1, 再執行"貼入值VBA", 但這樣只能一筆一筆試到Z,  有沒有辦法可以用T欄位來辨別, 意思是: 我只有A~G的帳戶, 那就是A1, 只輸入到G,  那H~Z就不用做了 (可日後若是新增帳戶就是往下繼續)

2020年_帳戶進出記錄TEST.rar (66.56 KB)

TOP

回復 6# n7822123



  感謝你! 我也試了幾次,原來單位格裡有公式的, 即使無資料,都會被COPY到,所以用F5, 我就篩不出來了。

TOP

1) 定義名稱
    =GET.WORKBOOK(1)&T(NOW())  加這個可以工作表新增或刪除而自動更新
2) C1公式
   =IF(A1="","",TRIM(RIGHT(SUBSTITUTE(LOOKUP(1,0/(RIGHT(QM)=A1),QM),"]",REPT(" ",99)),99)))
3) C3公式/右拉下拉
   =INDEX(INDIRECT("'"&$C$1&"'!B:F"),ROW($A1)+3,COLUMN(A$1))&""
4) B3公式/下拉
  =IF(C3="","",(N(B2)+1)^(C3=C2))

5) 轉貼VBA
Sub 轉貼()
Dim R, xE As Range
R = Application.Match(9E+307, [B:B])
If IsError(R) Then Exit Sub
Set xE = [J1].Cells(Rows.Count, 1).End(xlUp)(2)
With Range("A3:G" & R)
     xE.Resize(.Rows.Count, .Columns.Count) = .Value
End With
End Sub

以B欄數字為MATCH範圍, 用9E+307找到最後一筆


====================================

TOP

本帖最後由 n7822123 於 2020-5-28 14:12 編輯

回復 5# yc1031


謝謝你撥空幫我回答問題

第三步的取值, 是因為我不會用vba, 所以我才想用indirect去帶資料後, 錄vba取值貼到"資料貼入區", 之後再錄vba篩選排序, 弄到總表去
如果可以的話, 也是直接用vba 做第三步, 不曉得是否可以教我怎麼做?
* 我日後會再新增帳戶

用函數再用VBA的 End方法 會有問題的 End(xlUP) = 按住Ctrl + 鍵盤方向箭 向上

你可以做個小實驗,開一個新工作表

在[B2]儲存格 填入公式 B2 =""  (空資料)

手動複製B2儲存格,選擇 A8儲存格 滑鼠右鍵 > 選擇性貼上 > 值

然後選擇 A15 儲存格 (A8以後都行) 按住Ctrl + 鍵盤方向箭 向上  儲存格會停留在A8 不是 A1

雖然A8 看起來沒有人任何東西!  這是Excel 一直有的問題 ,UsedRange也有同樣問題

準備上班去了,你要的第3步不難,

看這裡有沒有人幫你寫,沒有的話我上班回來再幫你

程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 2# n7822123


你好,

謝謝你撥空幫我回答問題

第三步的取值, 是因為我不會用vba, 所以我才想用indirect去帶資料後, 錄vba取值貼到"資料貼入區", 之後再錄vba篩選排序, 弄到總表去
如果可以的話, 也是直接用vba 做第三步, 不曉得是否可以教我怎麼做?
* 我日後會再新增帳戶

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題