Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос по сокрытию текста
 
Здравствуйте, господа коллеги.  
 
Подскажите пожалуйста, как в Excel-е при определенных условиях скрывать или отображать текст? По идее мне нужно это сделать в Word-е, а сюда задаю вопрос потому что хочу сделать по аналогии.  
Т.е. есть макрос с параметрами. Этот макрос запускается из внешней системы и в него передаются параметры. При определенных значениях параметров макрос должен скрыть текст, а какой-то отобразить... Сложность в тот что расположение текста не привязано к ячейке как в Excel-е. Так думаю что этот текст надо как-нибудь пометить переменной, можно ли такое сделать?
Сравнение чисел
 
Родилась у меня одна идея, завтра постараюсь ее реализовать если успею  
Что из этого получится отпишу сюда...
Сравнение чисел
 
Блин, тогда что сделать, может посоветуете какое-нибудь решение без изменения концепции самого алгоритма?!
Сравнение чисел
 
{quote}{login=The_Prist}{date=02.06.2010 03:57}{thema=}{post}А-а-а...Динамический...  
А почему объявляете тогда не как массив?  
Dim arr1grp  
 
Надо тогда Dim arr1grp() As string  
 
и еще - динамические массивы не бывают многомерными. Они могут быть только одномерными.  
 
А потом как Hugo написал - ReDim Preserve arr1grp(ind + 1). Только он неправильно написал. Т.к. динамический массив не может иметь расширение по "столбцам"(то бишь многоразмерность), то 6 мешает правильному выполнению...{/post}{/quote}  
У меня есть многомерный массив(8 столбцов)  
И мне надо это массив сгруппировать(сжать) по первым двум столбцам,  
и если вы правы тогда это сделать не возможно чтоли?
Сравнение чисел
 
{quote}{login=The_Prist}{date=02.06.2010 03:36}{thema=}{post}Вот эта строка лишняя  
ReDim arr1grp(ind + 1, 6) As String  
Да и заносите данные в массив Вы неправильно...  
 
 
For x = LBound(arr1) To UBound(arr1)  
ind = ind + 1  
arr1grp(ind,1) = arr1(x, 0)  
arr1grp(ind,1) = arr1(x, 1)  
arr1grp(ind,2) = xqty1  
arr1grp(ind,3) = xamount1  
arr1grp(ind,4) = xqty2  
arr1grp(ind,5) = xamount2  
Next{/post}{/quote}  
 
Почему не правильно?  
Это же вроде динамический массив, я заранее не знаю какого размера будет первый массив, вот из-за этого ReDim arr1grp(ind + 1, 6) As String  
 
Не понял почему так?  
arr1grp(ind,1) = arr1(x, 0)  
arr1grp(ind,1) = arr1(x, 1)
Сравнение чисел
 
Что-то не получается сделать одну вещь  
Бегу по массиву и пытаюсь скинуть данные по определенным условиям в другой массив  
Вот часть кода:  
Dim arr1grp  
ReDim arr1grp(1, 6)  
Dim ind   As Long  
 
For x = LBound(arr1) To UBound(arr1)  
       ind = ind + 1  
       ReDim arr1grp(ind + 1, 6) As String  
       arr1grp(ind)(0) = arr1(x)(0)  
       arr1grp(ind)(1) = arr1(x)(1)  
       arr1grp(ind)(2) = xqty1  
       arr1grp(ind)(3) = xamount1  
       arr1grp(ind)(4) = xqty2  
       arr1grp(ind)(5) = xamount2  
Next  
 
Но почему-то массив все равно пустой, хотя вижу что в таблице нужное мне число строк
Сравнение чисел
 
Дело в том что я не понимаю как объявить массив такого же типа что и arr1 а суммирование я сделаю  
 
Set ts1 = CreateObject("Scripting.FileSystemObject").OpenTextFile(myPath1, 1)  
arr1str = Split(ts1.ReadAll, vbCrLf)  
ts1.Close  
ReDim arr1(UBound(arr1str))    
For x = LBound(arr1str) To UBound(arr1str)  
arr1(x) = Split(arr1str(x), vbTab)    
Next  
 
