返回列表 上一主題 發帖

[發問] INDIRECT後取值

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

回復 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

回復 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

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題