VBA

2016-03-29 25 views
0

dizilerindeki döngüleri aşağımda sahip olduğum bir dizi içinde dolaşmaya çalışıyorum. Önce, dizi 2, sütun 2'den başlayan (yaklaşık 1000 satır x 100 sütun) elektronik tablo verilerinden dizimi oluşturuyorum. Dizimi tanımladıktan sonra, her bir sütunu ayrı bir veri seti olarak ele almak, maksimum değerin maksimum değerini ve satır değerini bulmak, ardından her birini ayrı dizilerde saklamak istiyorum. Bu kodu çalıştırdığımda, 0 değerlik bir sütun döndürür. Herhangi bir hata vermez, ancak açıkçası çalışmıyor, herhangi bir öneri var mı? Varsayılan olarakVBA

Public Maxindex() As Long 

Public MaxVal() As Double 

Sub ArrayOptimized() 
'Uses arrays to call data from the sheet once then process it 

    Dim dataset() As Variant 
    Dim rows As Long 
    Dim columns As Integer 

    ReDim Maxindex(100) 
    ReDim MaxVal(100) 
    MaxVal(1) = 1 

    rows = ShData.Cells(ShData.rows.Count, 1).End(xlUp).Row 
    columns = ShData.Cells(1, ShData.columns.Count).End(xlToLeft).Column 
    ReDim dataset(2 To rows, 2 To columns) 
    dataset = ShData.Range(ShData.Cells(2, 2), ShData.Cells(rows, columns)) 
    'Check to sheet 

    Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(rows, columns)) = dataset 


    For i = LBound(dataset, 2) To UBound(dataset, 2) 

     For j = LBound(dataset, 1) To UBound(dataset, 1) 
      If dataset(j, i) > MaxVal(i) Then 
      MaxVal(i) = dataset(j, i) 
      'Returns row index number in array for max val 
      Maxindex(i) = j 
      End If 

     Next j 

    Next i 

    Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(columns, 1)) = Maxindex 

End Sub 
+1

ama Tim beni alt:

Bir sütuna dizinizi "çevirmek" için devrik kullanabilirsiniz. Sıfır tabanlı dizi en yüksek değerin ilk öğesini, yalnızca 1 numaralı endekste değerler sağlamaya başladığınızda alıyorsunuz; Veri kümesinin lbound'u. Dahası, ReDim veri kümesi (2 Satırlara, 2 Sütunlara) 'hiçbir şey yapmaz çünkü bir sonraki satırda veri kümesine değerler (örtük varsayılan olarak) atarsınız. – Jeeped

+0

Yep. Bana da onu yendi - ReDim Maxindex (1 To sütun) 've' ReDim MaxVal (1 To sütun) 'yerine sabit bir değer de düşünürdüm. – Comintern

+0

@Jeeped Yani değerleri atamadan önce dizi boyutunu ayırmam gerekmiyor mu? – Duranchula

cevap

2

Excel değil bir sütunda, bir arkaya kağıt üzerindeki bir 1-D dizi yerleştirmek istiyor, bu yüzden bunu koymak çalıştığınızda her hücrede dizinin ilk elemanı almak bir sütunda.

Tüm değerler sıfırdır, 1-d diziniz sıfır temellidir ve bu yuvayı döngünüzde doldurmadınız. Bir cevap yazıyordum

Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(columns, 1)) = _ 
    Application.Transpose(Maxindex)