2014-10-03 2 views
-1

Я не слишком знаком с макросами на Excel VBA, поэтому искал некоторую помощь в следующем:Looping Excel Macro

Создания шаблона, в котором пользователь будет вводить неограниченное количество продуктов и пользователей, создавая матрицу с продуктами вверху и пользователями по левой стороне.

  Product 1 Product 2 Product 3 

Пользователь A
Пользователь 1
Пользователь 2
Пользователь 3

Там они будут использовать «х» или 1 и 0, чтобы показать, какие продукты присваиваются каждому пользователю (может быть несколько продуктов). Оттуда мне нужен макрос (или потенциально формула, которую, как мне сказали, может работать), чтобы заполнить другую вкладку одной строкой для каждой комбинации пользователей/продуктов. Мне понадобится цикл цикла для циклического перехода по каждой строке, так как нет ограничений на количество пользователей/продуктов, которые может ввести человек, использующий шаблон).

пользователя (колонка 1) Продукт (колонка 2)

Пользователь A Продукт 1

Пользователь A Продукт 2

пользователя 1 Продукт 2

Пользователь 2 Продукт 3

Пользователь 3 Продукт 3

Пользователь 3 Продукт 2

+0

У меня нет опыта работы с макросами, поэтому я надеялся, что что-то можно предложить, чтобы я мог использовать! Насколько я понимаю, стандартная формула front end не будет работать. – msra9ap8

+0

Может быть проще изменить процесс, т.е. заполнить второй лист и создать первый как сводную таблицу. – pnuts

ответ

0

Что-то вроде этого?

Public Sub GetUserProductCombi() 
    Const clngRowProducts As Long = 1 'Row containing product 
    Const cintColUsers As Integer = 1 'Column containing users 
    Const cstrSheetNameTemplate As String = "template" 

    Dim lngRowCombi As Long 
    Dim shtTemplate As Worksheet 
    Dim shtCombi As Worksheet 
    Dim lngRowLastUser As Long 
    Dim intColLastProduct As Integer 
    Dim lngRow As Long 
    Dim intCol As Integer 
    Dim strProduct As String 
    Dim strUser As String 
    Dim strValue As String 

    Set shtTemplate = ThisWorkbook.Worksheets(cstrSheetNameTemplate) 
    Set shtCombi = ThisWorkbook.Worksheets.Add() 
    shtCombi.Name = "combi" 

    'Determine last row with user 
    lngRowLastUser = _ 
     shtTemplate.Cells(shtTemplate.Rows.Count, cintColUsers).End(xlUp).Row 

    'Determine last column product 
    intColLastProduct = _ 
     shtTemplate.Cells(clngRowProducts, shtTemplate.Columns.Count).End(xlToLeft).Column 

    lngRowCombi = 1 
    'Loop through all the cells 
    For lngRow = clngRowProducts + 1 To lngRowLastUser 
     For intCol = cintColUsers + 1 To intColLastProduct 
      'Get value 
      strValue = shtTemplate.Cells(lngRow, intCol) 
      'Check if value is other than empty (string) 
      If Trim(strValue) <> "" Then 
       'Determine product and user 
       strProduct = Trim(shtTemplate.Cells(clngRowProducts, intCol)) 
       strUser = Trim(shtTemplate.Cells(lngRow, cintColUsers)) 

       'Write to combi sheet if both user and product are not empty 
       If (strUser <> "") And (strProduct <> "") Then 
        shtCombi.Cells(lngRowCombi, 1) = strUser 
        shtCombi.Cells(lngRowCombi, 2) = strProduct 
        lngRowCombi = lngRowCombi + 1 
       End If 
      End If 
     Next intCol 
    Next lngRow 

    MsgBox "Finished" 
End Sub