Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *VBA* | Помогите написать макросы для Excel'я (http://forum.oszone.net/showthread.php?t=29341)

ove 12-02-2003 22:49 203435

*VBA* | Помогите написать макросы для Excel'я
 
Пользователю предлагается заполнять определенные ячейки (прямоугольная область) на листе. Данные вводятся по строкам. Подскажите, как сделать, чтобы после заполнения последней ячейки в строке курсор перемещался не вправо, а в нужную ячейку на следующей строке.

[s]Исправлено: ove, 22:51 12-02-2003[/s]

ove 19-02-2003 17:37 203436

пожалуйста - переход к ячейкам

MaxFactor 25-02-2003 15:32 203437

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

ove 01-03-2003 11:10 203438

Спасибо, но к какому события привязать этот макрос? Не хватает смелости попросить написать код, но хотя бы где посмотреть?

Guest 05-03-2003 09:15 203439

Если в Excel Вы заполняете список по строкам, то никаких макросов не надо. Достаточно для сохранения изменений и перехода в ячейку справа постоянно нажимать клавишу Таб. В последнем столбце для сохранения изменений в ячейке нажмите Enter и рамка переместится в начало строки, откуда начали нажимать Таб.:up:

koresaram 05-03-2003 09:47 203440

чуваки, а где про это можно почитать? про макросы в екселе и все такое прочее?

Guest 05-03-2003 22:38 203441

Отлично, только нужна настройка перемещения по ячейкам - в параметрах - "вниз"

Дорогой Guest, спасибо огромное. Пытаюсь написать процедурку - и привязать ее все же только к Enter

Guest 11-06-2004 10:47 203442

Как на VBA получить доступ к характеристикам (в частности, к размеру) графических файлов (напр., tiff)?

Guest 29-10-2004 15:24 203443

как определить первую ячейку области данных для диаграммы??

Добавлено:

как определить первую ячейку области данных для диаграммы??

Pelman 19-09-2005 14:20 356563

Народ помогите кто может!
Мне нужен макрос который проверял бы пуста данная ячейка или нет и если пуста то вносил записи если нет то переходил на следующую ячейку и вставлял записитам. Очень нужно. Подскажите пожалуйста. :sorry:

aESThete 19-09-2005 15:52 356593

to Pelman
Код:

Sub SetIfEmpty()
    If Selection.Columns.Count = 1 And Selection.Rows.Count = 1 Then ' проверяем, что выбрана только 1 ячейка
        While Not IsEmpty(Selection.Value) ' пока не пустая
            ActiveCell.Next.Select ' выбираем следующую (Tab)
        Wend
        Selection.Value = "значение" ' наше значение
    End If
End Sub


Pelman 04-10-2005 10:30 361294

Большое спасибо за помощь!!! :)

SS1001 09-10-2005 16:52 362776

VBA for Excel
 
Доброго времени суток. У меня проблема возникла , нужно в таблице определить первый пустой столбец, если кто знает - подскажите. Заранее благодарен.

aESThete 10-10-2005 09:07 362918

SS1001
Попробуйте вот так:
Код:

Sub ShowFirstEmptyColumn()
    For C = Columns.Count To 1 Step -1 'перебираем столбцы от последнего назад
        Cells(1, C).End(xlDown).Select 'выбираем последнюю занятую
        If Selection.Row < Rows.Count Then 'если это не последняя строка (столбец не пустой)
            Exit For 'выйти из цикла
        End If
    Next
    MsgBox C + 1
End Sub

