
Option Explicit
Sub calcola()
Dim X As Long, Y As Long, R As Long, Rg As Long
Dim K As Long
Dim Col As Long
Dim Arr(), Data
Data = Range("B1:BK1") 'Original List
Col = UBound(Application.Transpose(Data))
For X = 1 To Col - 3
For Y = X To Col - 3
For R = Y To Col - 3
K = K + 1
Next
Next
Next
ReDim Arr(1 To K, 1 To 1)
For X = 1 To Col - 3
For Y = X + 1 To Col - 2
For R = Y + 1 To Col - 1
Rg = Rg + 1
Arr(Rg, 1) = Data(1, X) * Data(1, Y) * Data(1, R)
Next
Next
Next
[A2].Resize(K) = Arr
End Sub |
Option Explicit
Public Function LettCol(ByVal n As Long) As String
LettCol = Replace(Cells(1, n).Address(False, False), "1", "")
End Function
Sub calcolaG()
Dim X As Long, Y As Long, R As Long, Rg As Long
Dim K As Long
Dim Col As Long
Dim Arr(), Datax
Dim A, B, Up, Ur, Ciclo, W, Id
Up = 5
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Foglio2.Cells.ClearContents
With Foglio1
Ur = .Range("A" & Rows.Count).End(xlUp).Row
Col = .Rows("5:5" & Columns.Count).End(xlToRight).Column
For X = 1 To Col - 2
For Y = X To Col - 2
For R = Y To Col - 2
K = K + 1
Next
Next
Next
ReDim Arr(1 To K, 1 To 1)
For X = 2 To Col - 2 'ciclo per scrivere le sigle
For Y = X + 1 To Col - 1
For W = Y + 1 To Col
Rg = Rg + 1
Arr(Rg, 1) = "2*" & LettCol(X) & "-(" & LettCol(Y) & "+" & LettCol(W) & ")"
Next W
Next Y
Next X
Datax = .Range(.Cells(3, 2), .Cells(3, Col)) 'Original List
Col = UBound(Application.Transpose(Datax))
Id = .Range(.Cells(Up, 1), .Cells(Ur, 1))
Foglio2.[B4].Resize(, Ur - Up + 1) = Application.Transpose(Id)
Foglio2.[A5].Resize(K) = Arr
For Ciclo = Up To Ur
Rg = 0
Datax = .Range(.Cells(Ciclo, 2), .Cells(Ciclo, Col + 1))
For X = 1 To Col
A = 2 * Datax(1, X)
For Y = X + 1 To Col
B = Datax(1, Y)
For R = Y + 1 To Col
Rg = Rg + 1
Arr(Rg, 1) = A - (B + Datax(1, R))
Next
Next
Next
Foglio2.[B5].Offset(, Ciclo - 5).Resize(K) = Arr
Next
End With
With Application
.Calculation = xlCalculationAutomatic
.StatusBar = True
.ScreenUpdating = True
End With
End Sub
|
Option Explicit
Public Function LettCol(ByVal n As Long) As String
LettCol = Replace(Cells(1, n).Address(False, False), "1", "")
End Function
Sub calcolaG()
Dim X As Long, Y As Long, R As Long, Rg As Long
Dim K As Long
Dim Col As Long
Dim Ur As Long
Dim Ciclo As Long
Dim A, B, W
Dim Arr(), Datax
Const Up As Long = 5
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Foglio2.Cells.ClearContents
With Foglio1
Ur = .Range("A" & Rows.Count).End(xlUp).Row
Col = .Rows("5:5" & Columns.Count).End(xlToRight).Column
For X = 1 To Col - 2
For Y = X To Col - 2
For R = Y To Col - 2
K = K + 1
Next
Next
Next
ReDim Arr(1 To K, 1 To 1)
For X = 2 To Col - 2 'ciclo per scrivere le sigle
A = LettCol(X)
For Y = X + 1 To Col - 1
B = LettCol(Y)
For W = Y + 1 To Col
Rg = Rg + 1
Arr(Rg, 1) = "2*" & A & "-(" & B & "+" & LettCol(W) & ")"
Next W
Next Y
Next X
Datax = .Range(.Cells(3, 2), .Cells(3, Col)) 'Original List
Col = UBound(Application.Transpose(Datax))
.Range(.Cells(Up, 1), .Cells(Ur, 1)).Copy
Foglio2.[B4].Resize(, Ur - Up + 1).PasteSpecial Transpose:=True
Application.CutCopyMode = False
Foglio2.[A5].Resize(K) = Arr
For Ciclo = Up To Ur
Rg = 0
Datax = .Range(.Cells(Ciclo, 2), .Cells(Ciclo, Col + 1))
For X = 1 To Col
A = 2 * Datax(1, X)
For Y = X + 1 To Col
B = Datax(1, Y)
For R = Y + 1 To Col
Rg = Rg + 1
Arr(Rg, 1) = A - (B + Datax(1, R))
Next
Next
Next
Foglio2.[B5].Offset(, Ciclo - Up).Resize(K) = Arr
Next
End With
With Application
.Calculation = xlCalculationAutomatic
.StatusBar = True
.ScreenUpdating = True
End With
End Sub |
If IsNumeric(sh1.Cells(R, X)) And IsNumeric(sh1.Cells(R, Y)) And IsNumeric(sh1.Cells(R, W)) Then
sh2.Cells(Rg, C) = 2 * sh1.Cells(R, X) - (sh1.Cells(R, Y) + sh1.Cells(R, W))
Else
sh2.Cells(Rg, C) = 0
End If |
For Ciclo = Up To Ur
Rg = 0
Datax = .Range(.Cells(Ciclo, 2), .Cells(Ciclo, Col + 1))
For X = 1 To Col
If IsNumeric(Datax(1, X)) Then A = Datax(1, X) Else A = 0
For Y = X + 1 To Col
If IsNumeric(Datax(1, Y)) Then B = Datax(1, Y) Else B = 0
For R = Y + 1 To Col
Rg = Rg + 1
If IsNumeric(Datax(1, X)) And IsNumeric(Datax(1, Y)) And IsNumeric(Datax(1, R)) Then Arr(Rg, 1) = 2 * A - (B + Datax(1, R)) Else Arr(Rg, 1) = "#N/D"
Next
Next
Next
Sub conta()
Col = Rows("6:6" & Columns.Count).End(xlToRight).Column
For X = 2 To Col - 2
For Y = X + 1 To Col - 1
For R = Y + 1 To Col
K = K + 1
Next
Next
Next
MsgBox K
End Sub |
