L oop значение в Excel - PullRequest
       0

L oop значение в Excel

0 голосов
/ 11 января 2020

мне нужно l oop значение, и оно имеет 3 столбца и 12 строк

enter image description here

как l oop значение как в первом берут значение из столбца 1,1,1,1,1,1,1,1,1,1,1,1 затем берут значение из 1,1,1,1,1,1,1,1,1 , 1,1,2 затем 1,1,1,1,1,1,1,1,1,1,1,3 затем 1,1,1,1,1,1,1,1,1,1 , 2,1, затем 1,1,1,1,1,1,1,1,1,1,2,2, затем 1,1,1,1,1,1,1,1,1,1,2 , 3, затем 1,1,1,1,1,1,1,1,1,1,3,1 и так далее ... так как же l oop этот столбец взять значение и поместить в другую ячейку и делать другие вещи

я пишу пример кода для l oop

    Sub file()
Range("E13").Select

For a = 1 To 3
colno = a + 5
colletter = Split(Cells(1, colno).Address, "$")(1)
Value1 = Range("" & colletter & "13").Value

For b = 1 To 3
colno2 = b + 5
colletter2 = Split(Cells(1, colno2).Address, "$")(1)
Value2 = Range("" & colletter2 & "14").Value
For c = 1 To 3
colno3 = c + 5
colletter3 = Split(Cells(1, colno3).Address, "$")(1)
Value3 = Range("" & colletter3 & "15").Value
For d = 1 To 3
colno4 = d + 5
colletter4 = Split(Cells(1, colno4).Address, "$")(1)
Value4 = Range("" & colletter4 & "16").Value
For e = 1 To 3
colno5 = e + 5
colletter5 = Split(Cells(1, colno5).Address, "$")(1)
Value5 = Range("" & colletter5 & "17").Value
For f = 1 To 3
colno6 = f + 5
colletter6 = Split(Cells(1, colno6).Address, "$")(1)
Value6 = Range("" & colletter6 & "18").Value
For g = 1 To 3
colno7 = g + 5
colletter7 = Split(Cells(1, colno7).Address, "$")(1)
Value7 = Range("" & colletter7 & "19").Value
For h = 1 To 3
colno8 = h + 5
colletter8 = Split(Cells(1, colno8).Address, "$")(1)
Value8 = Range("" & colletter8 & "20").Value
For i = 1 To 3
colno9 = i + 5
colletter9 = Split(Cells(1, colno9).Address, "$")(1)
Value9 = Range("" & colletter9 & "21").Value
For j = 1 To 3
colno10 = j + 5
colletter10 = Split(Cells(1, colno10).Address, "$")(1)
Value10 = Range("" & colletter10 & "22").Value
For k = 1 To 3
colno11 = k + 5
colletter11 = Split(Cells(1, colno11).Address, "$")(1)
Value11 = Range("" & colletter11 & "23").Value
For l = 1 To 3
colno12 = l + 5
colletter12 = Split(Cells(1, colno12).Address, "$")(1)
Value12 = Range("" & colletter12 & "24").Value

Next l
Next k
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub

есть идеи, как его оптимизировать?

1 Ответ

0 голосов
/ 12 января 2020

Я бы работал в базе три (если есть три столбца данных), чтобы представить каждый выбор как число:

000000000000
000000000001
000000000002
000000000010
000000000011
000000000012
000000000020
000000000021
000000000022

и т. Д. И извлечь последний di git, предыдущий di git et c. выбрать, какой номер выбрать в каждом ряду. Это более общий метод, чем использование вложенных циклов, которые задают c для определенного числа строк.

Option Explicit

Sub CountBase3()

    Dim R As Range

    Set R = Range("F2:H13")

    Dim Rows As Long, Columns As Long, Maxcount As Long

    Rows = R.Rows.Count()

    Columns = R.Columns.Count()

    Maxcount = Columns ^ Rows

    Debug.Print ("Maxcount=" & Maxcount)

    'Copy range to array

    Dim data As Variant

    data = R

    Dim counter As Long, row As Long, column As Long, counterShifted As Long

    Dim Values()

    ReDim Values(Rows)

    'Loop over selections - 531441 to find all the sets but just look at the first few for now

    For counter = 0 To 8

        counterShifted = counter

        For row = Rows To 1 Step -1

        'Get column from right hand digit of counter

        column = counterShifted Mod Columns + 1

        Values(row) = data(row, column)

        'Shift counter by dividing by number of columns (3)

        counterShifted = counterShifted \ Columns

        Next row

    'Display current selection

    Debug.Print ("Set " & counter + 1)

    For row = 1 To Rows

    Debug.Print (Values(row));

    Next row

    Debug.Print ("")

    Next counter

End Sub

Вывод

Maxcount=531441
Set 1
 700  500  500  500  450  400  400  450  300  250  200  100 
Set 2
 700  500  500  500  450  400  400  450  300  250  200  150 
Set 3
 700  500  500  500  450  400  400  450  300  250  200  200 
Set 4
 700  500  500  500  450  400  400  450  300  250  250  100 
Set 5
 700  500  500  500  450  400  400  450  300  250  250  150 
Set 6
 700  500  500  500  450  400  400  450  300  250  250  200 
Set 7
 700  500  500  500  450  400  400  450  300  250  300  100 
Set 8
 700  500  500  500  450  400  400  450  300  250  300  150 
Set 9
 700  500  500  500  450  400  400  450  300  250  300  200 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...