Может есть готовый метод или свойство, но я не нашел. :(

SS1001 11-10-2005 13:53 363322

VBA for Excel
 
Спосибо огромное, хотя я и нашел уже способ, только немного другой. Всеравно попробую, может в контексте с другим кодом этот вариант будет лучше.

aESThete 11-10-2005 14:23 363327

SS1001
И как же? Поделитесь, плз.

SS1001 16-10-2005 14:40 364725

Мне важно было что бы код искал пустой столбец в соответствии с этой строкой
......
Range("A6").Select
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
Selection.EntireColumn.Select
.........

aESThete 17-10-2005 10:42 364881

SS1001
Наверное, вы не совсем правильно сформулировали задачу в своем первом посте.
Т.е. надо найти первую же пустую (даже если после нее есть данные) ячейку в определенной строке (а не целый столбец).

Код:

Range("A6").End(xlToRight).Select
if ActiveCell.Column = Columns.Count then
  Range("A6").Select
end if
ActiveCell.Offset(0, 1).Select

имхо делает то же самое что и ваш код, но без цикла (наверное, соответсвенно быстрее).

LLIBED 28-10-2005 12:02 368445

Запуск макроса из другой книги
 
Есть две книги - первая и вторая. Мне нужно в процедуре, находящейся в модуле первой книги, прописать вызов процедуры, находящейся в модуле второй книги. Как это можно сделать?

Суть такова: программа из второй книги должна запускаться при открытии этой книги только если книга открыта программно при нажатии на кнопку в первой книге.

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

Vovchick1 29-10-2005 00:44 368610

For LLIBED
Насколькоя понял, тебе нужно что-то вроде этого!!! Все описания в модулях!!!

Graers 02-11-2005 09:57 369747

Народ, Подскажите как разрешить ситуацию:
на одном из листов сохранен запрос к фоксовской базе -строка SQL : Select * from...
Прописан макрос меняющий команду (в цикле) SQL на update , предположим.
Если в свойствах запроса на листе ставить"фоновое обновление"
то каждый раз доходя до строки кода где переопределяется commandtext выскакивает ошибка "данная операция не дрпускается во время фонового обновления", если в свойствах запросаа опцию ФО убрать, то VBA ругается на отсутствие объекта, причем опять же при изменении commandtext

Margarittka 16-11-2008 14:05 954009

Народ! Помогите кто может!
мне нужен макрос в VBA который копировал бы фамилии на листы, имя которых бы совпадало с первой буквой фамилии.
Например: "Иванов" - в лист "И", "Петров" - в лист "П".
Очень нужно!
Помогите пожалуйста!
Заранее спасибо!

Codru 16-11-2008 22:54 954438

Margarittka, Вам нужно чтобы фамилии оставались и на первом листе или устраивает, чтобы после набора первой буквы, осуществился переход на требуемый лист?

Admiral 17-11-2008 03:34 954579

Margarittka, алфавитные листы можно создать тоже с помощью макроса
читать дальше »
Код:

Option Base 1
'...
Dim RussianLetters(33) As String
RussianLetters(1) = "Аа"
RussianLetters(2) = "Бб"
RussianLetters(3) = "Вв"
RussianLetters(4) = "Гг"
RussianLetters(5) = "Дд"
RussianLetters(6) = "Ее"
RussianLetters(7) = "Ёё"
RussianLetters(8) = "Жж"
RussianLetters(9) = "Зз"
RussianLetters(10) = "Ии"
RussianLetters(11) = "Йй"
RussianLetters(12) = "Кк"
RussianLetters(13) = "Лл"
RussianLetters(14) = "Мм"
RussianLetters(15) = "Нн"
RussianLetters(16) = "Оо"
RussianLetters(17) = "Пп"
RussianLetters(18) = "Рр"
RussianLetters(19) = "Сс"
RussianLetters(20) = "Тт"
RussianLetters(21) = "Уу"
RussianLetters(22) = "Фф"
RussianLetters(23) = "Хх"
RussianLetters(24) = "Цц"
RussianLetters(25) = "Чч"
RussianLetters(26) = "Шш"
RussianLetters(27) = "Щщ"
RussianLetters(28) = "Ъъ"
RussianLetters(29) = "Ыы"
RussianLetters(30) = "Ьь"
RussianLetters(31) = "Ээ"
RussianLetters(32) = "Юю"
RussianLetters(33) = "Яя"

For i = 1 To 33
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = RussianLetters(i)
Next i

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

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

Margarittka 17-11-2008 19:29 955187

Спасибо Admiral и Codru за помощь!!!!!!
Мне действительно нужно, чтобы фамилии оставались и на первом листе.
SOS!!!
Кто может-помогите!!!
Заранее спасибо!!!!!!!!!

azbest 19-11-2008 14:14 956962

Может вам попробовать всё это разместить на одном листе - 65535 строк это ведь много. Просто упорядочить общий список пофамильно. И сделать макрос по поиску нужной фамилии в общем списке, добавлению новой фамилии, удалению ненужной фамилии, импорту нового списка в общий список, "защиту" от ошибок, пустых строк и тд? Что Вы дальше будете делать с рассртированными по листам фамилиями на каждом листе, или Вам достаточно их раскидать по алфавитным листам - а дальше трава не расти?

Margarittka 19-11-2008 16:27 957137

Нужно просто рассортировать

Gerdewski 20-11-2008 09:00 957817

Возможно нужное решение в прикреплённом файле

Admiral 20-11-2008 12:41 958007

Gerdewski, всё работает. На листах Б и Д расположены лишние кнопки "Очистить листы" и "Раскопировать" соответственно.

Gerdewski 20-11-2008 14:25 958068

Цитата:

Цитата Admiral
На листах Б и Д расположены лишние кнопки "Очистить листы" и "Раскопировать" соответственно. »

понятия не имею откуда они там взялись. :)
Видимо в "формате объекта" (кнопки) на закладке "свойства" нужно поставить галку "не перемещать и не изменять размеры".

