簡體   English   中英

VBA Excel 添加新工作表時公式中單元格編號的自動增量

[英]VBA Excel autoincrement of cell number in the formula when new worksheets are added

下午好,

我想在添加新工作表時自動更改公式。 單元格值將大致每 13 步更改一次,它們出現在 excel IF 語句中。 正如您在下圖中看到的那樣,我希望有 13 步的增量,因為公式將引用位於 NIM & BADGER 表中每 13 步以下的單元格。 在表 CAB1 中,這是 G33,在表 CAB2 中應該是 G46,在表 CAB3 - G59 中,依此類推......

在此處輸入圖像描述

我的公式是基於 IF 語句的,所以可以按照這里的解決方案寫成 VBA:

在 VBA 中使用 IF 公式

接下來,我需要每 13 步更換一次單元格。 我在這里發現了一些類似的問題和解決方案:

將 excel 公式加 1

在多個工作表上增加值

我嘗試用以下代碼編寫它:

 Sub Value()

 Dim i As Long
 Dim xNumber As Long, xValue As Long
 Dim xName As String
 Dim ws As Worksheet

 Application.ScreenUpdating = False

 Set ws = Sheets("CAB1")
 xNumber = Sheets("NIM & BADGER").Range("R27").Value
 xValue = 33

 For i = 1 To Number
 ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)
 ActiveSheet.Name = "CAB" & i + 1
 Sheets("CAB" & i + 1).Range("E43").Formula = "=IF('NIM & BADGER'!G" & xValue + (13 * i) & "=0,"",'NIM & BADGER'!G" & xValue + (13 * i) & ")"
 Next

 ws.Activate

 Application.ScreenUpdating = True

 End Sub

我有一個錯誤:應用程序定義的或對象定義的錯誤

調試器指向以下行:

  Sheets("CAB" & i + 1).Range("E43").Formula = "=IF('NIM & BADGER'!G" & xValue + (13 * i) & "=0,"",'NIM & BADGER'!G" & xValue + (13 * i) & ")"

添加一個或多個工作表時,如何自動更改這些公式(單元格編號)?

衷心感謝任何幫助。

更新:

我玩了一些引號,但結果保持不變......

   Sheets("CAB" & i + 1).Range("E43").Formula = "=IF('NIM & BADGER'!G" & xValue + (13 * i) & "=0,'','NIM & BADGER'!G" & xValue + (13 * i) & "')"

可以把它寫成一個公式。 雖然它不是很漂亮,但它會起作用:

=IF(OFFSET('NIM & BADGER',$G$1,(NUMBERVALUE(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+4,255))*13 )+19,0,1,1)=0,"",OFFSET('NIM & BADGER',$G$1,(NUMBERVALUE(MID(CELL("filename",A1),FIND("]",CELL( "文件名",A1))+4,255))*13)+19,0,1,1))

編輯:使您的 VBA 代碼工作。 嘗試這個:

 Sub Value()

 Dim i As Long
 Dim xNumber As Long, xValue As Long
 Dim xName As String
 Dim ws As Worksheet

 Application.ScreenUpdating = False

 Set ws = Sheets("CAB1")
 xNumber = Sheets("NIM & BADGER").Range("R27").Value
 xValue = 33

 For i = 1 To xNumber
 ws.Copy After:=ActiveWorkbook.Sheets(ws.Index + i - 1)
 ActiveSheet.Name = "CAB" & i + 1
 Sheets("CAB" & i + 1).Range("E43").Formula = "=IF('NIM & BADGER'!G" & xValue + (13 * i) & "=0,"""",'NIM & BADGER'!G" & xValue + (13 * i) & ")"
 Next

 ws.Activate

 Application.ScreenUpdating = True

 End Sub

正如我試圖在下面解釋的那樣,您有兩個問題:

  1. 在你的'For'語句中,你忘記了'Number'前面的'x',所以你沒有引用你的變量。
  2. 在 VBA 中引用雙引號時,需要用雙引號括起來。 所以你的 IF 語句的真實情況必須看起來像“”“”。

希望現在很清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM