2016-06-27 73 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