azbest 20-11-2008 17:40 958273

Я тоже его поробовал раскопировать. В конце получил вопрос - В буфере имеется большой список данных - сохранить его? Это при одном единственном столбце в Листе1. А если столбцов будет к примеру - 32 с разными данными? Попробуйте поэкспериментировать - Незабуксует программа? :blink:
Можно попробовать ещё вот так:
Код:

Sheets(1).select
s=Cells(1,1).currentregion.rows.count
for i=1 to s-1
sheets(1).select
Cells(i,1).select
FF=activecell.value
L=Left(Cells(i,1),1)
Sheets(L).select
Selection.insert Shift:=xldown
Activeceell.value=FF
next i
msgbox("Конец")


Pliomera 20-11-2008 23:12 958590

Цитата:

Цитата Admiral
Option Base 1
'...
Dim RussianLetters(33) As String
RussianLetters(1) = "Аа"
RussianLetters(2) = "Бб"
RussianLetters(3) = "Вв"
RussianLetters(4) = "Гг"
RussianLetters(5) = "Дд"
RussianLetters(6) = "Ее"
RussianLetters(7) = "Ёё"
RussianLetters(8) = "Жж"
RussianLetters(9) = "Зз"
RussianLetters(10) = "Ии"
RussianLetters(11) = "Йй"
RussianLetters(12) = "Кк"
RussianLetters(13) = "Лл"
RussianLetters(14) = "Мм"
RussianLetters(15) = "Нн"
RussianLetters(16) = "Оо"
RussianLetters(17) = "Пп"
RussianLetters(18) = "Рр"
RussianLetters(19) = "Сс"
RussianLetters(20) = "Тт"
RussianLetters(21) = "Уу"
RussianLetters(22) = "Фф"
RussianLetters(23) = "Хх"
RussianLetters(24) = "Цц"
RussianLetters(25) = "Чч"
RussianLetters(26) = "Шш"
RussianLetters(27) = "Щщ"
RussianLetters(28) = "Ъъ"
RussianLetters(29) = "Ыы"
RussianLetters(30) = "Ьь"
RussianLetters(31) = "Ээ"
RussianLetters(32) = "Юю"
RussianLetters(33) = "Яя"
For i = 1 To 33
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = RussianLetters(i)
Next i »

Вместо всего выше написанного, достаточно просто:
Код:

For i = 1 To 32
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Chr$(i + 191) & Chr$(i + 223)
Next i


Admiral 20-11-2008 23:49 958631

Pliomera, да конечно, но то наочние для новичков, которые ещё не знают про Chr$, а про массивы уже знают.

Aizec 23-11-2008 14:48 960934

Доброго времени суток всем присутствующим.
Кто-нибудь может помочь с такой проблемкой:
Есть две книги file1 и file2, каждая с двумя столбцами, первый из которых это идентификатор, второй - значения; вобщем надо значения из первой книги переместить во вторую (при совпадении ячеек из первого столбца). Я использовал следующий макрос, но работает он крайне медлено при большом количестве строк(понятно, при прямом переборе то). Вообщем, как можно более эффективно и быстрее это сделать?
Код:

i = 1
    While Workbooks(file2).Worksheets("List").Cells(i, 1).Value <> ""
          current = Workbooks(file2).Worksheets("List").Cells(i, 1).Value
          j = 1
          flag = False
          Do While Workbooks(file1).Worksheets("List").Cells(j, 1).Value <> ""
                  If Workbooks(file1).Worksheets("List").Cells(j, 1).Value = current Then
                      flag = True
                      Exit Do
                  End If
                  j = j + 1
          Loop
          If flag = True Then
            Workbooks(file2).Worksheets("List").Cells(i, 2).Value = Workbooks(file1).Worksheets("List").Cells(j, 2).Value
            Workbooks(file2).Worksheets("List").Cells(i, 2).Interior.Color = RGB(0, 255, 0)           
          End If
          i = i + 1         
    Wend


Strange_V 23-11-2008 14:53 960939

Aizec, ВПР?

Aizec 23-11-2008 15:23 960966

Цитата:

Цитата Strange_V
ВПР? »

Что это такое?

Strange_V 23-11-2008 15:37 960984

ВПР - это функция, точно не помню работает ли она с разными книгами, но думаю да.

Aizec 23-11-2008 16:33 961027

Strange_V Спасибо, но это не подходит - я ведь не знаю содержимого ячеек.

azbest 23-11-2008 21:33 961273

Если Вы не знаете содержимое ячеек, значит Вы не можете знать сколько раз может совпасть идентификатор из первого файла с перебираемыми идентификаторами во втором файле (если только идентификатор - это не числа по порядку). А у вас как только они совпадают (i,1).value = (j,1).value - происхлдит выход из цикла переборки и берётся следующий идентификатор из первого файла (i,1).
Кроме того у вас каждый раз при "exit Do" - рушится цикл переборки хотя текущий его счётчик "j" запоминается и далее уже при i = i+1 - снова создается новый Do ...Loop c запомненным "j", плюс ещё каждый раз происходит сравнение с "непустым" значением - проверка на конец списка.
Попробуйте вот так:
Код:

S1=Workbooks(file2).Worksheets("List").Cells(1, 1).currentregion.rows.count
S2=Workbooks(file1).Worksheets("List").Cells(1, 1).currentregion.rows.count
for x=1 to S1
idn1=Workbooks(file1).Worksheets("List").Cells(x, 1).value
      for y=1 to S2
        idn2=Workbooks(file2).Worksheets("List").Cells(y, 1).
            if idn1=idn2 then
            zn1=Workbooks(file1).Worksheets("List").Cells(x, 2).value
            Workbooks(file2).Worksheets("List").Cells(y, 2).value=zn1
            Workbooks(file2).Worksheets("List").Cells(i, 2).Interior.Color = RGB(0, 255, 0
            end if
            next y
next x


Aizec 24-11-2008 15:28 962069

azbest Спасибо.
И у меня еще один вопрос возник: как импортировать в Excel не весь текстовый файл, а только текст заключенный в кавычки ""? Потом его еще надо будет после перевода обратно вставить.

azbest 29-11-2008 15:43 967264

Извините, в этом помочь не могу. :drug:

Margarittka 07-12-2008 20:10 974837

Спасибо всем!!!!!!!!!!!!!!!
Все работает просто потрясающе!!!!!!!!!!!!!!!!!!!!

MaryMegg 15-05-2009 15:24 1119220

Добрый день.
Помогите пожалуйста. Вопрос такой:
Есть Книга в Ecxel, в ней 3 листа...
1-й лист - опросник; 2-ой лист - обрабатывает данные опроса, 3-й должен содержать в себе (по строкам) ФИО из 1-ого листа и данные из 2-ого листа. Должно быть опрошено 60 чел. и соответственно на 3-ем листе должна появиться таблица из 60 строк с ФИО и данными опроса по каждому.
На 1-ом листе имеется кнопка Сохранить, после ввода данных каждым участником нажатие этой кнопки должно приводить к перемещению данных относящихся к данному участнику опроса в таблицу на 3-ем листе, а опросник приводиться в исходный вид (очищаться).
Основной вопрос в следующем, как добиться того, чтобы данные о каждом следующем участнике записывались в следующую строку.
Советам по другим моментам грамотного написания данного макроса буду рада.
Заранее спасибо:-)

Pliomera 24-05-2009 14:56 1126300

Цитата:

Цитата MaryMegg
Основной вопрос в следующем, как добиться того, чтобы данные о каждом следующем участнике записывались в следующую строку. »

Для этого надо определить номер последней занятой строки. Для этого немножко курим мануал по ключевым словам Cells(..., ...).End(xlDown)

vik 13-10-2009 23:01 1242216

Доброго времени суток всем. Помогите пожалуйста.
Требуется каждую ячейку выделенного блока скопировать на отдельный лист книги.
т.е. одная ячейка- один лист.
Примерно вот так.
Саша- ячейка на лист1
Петя-ячейка на лист2
Миша-ячейка на лист3
и.т.д.
Заранее спасибо

Доброго времени суток всем. Помогите пожалуйста.
Требуется каждую ячейку выделенного блока скопировать на отдельный лист книги.
т.е. одная ячейка- один лист.
Примерно вот так.
Саша- ячейка на лист1
Петя-ячейка на лист2
Миша-ячейка на лист3
и.т.д.
Заранее спасибо.

Pliomera 14-10-2009 14:16 1242595

vik,

Код:

Sub CellsCopy()
x = 1
With Selection
For i = 1 To .Columns.Count
For j = 1 To .Rows.Count
x = x + 1
If x > Sheets.Count Then Sheets.Add after:=Sheets(x - 1)
Sheets(x).Cells(1, 1).Value = .Cells(j, i).Value
Next j
Next i
End With
End Sub


vik 14-10-2009 15:11 1242651

Pliomera,

Спасибо!!!!!
То что надо!

MR.TOR 27-04-2010 16:06 1401867

Пожалуйста помогите.
Нужен макрос для Excel, чтоб в документе в каждой заполненной ячейке содержимое брал в одинарные кавычки и перед началом ставил пробел, пример : пробел'0000'
Буду очень признателен всем кто посодействует!

Delirium 28-04-2010 01:09 1402220

MR.TOR, ячейки должны задаваться или же просто нужен обход всех ячеек листа? Как пример - для диапазона в 500 строк и 500 столбцов:

Код:

Sub Макрос1()
    For i = 1 To 500
        For j = 1 To 500
            If Cells(i, j) <> "" Then
                Cells(i, j) = " '" & Cells(i, j) & "'"
            End If
        Next
    Next
    MsgBox "Готово"
End Sub

P.S. И перестаньте писать капсом, первое предупреждение.

MR.TOR 28-04-2010 11:35 1402429

Delirium спаибо Вам большое. Очень сильно выручили! Этот макрос для Excel, это то что мне нужно для моей роботы. Большое человеческое спасибо!

Delirium 29-04-2010 00:49 1402986

MR.TOR, всегда рады помочь :)

Большой Кол 20-05-2010 12:19 1417333

Помогите пожалуйста написать макрос. Мне нужно что бы из всех книг Excel удалялись все строки в которых первый столбец содержит МИ ( например МИ №1 или МИ №3 или МИ25), причем такие строки идут вперемешку с тем что надо оставить(а это все остальное).
Например

Х| A | B |
1| МИ 10 | 25 |
2| РФ | 100 |

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


Вот что я на ваял

Код:

Sub MySub()

Dim x As Worksheet
Dim a As Integer
For Each x In ActiveWorkbook.Sheets
If Not x.Cells.Find(what:="МИ") Is Nothing Then
With x
    a = CStr(x.Cells.Find(what:="МИ").Row)
    .Rows(a & ":" & a).Delete Shift:=xlUp
End With
End If
Next x

End Sub

Но не работает - вообще ничего не удаляет . Где я ошибся?

Delirium 21-05-2010 01:12 1417801

Большой Кол, всего навсего использовали не тот цикл, потому и не удаляло. Рабочий код:

Код:

Dim x As Worksheet
    Dim a As Integer
    For Each x In ActiveWorkbook.Sheets
    While Not x.Cells.Find(what:="МИ") Is Nothing
        With x
            a = CStr(x.Cells.Find(what:="МИ").Row)
        .Rows(a & ":" & a).Delete Shift:=xlUp
        End With
    Wend