Dim arr1grp  
Redim arr1grp(UBound(arr1))  
 
'Суммирую  
For x = LBound(arr1) To UBound(arr1)  
 x = 0  
 For y = LBound(arr1) To UBound(arr1)  
   IF arr1(x)(0) = arr1(y)(0) Then  
     x = x + arr1(y)(4)  
     'Здесь надо выкинуть в массив arr1grp  
   end if  
 Next  
Next
Сравнение чисел
 
{quote}{login=Hugo}{date=27.05.2010 04:38}{thema=}{post}А вообще я пока беру тайм-аут, работы навалили...{/post}{/quote}  
Это ваше право...  
Вы уже достаточно помогли . Тенкс
Сравнение чисел
 
{quote}{login=Hugo}{date=27.05.2010 04:38}{thema=}{post}Что-то я не очень уловил суть. Ну положим суммы одинаковых пар получили - что с ними делать? Сравнивать суммы одного файла с суммами другого?{/post}{/quote}  
Пример: таблица 1 содержит  
BIGBEN 1,000 2,000 3,000  
BIGBEN 2,000 2,000 0,000  
BIGBEN 1,000 1,000 1,000  
BIGDAD 1,000 1,000 1,000  
BIGDAD 1,000 2,000 3,000  
после отработки в 2 таблице должно быть вот так  
BIGBEN 4,000 5,000 4,000  
BIGDAD 2,000 3,000 4,000
Сравнение чисел
 
Hugo,    
ТЗ изменилось немного, ключевые полей теперь не 3 а два, это MATNR и BUKRS  
и дело в том что на один BUKRS и MATNR может приходить несколько записей по HKONT  
и я хотел сделать такой финт, сгруппировать таблицу 1 по ключевым полям (MATNR BUKRS) с суммированием числовых полей,    
подскажите как это можно реализовать  
а дальше продолжение старого алгоритма  
 
Хотел сделать примерно  так  
   ReDim arr1(UBound(arr1str))    
   For x = LBound(arr1str) To UBound(arr1str)  
   arr1a(x) = Split(arr1str(x), vbTab)    
   arr1b(x) = Split(arr1str(x), vbTab)    
   Next  
 
For x = Lbound(arr1a) To Ubound(arr1a)  
   For x = Lbound(arr1b) To Ubound(arr1b)  
     If arr1a(x)(0) = arr1b(x)(0) then  
        if err <> 0 then  
          exit for  
        end if  
        ...'Здесь выкидывать в 3 таблицу-группировок arr1g с суммированием  
 
     end if  
   next  
next  
- не знаю как типизировать таблицу arr1g  
- как выкинуть данные из одной таблицы в другую?  
- может есть альтернативный вариант?  
С уважением, FeBO
Сравнение чисел
 
Спасибо большое
Сравнение чисел
 
Всем доброго времени суток...  
 
Из прошлой темы "Сверка данных двух листов" я сравнивал числовые значения таким вот образом  
If arr1(x)(6) <> arr2(y)(6) Or arr1(x)(7) <> arr2(y)(7) Or arr1(x)(8) <> arr2(y)(8) Or arr1(x)(9) <> arr2(y)(9)  
условие отрабатывает не корректно  
к примеру если arr1(x)(6) = "13,000" а arr2(y)(6) = "   13,000", программа поймет это как неравенство и провалится в условие, по хорошему это числа и они должны быть равны  
подскажите как решить эту задачу...  
 
С уважением, FeBO.
Сверка данных двух листов
 
А динамически можно использовать оператор RANGE(X:X).Select  
а X задаю сам...
Сверка данных двух листов
 
Все разобрался )), и в правду если в файлах заменить разделители на запятые, все отрабатывает отлично    
Спасибо большое, очень выручили
Сверка данных двух листов
 
