2016-06-27 72 views
0

發生「類型不匹配」錯誤。Excel VBA錯誤多行乘法運算

試圖通過在第二工作表「Sheet 2中的」數字的另一個矩陣取號碼中的一個矩陣上的一個工作表「Sheet 1中」,除,然後顯示在所述第三工作表「工作表Sheet」的矩陣

每個小區結果
Sub MacroTest() 

Worksheets("Sheet3").Range("C5") = Worksheets("Sheet1").Range("C5:DR124")/Worksheets("Sheet2").Range("C5:DR124") 

End Sub 
+0

使用數組... – findwindow

+0

不應該爲此標記爲Excel-VBA? –

+0

謝謝,它是固定的,現在被標記爲 – Danimov82

回答

0

使用此代碼,您可以在不同的工作表和同一工作表上的特定範圍(可以選擇)執行您所需的工作。

Sub RangeDiv() 
    Dim RngFrom As Range 
    Dim RngDiv As Range 
    Dim RngTo As Range 

    Dim R As Integer 
    Dim C As Integer 

    Set RngFrom = Sheets(1).Range("A1:E3") 
    Set RngDiv = Sheets(1).Range("B6:F8") 
    Set RngTo = Sheets(1).Range("C10:G12") 

    'Check if all Rngs have the same number of rows and columns 
    If RngFrom.Rows.Count <> RngDiv.Rows.Count Or RngFrom.Rows.Count <> RngTo.Rows.Count Then 
     MsgBox ("Rngs rows number aren't equal") 
     Exit Sub 
    End If 
    If RngFrom.Columns.Count <> RngDiv.Columns.Count Or RngFrom.Columns.Count <> RngTo.Columns.Count Then 
     MsgBox ("Rngs columns number aren't equal") 
     Exit Sub 
    End If 

    For C = 1 To RngFrom.Columns.Count 
     For R = 1 To RngFrom.Rows.Count 
      'check cell value to avoid errors coming from dividing by 0 
      If Val(RngDiv.Cells(R, C)) <> 0 Then 
       RngTo.Cells(R, C) = RngFrom.Cells(R, C)/RngDiv.Cells(R, C) 
      Else 
       'Insert something when division is impossible 
       RngTo.Cells(R, C) = 0 'Or what you want to insert 
      End If 
     Next R 
    Next C 
End Sub 
+0

我有空白字段的單元格,我無法做任何事情,所以這給了我一個溢出錯誤。我重新編寫了一個if/then循環來捕獲空值,但是我最終得到了一個滿零的矩陣 - 寫這個的正確方法是什麼? 對於C = 1至RngFrom.Columns.Count 對於R = 1要RngFrom.Rows.Count 如果爲IsEmpty(RngTo.Cells(R,C))= TRUE然後 RngTo.Cells(R,C)= 0 (R,C)= RngFrom.Cells(R,C)/ RngDiv.Cells(R,C) End If – Danimov82

+0

@ Danimov82我編輯了我的代碼以防止除以0 – genespos

+0

工作的很好,謝謝! – Danimov82

0

對不起,我遲到的回覆。

For i = 3 To 9 
    If IsNumeric(Worksheets("Tabelle2").Cells(5, i).Value) And IsNumeric(Worksheets("Tabelle3").Cells(5, i).Value) And Worksheets("Tabelle3").Cells(5, i).Value <> 0 Then 
     Worksheets("Tabelle1").Cells(5, i).Value = Worksheets("Tabelle2").Cells(5, i).Value/Worksheets("Tabelle3").Cells(5, i).Value 
    End If 
Next 

變量i是一些你的專欄:

你可以用一個for循環解決您的問題。 A = 1,B = 2,Z = 26,AA = 27等等..
數5是您的行

例如 細胞(5,1)是像範圍(「A5相同「)或Cells(3,9)= Range(」I3「)

在我上面的代碼中,它從C列開始(3),並停在列I(9)。將Number 9替換爲列FX(最後一列)的編號並編輯表名稱,然後它應該可以工作。

+0

通過以下修改得到相同的錯誤 工作表(「Sheet1」)。範圍(「C5」)=工作表(「月總需求」)。範圍(「C5:FX5 「)/ Worksheets(」Month Order Count「)。範圍(」C5:FX5「) – Danimov82

+0

我的意思是,它不可能使用」範圍「。它只能用一個特定的列/行來計算。例如C5或A3或B9但不是C5:FX5或A1:B3 – Julian

+0

這些矩陣有數百個值,這要求我使用該方法編寫數百行代碼 - 必須有一種方法來構建更小的函數 – Danimov82

0

創建Sheet 1中這樣

Please click to see Image

然後Sheet 2中

Please click to see Image2

然後創建空白紙張3

和使用此代碼

Sub divideRange() 
    Dim lastRow, lastColumn As Long 

    lastColumn = Sheets("Sheet1").Cells(1, Columns.Count).End(xlToLeft).Column 
    lastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 

    For i = 1 To lastRow 
     For j = 1 To lastColumn 
      Sheets("Sheet3").Cells(i, j).Value = Sheets("Sheet1").Cells(i, j).Value/Sheets("Sheet2").Cells(i, j).Value 
     Next j 
    Next i 

End Sub 

這是你想要的嗎?

+0

快速跟進 - 如果我將C3上的兩個表格都作爲左上角開始,並在底部結束矩陣的右上角爲DR124 - 這個腳本的外觀如何不同?我問的唯一原因是運行這個會導致溢出錯誤,所以我認爲這是因爲矩陣的設置與您的示例不同。 – Danimov82

+0

我有一些單元格中有0,所以這可能是因爲公式試圖除以零。我將如何繞過空白/ 0的單元格?我無法擺脫它們,因爲它是一個來自power pivot的填充數據集,所以需要某種「如果空白然後忽略」功能,但不清楚可能看起來像什麼。 – Danimov82