Next x


BonoU2 16-07-2010 21:05 1454724

ребята программисты, помогите плиз, нужно в книге выделить цветом на 2-х листах ячейки с одинаковыми записями (я выделил их вручную как бы я хотел что б это делалось). А еще лучше чтоб отобранные данніе сопоставлялись в отдельнои листе. Помогите с макросом. Заранее благодарен
Прилагаю файл (записей много потому он большой).

Delirium 17-07-2010 15:39 1455001

BonoU2, по каким полям проводить сверку? В выделенном примере на листе выделена запись с номером 001602. На первом листе 2 строки с таким номером.

BonoU2 18-07-2010 14:55 1455499

сравнения с листа 803 - ТОЛЬКО по столбцам e,f и листа Новичівська тоже ТОЛЬКО столбцы e,f , но при етом мне надо результат (я сделал вручную) как на листе1 - в виде столбцов, возможно так? заранее благодарен. (прикрепил переделланый чучуть)

Delirium 19-07-2010 01:41 1455784

Вложений: 1
Макрос запускается по сочетанию клавиш Ctrl+E. После отработки выводит сообщение Done и открывается результативный лист.

В архиве 2 файла, один в формате Excel 2003, другой - в формате Excel 2007. Они идентичны.

BonoU2 19-07-2010 15:10 1456073

Delirium огромное спасибо, а как сравнить только по столбцам f ? пожалуйста дайте цикл макроса ибо как мне использовать на других файлах?

Delirium 20-07-2010 01:20 1456438

BonoU2, открываем Excel, жмем Alt+F11, открывается окно макросов, переходим на вкладку Modules - там и будет исходный текст нашего макроса. Ниже приведен его текст:


Код:

'
'
' Сочетание клавиш: Ctrl+e
'
Dim RowCountL1 As Integer
Dim RowCountL2 As Integer
Dim ResultIndex As Integer



Sheets("803").Select
Range("A1").Select
RowCountL1 = ActiveSheet.UsedRange.Rows.Count ' Кол-во строк на первом листе (803 который)
 
Sheets("Новичівська").Select
Range("A1").Select
RowCountL2 = ActiveSheet.UsedRange.Rows.Count ' Кол-во строк на втором листе
 

ResultIndex = 2
For i = 2 To RowCountL1
    For j = 2 To RowCountL2
        If Sheets("803").Cells(i, 5) = Sheets("Новичівська").Cells(j, 5) And Sheets("803").Cells(i, 6) = Sheets("Новичівська").Cells(j, 6) Then
       
        Sheets("Result").Cells(ResultIndex, 1) = Sheets("803").Cells(i, 1)
        Sheets("Result").Cells(ResultIndex, 2) = Sheets("803").Cells(i, 2)
        Sheets("Result").Cells(ResultIndex, 3) = Sheets("803").Cells(i, 3)
        Sheets("Result").Cells(ResultIndex, 4) = Sheets("803").Cells(i, 4)
        Sheets("Result").Cells(ResultIndex, 5) = Sheets("803").Cells(i, 5)
        Sheets("Result").Cells(ResultIndex, 6) = Sheets("803").Cells(i, 6)
       
        Sheets("Result").Cells(ResultIndex, 8) = Sheets("Новичівська").Cells(j, 1)
        Sheets("Result").Cells(ResultIndex, 9) = Sheets("Новичівська").Cells(j, 2)
        Sheets("Result").Cells(ResultIndex, 10) = Sheets("Новичівська").Cells(j, 3)
        Sheets("Result").Cells(ResultIndex, 11) = Sheets("Новичівська").Cells(j, 4)
        Sheets("Result").Cells(ResultIndex, 12) = Sheets("Новичівська").Cells(j, 5)
        Sheets("Result").Cells(ResultIndex, 13) = Sheets("Новичівська").Cells(j, 6)
       
        ResultIndex = ResultIndex + 1
        End If
    Next j
Next i
MsgBox "Done"
Sheets("Result").Activate

Строка
Код:

