Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2009, 12:02   #1
systemmind
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 41
По умолчанию A2=A2+"/"+B2

Всем привет. Помогите пожалуйста с VBA.
У меня есть 2 столбца в Экселе. Задача: Вырезать данные из второго столбца и дописать к данным в первом столбце.
Я попробовал сделать макрос, но Эксель создал вот такую банальность:

Sub Макрос2()
'
' Макрос2 Макрос
'
' Сочетание клавиш: Ctrl+ю
'
Range("B2").Select
ActiveCell.FormulaR1C1 = "" (Содержимое B2 не должно обнуляться)
Range("A2").Select
ActiveCell.FormulaR1C1 = "SB-073/Б-233_222" (SB-073 - содержимое ячейки A2, Б-233_222 - содержимое B2, но нужно, чтобы сюда вписывалось такое: содержимое ячейки A2=A2+"/"+B2)
Range("A3").Selec
End Sub


P.S. Был бы признателен, если бы это все загнать в цикл, чтобы выполнялось за одно действие. Спасибо.
systemmind вне форума Ответить с цитированием
Старый 23.04.2009, 12:21   #2
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от systemmind Посмотреть сообщение
Всем привет. Помогите пожалуйста с VBA.
У меня есть 2 столбца в Экселе. Задача: Вырезать данные из второго столбца и дописать к данным в первом столбце.
Я попробовал сделать макрос, но Эксель создал вот такую банальность:

Sub Макрос2()
'
' Макрос2 Макрос
'
' Сочетание клавиш: Ctrl+ю
'
Range("B2").Select
ActiveCell.FormulaR1C1 = "" (Содержимое B2 не должно обнуляться)
Range("A2").Select
ActiveCell.FormulaR1C1 = "SB-073/Б-233_222" (SB-073 - содержимое ячейки A2, Б-233_222 - содержимое B2, но нужно, чтобы сюда вписывалось такое: содержимое ячейки A2=A2+"/"+B2)
Range("A3").Selec
End Sub


P.S. Был бы признателен, если бы это все загнать в цикл, чтобы выполнялось за одно действие. Спасибо.
Все это сделано макрорекодером
можно было сделать все гораздо проще для всех не пустых ячеек столбца а, начиная со второй строки
Код:
Sub Макрос2()
dim i as integer
i=2
do while not isnull(sheet.range("a" & i))
sheet.range("A"& i)=str(sheet.range("a"& i))+"/"+str(sheet.range("b"& i))
i=i+1
loop
End Sub
Юнлинг вне форума Ответить с цитированием
Старый 23.04.2009, 13:05   #3
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно так:
Код:
Sub Main()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "A") <> "" And Cells(i, "B") <> "" Then Cells(i, "A") = Cells(i, "A") & "/" & Cells(i, "B")
        Cells(i, "B").ClearContents 'Это если нужно очистить значения в столбце "B"
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2009, 13:27   #4
systemmind
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 41
По умолчанию Немного цвета

Спасибо.

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Можно так:
Код:
        If Cells(i, "A") <> "" And Cells(i, "B") <> "" Then Cells(i, "A") = Cells(i, "A") & "/" & Cells(i, "B")
А можно еще сделать, чтобы Cells(i, "B") записывалось др. цветом. Там, в Экселе, есть Темно-Синий, более светлый оттенок 60%
systemmind вне форума Ответить с цитированием
Старый 23.04.2009, 13:42   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если я правильно понял, то так:
Код:
Sub Main()
    Dim i As Long, j As Integer, k As Integer
    Application.ScreenUpdating = False
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
        If Cells(i, "A") <> "" And Cells(i, "B") <> "" Then
            j = Len(Cells(i, "A")): k = Len(Cells(i, "B"))
            Cells(i, "A") = Cells(i, "A") & "/" & Cells(i, "B")
            Cells(i, "A").Characters(Start:=j + 2, Length:=k).Font.ColorIndex = 41
        End If
        Cells(i, "B").ClearContents 'Это если нужно очистить значения в столбце "B"
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.04.2009, 14:33   #6
systemmind
Пользователь
 
Регистрация: 06.02.2009
Сообщений: 41
По умолчанию

Еще попутный вопрос.
Поддерживает ли VBA запись цвета в шеснадцатиричном виде, типа #8db4e3 (меня именно этот интерисует). И если такой формат не поддерживается, то как это решить?
systemmind вне форума Ответить с цитированием
Старый 23.04.2009, 16:12   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Поддерживает. Примерно в таком виде:
Код:
Sub test()
    [a1].Interior.Color = &HFF&
    [b1].Font.Color = &H80FF80
End Sub
А что, если шестнадцатиричное число заменить его аналогом в десятичной записи, цвет получится какой-то другой?
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49