Могу ли я использовать автозаполнение Excel с пользовательским шаблоном? - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь автоматически заполнить следующие строки:

Row A1
Row A1
Row A2
Row A2
...
Row A12
Row A12
Row B1
Row B1
Row B2
Row B2
....

От AP, 1-12

Как я могу быстро заполнить это автоматически?В настоящее время перетаскивание просто повторяет шаблон и не поднимается по шаблону.

Заранее спасибо.

Как правило, в программировании я бы зацикливал AP и встраивал цикл 1-12 внутри.Однако в Excel я не так уверен.

Ответы [ 4 ]

0 голосов
/ 15 октября 2018

Я думаю, вы искали что-то подобное:

Option Explicit

Public Sub TestGeneratePattern()
    GeneratePattern Rows:=12, Columns:=16
End Sub

Public Sub GeneratePattern(Rows As Long, Columns As Long)
    Dim strRow As String
    Dim strCol As String

    Dim iRow As Long
    For iRow = 1 To Rows * Columns
        strRow = iRow - ((iRow - 1) \ Rows) * Rows 'count rows from 1 to 12 
        strCol = Cells(1, ((iRow - 1) \ Rows) + 1).Address(True, False) 'increase column every 12 rows
        strCol = Left(strCol, InStr(1, strCol, "$") - 1) 'get column letter

        Cells(iRow * 2 - 1, "A").Resize(RowSize:=2).Value = strCol & strRow 'write value in 2 cells at once
    Next iRow
End Sub
0 голосов
/ 13 октября 2018

Если вы не против наличия вспомогательного столбца в B, который вы можете автозаполнить, вы можете скопировать его полностью, начиная с A1, а затем скопировать и специальным образом вставить только значения обратно. Просто убедитесь, чтоавтозаполнение начинается с 0 до любого количества ячеек, которые вы хотите

=SUBSTITUTE(ADDRESS(1,CEILING((B1+0.01)/12,1),4),"1","") & MOD(B1,12)+1

РЕДАКТИРОВАТЬ

Извините за задержку, но я нашел некоторое времяпереписать его в VBA, чтобы он больше не нуждался в вспомогательном столбце.

Sub Filler()
    Dim i As Long

    For i = 0 To 191
        With ThisWorkbook.Worksheets(1)
            .Cells(i + 1, 1) = Split(.Cells(1, Int((i + 0.01) / 12) + 1).Address, "$")(1) & i Mod 12 + 1
        End With
    Next i

End Sub
0 голосов
/ 13 октября 2018
    Sub DAdwadw()

Dim i As Integer
Dim arr(0 To 16) As String
Dim count As Integer


arr(1) = "A"
arr(2) = "B"
arr(3) = "C"
arr(4) = "D"
arr(5) = "E"
arr(6) = "F"
arr(7) = "G"
arr(8) = "H"
arr(9) = "I"
arr(10) = "J"
arr(11) = "K"
arr(12) = "L"
arr(13) = "M"
arr(14) = "N"
arr(15) = "O"
arr(16) = "P"
arr(17) = "Q"
arr(18) = "R"
arr(19) = "S"
arr(20) = "T"
arr(21) = "U"
arr(22) = "V"
arr(23) = "W"
arr(24) = "X"
arr(25) = "Y"
arr(26) = "Z"

count = 1

For i = 1 To 8
    Dim letter As String

    For p = 1 To 58

        letter = arr(i) & p

        Cells(count, 1).Value = letter
        Cells(count + 1, 1).Value = letter

        count = count + 2
    Next p

Next i

End Sub

Вот так я и сделал.

0 голосов
/ 13 октября 2018

Используйте INDEX с некоторым математикой:

=INDEX($A$1:$P$12,MOD(ROW(1:1)-1,12)+1,INT((ROW(1:1)-1)/12)+1)

enter image description here


Редактировать, я не понял:

=CHAR(INT((ROW(1:1)-1)/12)+65)&MOD(ROW(1:1)-1,12)+1

будет заполнять столбец с вашим шаблоном, как вы тянете вниз.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...