If Sheets("803").Cells(i, 5) = Sheets("Новичівська").Cells(j, 5) And Sheets("803").Cells(i, 6) = Sheets("Новичівська").Cells(j, 6)
проверяет по нужным столбцам. Соответственно, если необходимо сравнивать только по столбцу F, то нужно убрать условие Sheets("803").Cells(i, 5) = Sheets("Новичівська").Cells(j, 5)

Для использования в других файлах:
ОТкрываем документ, идем Сервис-Макросы - Начать запись. Перед началом записи выбираем сочетание на клавиатуре для запуска. Начинаем запись и тут же останавливаем. Запускаем редактор (Alr+F11) и вставляем наш код. Следует учесть, что в макросе идет привязка к номерам столбцов, поэтому, если структура документа другая, то необходимо будет предварительно подправить код.

BonoU2 20-07-2010 16:28 1456741

Delirium Извените что надоедаю.вроде бы переделал так ка Вы говорили но что-то у меня не идет, останавливается, посмотрите пожалуйста вложение, я в коде переименовал листы и только по F сравниваю, правильно ли я сделал? и в дальнейшем если я просто в етот файл буду вставлять другие значения соответственно в лист 1 и 2 будет ли работать код? Заранее благодарен

Delirium 21-07-2010 01:04 1457147

BonoU2, код необходимо вставить не в "Эта книга", а в Module1, так, чтобы код был между Sub и End Sub. Затем идем Сервис-макрос-безопасность - выбираем наш макрос и назначаем ему клавишу или просто жмем Выполнить.

surgutfred 03-08-2010 10:01 1465804

Люди, натолкните на мысль, как сделать.
В таблице есть строки, где данные забиты в два уровня:
"275,83
40,66"

Вот так, но это не объединеные ячейки. Одна ячейка. Мне надо из таких строк сделать две, разделив данные.

Т.е. из этого:



Должно получиться это:




В ячейке что бы написать второй строкой жмем ALT+Enter - это что перевод каретки называется? По нему отслеживать?

Delirium 04-08-2010 00:34 1466376

Цитата:

Цитата surgutfred
В ячейке что бы написать второй строкой жмем ALT+Enter - это что перевод каретки называется? По нему отслеживать? »

Да, это перевод каретки (или же \b \r в других кодах). Если подождете сутки, вышлю файл, я там как раз делал подобное разбиение и поиск в таких ячейках.

BonoU2 05-08-2010 15:46 1467489

