2016-09-14 7 views
-5

enter image description here Пожалуйста, я новичок в Vba.Код EXCEL VBA для генерации серийных номеров из диапазона

  1. Я хочу, чтобы VBA генерировал серийные номера из данных, введенных в A1 и B2. Результат должен быть в другом листе. Колонка A.

  2. Когда я вхожу в другой диапазон в А2 и В2, серийные номера должны продолжаться там, где заканчивались первые серийные номера.

    Встроенное изображение

спасибо

+0

http://stackoverflow.com/questions/20143262/excel-sequential-numbers-specified-start-and-end-values-shift-column-data-d – eka24

+0

Я получил код с этого сайта, близок к тому, что я хочу, но старые серийные номера продолжают повторяться в любое время, когда я запускаю новые серийные номера. Второй код «Sub sof20143262Serial_numbers()» – eka24

+0

Можете ли вы показать изображение того, чего вы пытаетесь достичь или что-то еще? Я просто не знаю, как вам помочь. [Это ответ] (http://stackoverflow.com/questions/39360611/vba-code-to-auto-serial-number-in-column-a-after -my-userform-added-data-in-col/39376327 # 39376327), который я сделал для тех, у кого возник вопрос о создании серийных номеров со строками, возможно, вы можете адаптировать его для удовлетворения ваших потребностей или описать, какие его части не может работать для вас. – Tyeler

ответ

0

Попробуйте это и дайте мне знать, если он работает для вас .. Это даст вам результаты, показанные на изображении.

Sub SerialCode() 
    Dim ws As Worksheet 
    Dim startOf As Long, endOf As Long, data 'startOf and endOf are Long for >5 digits. 
    Dim lastRow As Long, currentRow As Long 
    Dim dataRange As Range, c As Range 

    Set ws = ThisWorkbook.Sheets(1) 
    ws.Range("E2", ws.Cells(ws.Rows.Count, "E").End(xlUp)).Clear 
    ws.Range("F2", ws.Cells(ws.Rows.Count, "F").End(xlUp)).Clear 
    lastRow = 2 
    Set dataRange = ws.Range("A2", ws.Cells(ws.Rows.Count, "A").End(xlUp)) 


    For Each c In dataRange 
     If c.Value <> "" Then 
      currentRow = c.Row 
      startOf = CLng(ws.Range("A" & currentRow).Value) 
      endOf = CLng(ws.Range("B" & currentRow).Value) + 1 

      If endOf <> 1 And startOf < endOf Then 'This will stop Overflow errors from occuring accidently 
       data = ws.Range("C" & currentRow).Value 

       Do While startOf <> endOf 
        ws.Range("E" & lastRow).Value = startOf 
        ws.Range("F" & lastRow).Value = data 
        startOf = startOf + 1 
        lastRow = lastRow + 1 
       Loop 

      Else: MsgBox "Ending Serial Number missing or is less than starting Serial Number on row " _ 
       & c.Row, vbCritical, "Missing Data" 
      End If 
     End If 
    Next c 
End Sub 
+0

Дает ошибку компиляции, требуемый объект в строке 6 «Установите lastRow = ws.Cells (ws.Rows.Count,« E »). End (xlUp) .Row + 1" – eka24

+0

@ eka24 Я исправил код, попробуйте обновить код в моем ответе. (Я сейчас на своем компьютере и смог его протестировать) – Tyeler

+0

Он запускает и производит результат, но серийные номера старого диапазона продолжают повторяться. Я хочу, чтобы код не запускал старый номер, который уже был запущен. например, если у меня есть 11-13, который производит 11, 12, 13. Когда я вхожу в другой диапазон, например 101-103, он должен давать 11, 12, 13, 101, 102, 103. Но, как только код стоит, он дает 11, 12, 13, 11, 12, 13, 101, 102, 103, повторяя уже выпущенные серийные номера. Серийные номера уникальны и не могут выполняться дважды. он должен работать с текущим диапазоном, если диапазон уже запущен. Спасибо за ваши усилия до сих пор Tyeler – eka24

Смежные вопросы