2015-04-07 3 views
0

У меня есть код, который возвращает все данные, которые я хочу получить из запроса. Проблема в том, что формат csv разделяет данные, даже имена учетных записей с запятыми. Для каждой строки столбец A - это имя учетной записи, за которым следуют 11 блоков целочисленных данных (в общей сложности 12 ячеек, используемых для каждой строки). К счастью, для учетных записей с запятыми результатом является только одна дополнительная ячейка (в общей сложности используется 13 ячеек для каждой строки).VBA- Concatenate Cells with If function

Мне нужна формула IF-THEN, которая будет конкатенировать колонку A & Столбец B, если в этой строке используется 13 использованных ячеек, в противном случае останутся одни. Быть новичком в конкатенате VBA дает мне огромные проблемы.

Любые предложения? Заранее спасибо.

ответ

0

Ну, с точки зрения термина, Excel Формулы и Excel VBA - это не одно и то же.

На самом деле, здесь много людей, которые являются профессионалами формулы, которые ничего не знают о VBA и наоборот.

Это, как говорится, вы могли бы использовать что-то вроде:

=IF(COUNTBLANK(C1:N1)=0,A1&" "&B1,A1) 

Конечно, при условии, ваши данные выглядит следующим образом:

Image

Было бы проще в использовании:

=IF(N1="",A1,A1&" "&B1) 

Конкатенация в формулах Excel и VBA довольно проста ,

Просто отделите строки, которые вы хотите объединить с amperstand &

Если я хочу, чтобы сцепить A1 и B1, я могу использовать =A1&B1, как показано в формуле.

Если я хочу, чтобы добавить пробел, или даже слово, я могу просто добавить между ними в виде строки:

=A1&" is way cooler than "&B1

Edit:

VBA:

Sub ConcatenateCells() 
Application.ScreenUpdating = False 
Dim FixRange As Range, c As Range 
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count) 
For Each c In FixRange 
    If InStr(c, ",") > 0 Then c = c & c.Offset(0, 1) 
    'You could also add a space between the two using c = c & " " & c.Offset(0, 1) 
Next c 
Application.ScreenUpdating = True 
End Sub 

Я не знаю, хотите ли вы загрузить данные после того, как вы сориентировали значения, но если вы это сделаете, вы можете использовать это:

Sub ConcatenateAndScootCells() 
Dim FixRange As Range, c As Range 
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count) 
For Each c In FixRange 
    If InStr(c, ",") > 0 Then 
     c = c & c.Offset(0, 1) 
     c.Offset(0, 1).Delete xlToLeft 
    End If 
Next c 
End Sub 

Тем не менее при условии, я получил свой формат данных правильно, вот что до и после того, как выглядит следующим образом:

Before

After

Final Edit:

Если вы абсолютно настаиваете на подсчете количества использованных строк вместо sim ply ищет кому в столбце A, а затем используйте это:

Sub ConcatenateAndScootCells() 
Dim FixRange As Range, c As Range 
Set FixRange = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count) 
For Each c In FixRange 
    If Cells(c.row, Columns.Count).End(xlToLeft).Column = 13 Then 
     c = c & " " & c.Offset(0, 1) 
     c.Offset(0, 1).Delete xlToLeft 
    End If 
Next c 
End Sub 
+0

Простите терминологию, я работаю над кодом VBA, чтобы исправить проблему выше, чем формульный подход. Ваш пример был на месте, но поскольку я ищу код для исправления, могу ли я использовать тот же конкатенат A1 & B1, который вы указали выше? –

+0

Да. Вы можете использовать «Ячейки (1, 1) и ячейки (1, 2)» или «Диапазон (« A1 ») и диапазон (« B1 »)' – user1274820

+0

Я отредактировал ответ с кодом VBA, чтобы сделать это. Вместо того, чтобы считать ячейки справа от него, я просто искал кому. Если вы хотите считать ячейки справа, вы тоже можете это сделать. – user1274820