Delirium за Макрос вЕликое спасибо, все работает ка Вы говорили!
Меня тоже интересует как автоматом сделать то что вынес на обговор surgutfred о переводах каретки, иногда такое тоже нужно...
И у меня еще вопрос (извените что надоедаю, файл (вложение) с одинаковыми столбцами в листах : Вовківецька-25, Вербовецька-99, Новичівська-116. Нужно на лист ЗАГАЛЬНА скопировать все данные с етих листо, то есть не делать копирование данных вручную ( у меня таких листов будет много и данные постоянно добавляются), хочу заметить что шапка на всех листах одинакова что б при автомат. копировании она не повторялась в листе ЗАГАЛЬНА. ???

BonoU2 06-08-2010 10:09 1467986

...и еще такой вопрос, у меня вместо подщета формул в екселе 2003 отображаются сами формулы, то есть =СУММ(D34:D58) , а должно считать, не подскажмте как исправить???

Delirium 09-08-2010 00:31 1469667

Цитата:

Цитата BonoU2
у меня вместо подщета формул в екселе 2003 отображаются сами формулы, то есть =СУММ(D34:D58) , а должно считать, не подскажмте как исправить?? »

Выделяем ячейку - формат ячеек - меняем вместо ТЕКСТ на ОБЩИЙ. Если же формулы отображаются, но подсчет производится, то идем в Сервис-параметры - и там убираем галку с "Отображать формулы"
Цитата:

Цитата BonoU2
как автоматом сделать то что вынес на обговор surgutfred о переводах каретки, иногда такое тоже нужно »

Сегодня постараюсь найти документ и выложить сюда. Файл вложения посмотрю.

Delirium 09-08-2010 01:26 1469697

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

BonoU2 09-08-2010 15:10 1470048

Вложений: 1
Delirium так там ниче сравнивать не нужно, нужно чтоб результат вышел вот такой (вложение, лист ЗАГАЛЬНА) и все???

RUVATA 09-08-2010 16:29 1470098

конструкция IF Else
примерно так это должно выглядеть
Код:

Sub такая-то () (если необходимо привязать к событию, то там сложнее, и все-же)
'адрес ячейки (формат R1C1 без кавычек, формат буквенно-циферный A1,B4 в кавычках
If Range("адрес ячейки").value = тому-то then Range("адреc") = тому - то
'если необходимо производить какие-то действия при невыполнении условия ждобавляем Else
Else
Range("адреc") = тому - то
End if

End sub

...
конкретней и я пример кода дам, на примере легче разобраться...
читайте справку
если займетесь всерьез, советую найти учебник Уокенбаха - он очнь доступно на примере Excel вводит в VBA

BURJ 22-08-2010 18:40 1479460

Прошу помощи, ибо в VBA к сожалению почти не понимаю.
Смысл проблемы вот в чем: из сторонней программы я передаю в excel файл, в котором числа и даты сохранены как текст.
Найдено решение в виде

Sub В_Число()
With ActiveSheet.UsedRange
.Replace ",", "."
arr = .Value
.NumberFormat = "General"
.Value = arr
End With
End Sub

Проблема в другом, как сделать настройку, вывести это все в виде значка на панель в Excele, подключить, проверять нет ли такой установленной уже
и максимально упростить для подключения другими пользователями.
Плз, помогите. Макросы пробовал записывать - выходит ерунда.

okshef 22-08-2010 19:40 1479513

BURJ, назначьте макрос (программу) кнопке. И версию Office озвучьте, пожалуйста.

Delirium 23-08-2010 01:00 1479672

Цитата:

Цитата BonoU2
как автоматом сделать то что вынес на обговор surgutfred о переводах каретки »

Совсем забыл, что обещал скинуть решение. Во вложении файл, 1 кнопка. При нажатии выбираем диапазон, строку поиска, в какой столбец выводить количество совпадений. В примере в первом столбце нет данных с переводом каретки, вставьте сами. Файл в формате 2007 Excel

BURJ 23-08-2010 01:09 1479679

okshef, все назначил, это все понятно. КАК АВТОМАТИЗИРОВАТЬ процесс назначения этой кнопки? Т е создать такую надстройку которая при добавлении все делала.
ЗЫ. 2000

okshef 23-08-2010 07:56 1479747

Цитата:

Цитата BURJ
2000 »

В нем можно создать свою кнопку на панели с назначенным макросом, причем, независимо от файла. Единственное, не знаю, какой файл в отвечает за пользовательские шаблоны. Берете этот файл и копируйте его на все компьютеры, и у каждого пользователя в Excel будет эта кнопка. За пояснением лучше обратиться в форум Microsoft Office.

RUVATA 24-08-2010 12:38 1480675

кострукция

цикл Do while (сам определись до какого момента выполнять)

конструкция if - Else (проверишь пуста или нет такая-то Range, Offset - сместишься)
н\п

Код:

Sub First ()
Dim EndWhile As Variant

Set EndWhile = Range("A1") 

'цикл "пока выполняется условие", в данном случае проверяется адрес EndWhile
Do while EndWhile.Address <> "$C$4"
'проверка пустая ли ячейка
      If  EndWhile.value <> "" Then
'если нет то выбираем для проверки следующую
Set EndWhile = EndWhile.Offset(1,0)
      Else
'если да, то что-то там ей присваиваем и переходим к следующей ячейке
EndWhile.Value = "что-то там"
Set EndWhile = EndWhile.Offset(1,0)
      End If

Loop

...А вообще если задумались писать макросы, то для начала возьмитесь за учебник, для совсем новичка очень неплох Уокенбах

Delirium 24-08-2010 15:01 1480769

RUVATA, к чему ваше последнее сообщение, дублирующее 69 сообщение ? Если предлагаете решение проблемы, озвучивайте хотя бы вкратце просьбы, иначе непонятно, к чему относить текст.

RUVATA 24-08-2010 16:24 1480815

извиняюсь... :o
э-т ответ на #10...
я че-т проглазел, что тут ужо 8 страниц...
гость недавний... уж прощайте


Время: 03:33.

Время: 03:33.
© OSzone.net 2001-