{quote}{login=Hugo}{date=24.05.2010 03:00}{thema=}{post}Т.е. я дома менял в тексте точки на запятые, а на работе наоборот, менять не надо. Если Вам нужен универсальный код, можно сделать. Если надо именно поменять на запятые, можно сделать (легче). Если надо ничего не менять, можно сделать :){/post}{/quote}  
)) Я просто хочу понять, с VBA в Excel-е первый раз работаю, да и вообще с VBA
Сверка данных двух листов
 
Т.е. если я выгружу с запятыми вместо точек, все будет ОК?  
 
Теперь вопрос:    
'    Debug.Print UBound(arr1)  
'    Debug.Print UBound(arr1(x))  
'    Debug.Print arr1(x)(x)  
   If arr1(x)(2) = arr2(y)(2) Then  
       If arr1(x)(0) = arr2(y)(0) And arr1(x)(1) = arr2(y)(1) Then  
       If Err = 0 Then  
       flag = True: arr2(y)(5) = "FIND"    
в этот момент когда arr1(x)(2) = "000000000013000722" arr1(x)(0) = "А000" arr1(x)(1) = "13101800", а arr2(y)(2) = "000000000013000722" arr1(y)(0) = "А000" arr1(y)(1) = "13101800"  
Но код возврата Err <> 0  
В чем может быть проблема?
Сверка данных двух листов
 
Привет, в последнем примере  
не могу понять почему разницу не выдает, хотя в отладчике вижу содержимое переменных  
wb3sh.Cells(iLastRow3, 12) = arr1(x)(6) - arr2(y)(6)  
wb3sh.Cells(iLastRow3, 13) = arr1(x)(8) - arr2(y)(8  
wb3sh.Cells(iLastRow3, 14) = arr1(x)(7) - arr2(y)(7)  
wb3sh.Cells(iLastRow3, 15) = arr1(x)(9) - arr2(y)(9)
Сверка данных двух листов
 
Доброе утро  
За море сорри ))  
 
Просмотрел два файла. Спасибо за старание. С меня пиво )  
Теперь к делу...  
1. Можно ли сделать чтобы открывать и видеть не три файла или книги, а все в одном файле на 3-ех закладках. Ну это так, найс ту хэв )  
2. Как понял по коду, если первое условие    
If arr1(x)(2) = arr2(y)(2) And arr1(x)(0) = arr2(y)(0) And arr1(x)(1) = arr2(y)(1) Then  
возвращает FALSE или ERR <> 0, макрос продолжает цикл, и в конце концов если он не найдет не одной записи, он просто пропускает запись  
можно ли добавить такую логику, есть запись не найдена в массиве arr2 то строку или запись засунуть в разницу, (число - 0)    
3. Сравнение идет по отношению ко второму массиву(таблице), т.е. фактически цикл бежит по первому массиву, сравнивая со вторым, возникает сомнение если в таблице 2 есть запись (по ключу) которой нету в 1 таблице, программа просто проигнорит эту запись, а по хорошему это такой же вариант как во 2 случае.
Сверка данных двух листов
 
))) да конечно, я в общем говорю, ну в любом случае спасибо
Сверка данных двух листов
 
1. Не обязательно все, каждое поле сравниваем по отдельности, и пишем разницу (есть разница пишем разницу, нет разницы пишем 0, если все 4 поля равны тогда строку пропускаем);  
2. Мне бы сейчас хоть какую-нибудь сверку получить в ексел ))  
На самом деле программа была готова, просто она все действия делала на уровне системы, т.е. я подгружал файлы через скуль обрабатывал и проводил перекрустную сверку, и выплевывал в 3 вкладки в ексел. Но по какой-то причине заказчику нужен такой вариант решения.
Сверка данных двух листов
 
{quote}{login=Hugo}{date=21.05.2010 04:33}{thema=}{post}Ну и ещё - надо именно разницу определить, или все данные нужны в одном файле?{/post}{/quote}  
Разницу определить, и в одном файле. Вот для этого и нужны 3 вкладки:    
1. Система 1;  
2. Система 2;  
3. Разница.
Сверка данных двух листов
 
