2014-09-16 2 views
0

Я новичок в VBA, но считаю, что он может предложить мне отличную функциональность в Excel, не прибегая к мега сложным формулам.Проверить диапазон ячеек для ввода данных - объединить в новый столбец

У меня есть таблица, и внутри этой таблицы я определяю, где существует комбинация столбца и заголовка.

Что я хочу сделать, это конкатенация каждого столбца и заголовка строки в один столбец.

Пример (Там может быть любое количество столбца/строки заголовков):

 10CAT 20CAT 30CAT 
EAR  x  x 
CAR    x  x 
GBR  x  x  x 

Где у меня «х» Я хочу конкатенации в одну колонку, как это показано ниже:

10CATEAR 
20CATEAR 
20CATCAR 
30CATCAR 
10CATGBR 
20CATGBR 
30CATGBR 
+0

Если вы знаете логику, то я рекомендовал бы, писать код, а затем показывает нам, что вы пробовали и где ты застрял. И тогда мы можем взять это оттуда? –

+0

Это, я думаю, есть где у меня проблема Siddharth, я не знаю, с чего начать –

+1

Прошу прощения, Тони, но я сомневаюсь, что кто-нибудь напишет полный код для вас, если кто-то не ищет быстрый способ сделать некоторые пункты : D. Моя рекомендация - читать онлайн/книги/записывать макросы о том, как работает VBA :) В любом случае, это должно заставить вас начать. Логика: '1' Цикл через строки' 2' Цикл через столбцы '3' Проверьте, имеет ли ячейка« X » –

ответ

0

«Я не уверен, с чего начать» Я знаю, как вы себя чувствуете. Я был здесь. Вот код для того, что вы ищете:

Option Explicit 

Sub myMacro() 

    ' offsets used to find X 
    Dim rOffset As Integer, cOffset As Integer 
     rOffset = 0 
     cOffset = 0 

    ' row numbers for the source and destination 
    Dim rowDest As Integer, rowSour As Integer 
     rowDest = 1 
     rowSour = 2 

    ' loop through all entries in column A 
    Do While Range("A" & rowSour).Value <> "" 

     ' concatenation proccess when X is found 
     If Range("B2").offset(rOffset, cOffset).Value = "X" Then 

      ' concatenation proccess 
      Range("T" & rowDest).Value = Range("B1").offset(0, cOffset).Value + Range("A" & rowSour).Value 

      ' next concatenation 
      rowDest = rowDest + 1 

     End If 

     ' next column for X 
     cOffset = cOffset + 1 

     ' when looped through all columns, prepare variables for the next run 
     If Range("B1").offset(0, cOffset).Value = "" Then 

      ' next row in column A 
      rowSour = rowSour + 1 

      ' next row offset for X 
      rOffset = rOffset + 1 

      ' reset column offset for X 
      cOffset = 0 

     End If 

    Loop 

End Sub 

Попробуйте пройти через программу и понять, почему все делается так, как они есть. Имейте записную книжку с вами и для каждого шага вправо значения переменных. Эта программа написана логически. Никакие фантастические функции или структуры не используются. Это написано как «как вы думаете, что процедура должна идти».

Поймите синтаксис. Затем, как только вы выяснили алгоритм (как было сделано решение), постарайтесь сделать программу более эффективной. Есть 10 способов использования программы.

Успехов,

+0

Спасибо. Я сделал это вручную сейчас, но просмотрю ваш код, так как он появится снова и снова :) –

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