{quote}{login=Hugo}{date=21.05.2010 04:32}{thema=}{post}Ну а сохранять-то обе строки, или из одного файла?{/post}{/quote}  
Сохранять надо три ключевых поля, суммовые значения (QTY1, AMOUNT1, ...) из каждого файла(получается 8 полей), и поля с разницей (TABLE1-QTY1 - TABLE2-QTY1, ...)  
Структура будет такой(примерно):  
1.BUKRS  
2.HKONT  
3.MATNR  
4.QTY1_1 = TABLE1-QTY1  
5.QTY1_2 = TABLE2-QTY1  
...  
12. RAZN_QTY1 = TABLE1-QTY1 - TABLE2-QTY1  
13. RAZN_QTY2 = TABLE1-QTY2 - TABLE2-QTY2  
14. RAZN_AMOUNT1 = TABLE1-AMOUNT1 - TABLE2-AMOUNT1  
15. RAZN_AMOUNT2 = TABLE1-AMOUNT2 - TABLE2-AMOUNT2
Сверка данных двух листов
 
2-файлик...  
Структура файлов(поля):  
1. BUKRS - ключевое поле  
2. HKONT - ключевое поле  
3. MATNR - ключевое поле  
4. BWKEY  
5. MAKTX  
6. QTY1  
7. AMOUNT1  
8. QTY2  
9. AMOUNT2  
1 файл - таблица TABLE1  
2 файл - таблица TABLE2  
В двух таблицах неопределенное количество строк. Данные из 1 таблицы могут быть во 2-ой таблице, так и не быть, и наоборот.  
Суть задачи:  
1. Связать по ключевым полям таблицы    
(IF TABLE1-BUKRS = TABLE2-BUKRS AND TABLE1-HKONT = TABLE2-HKONT AND TABLE1-MATNR = TABLE2-MATNR ), и искать совпадения, если находим,    
сравниваем соответсвующие числовые поля поля (IF TABLE1-QTY1 <> TABLE2-QTY1. Ну подобное). Если есть разница между данными сохранять их на 3-листе  
 
P.S.: Если что непонятно, пишите
Сверка данных двух листов
 
Данные тестовые  
1 файлик
Сверка данных двух листов
 
Сорри, на 3-лист
Сверка данных двух листов
 
С подтягиванием файлов я разобрался, мне нужно решение конкретно сверяющее данные между 1 и 2 листами и выводящий на 2-лист
Сверка данных двух листов
 
Данные выгружаются из разных систем в текстовый файл. Потом одна из систем в фоновом режиме, т.е. без участия конечного пользователя запускает OLE (Excel.Application), который в свою очередь запускает макрос по подтягиванию и сверке данных. А затем сохраняет документ. Ну это моя часть, которую я сделал, не могу разобраться с Екселем и макросами.    
И все это происходит на автомате.
Сверка данных двух листов
 
Добрый день господа.  
 
Хочу написать макрос, который будет делать вот это:  
1. Загрузит 1 файл (*.txt) в Лист-1 (таблица данных, разделитель ТАБ)  
2. Загрузит 2 файл (*.txt) в Лист-2 (таблица данных, разделитель ТАБ)  
3. Произведет сверку данных:  
  Сравнение ключевых полей (Номер региона, номер счета, номер материала). Если TRUE  
  будет сравнивать значения числовых полей. Если числа равны, бежим по  табличке    
дальше, если нет берем эти две строчки и выкидываем их на Лист 3. Соответствующим образом сформируется 3-таблица на 3 Листе  
  Сравнение ключевых полей (Номер региона, номер счета, номер материала). Если FALSE  
  запишет строку в Лист-3  
 
*Структуры данных 1-го и 2-го файлов равны  
А теперь собственно вопрос: Возможно ли это вообще сделать? Если да, подскажите какой-нибудь пример.    
P.S.: Надеюсь все четко описал...
Страницы: 1
Наверх