Да се научим да работим с Excel - тема 3

  • 88 055
  • 743
  •   1
Отговори
# 465
  • Мнения: 35 920

Честно казано на мен ми идва едно много лесно, но "бабешко" решение. Не ми се смейте....

Ясно е, че трябва да се запълнят празните редове на клиент и да може после да се търси по продукт, като излиза и клиента.

Аз лично бих направила следното:

В клетка В3 правя да е равна на В2, т.е. името на клиента. После copy формулата, после - филтър, избирам само blanks, после ги маркирам всички празни и paste формулата. Така ще се запълнят отгоре до долу с името на съответната фирма над клетката и ще може да се филтрира по продукт, като излиза и фирмата.

# 466
  • тук-там
  • Мнения: 4 364
Да, обаче това трябва да го повтаряш с всеки един клиент. Ако са няколко стотици?
И моята таблица е същата - само, че е от системата за контрол на достъп.
Имам дата в А, име в В, час на регистрация в С.
В А и В са данните са само на първото чекиране.  и след това в С се изреждат различните часове един под друг на ред. Т.е ако е влизал излизал няколко пъти - ще имам таблица точно като горната, но в Име на продукта ще имам часове.
Аз търся влизанията след или преди определен час и като селектирам по С - в А и В няма никой.

# 467
  • Мнения: 35 920
Не е нужно с всеки клиент. Затова копираш формулата,  филтрираш само празните, маркираш и пейст. Така формулата се копира само на празните и съответно си приема първия ред от всеки клиент.
Пробвайте как става....

# 468
  • тук-там
  • Мнения: 4 364
Не е нужно с всеки клиент. Затова копираш формулата,  филтрираш само празните, маркираш и пейст. Така формулата се копира само на празните и съответно си приема първия ред от всеки клиент.
Пробвайте как става....

Ще пробвам утре, че наистина ми е важно.
Благодаря!

P.S.

Работи - не се стърпях, че наистина ми е зор.

Благодаря отново!

Последна редакция: вт, 04 фев 2020, 22:54 от Wild_rabbit

# 469
  • Мнения: 35 920
Дано съм ти от полза,  пиши после дали е  станало.

# 470
  • Варна
  • Мнения: 3 308
Soul Free Твоят вариант също е подходящ. Първо трябва да се изтрият празните редове обаче.

Пепина обаче търси решение с един клик. Ако използва Power Query и извлича данните от друг екселски файл (стига да се казва по същия начин и да се намира на същото място), след първото създаване на заявката (премахване на редове и копиране на стойности), трябва само да натиска Refresh, т.е. един клик.
 Ако все пак се иска този клик да стартира макрос, нека с рекордера запише как рефрешва заявката и готово.
Кодът е един ред:
ActiveWorkbook.Connections("Query - Sheet1").Refresh

/Query-Sheet1 e името на връзката с източника (задава се от Excel автоматично или може да се сложи някакво user friendly име.

Дали ще натиска Refresh от панела Query and Connections или ще стартира макрос, който да прави същото, разлика няма за мен, все е един клик.

# 471
  • Мнения: 35 920
Защо да се трият редове? Няма нужда. Просто решение е за това,  което трябва.

Принципно може да се направи кой както желае. С макрос в  случая ми е като да режеш хляб с  трион - прекалено сложно за нуждите на филтриране по продукт.

# 472
  • Мнения: 10 878
Здравейте, амбицирате ме, да решим заедно въпроса.
Намерих как да се реши първата фаза от задачата -

Макрос -Изтриване  на празните редове на целия Sheet.

Sub DeleteAllEmptyRows()
    Dim LastRowIndex As Integer
    Dim RowIndex As Integer
    Dim UsedRng As Range
 
    Set UsedRng = ActiveSheet.UsedRange
    LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
    Application.ScreenUpdating = False
 
    For RowIndex = LastRowIndex To 1 Step -1
        If Application.CountA(Rows(RowIndex)) = 0 Then
            Rows(RowIndex).Delete
        End If
    Next RowIndex
 
    Application.ScreenUpdating = True
End Sub
===============================
За тези, които не знаят как да си  сложат макроса  в Ексела - давам насоки. Такъв макрос е много полезен и е хубаво да го има. Изпробвах го и работи. Първо се слага още едно меню, ако го нямате.
Скрит текст:
След това Visual Basic бутона копирате текста в този прозорец и накрая записвате.
Скрит текст:
 
Стартирането на макроса става пак от меню Developer-Macros и избирате името на макроса.
==============================

Последна редакция: ср, 05 фев 2020, 21:35 от Pepina_n3

# 473
  • Варна
  • Мнения: 3 308
Pepina_n3 Това е както каза Soul Free да режеш хляб с трион. Няма лошо, ако имаш свободно време, но аз лично предпочитам по-лесните решения. Те почти винаги се оказват и по-ефективни и надеждни.
И понеже не си убедена, че решението, което ти предлагаме е по-лесно и ефикасно, ето ти сравнение на двата варианта:
1. Време и сложност на създаването на решението:
   Макроси: Изисква много писане и тестване. Ти досега реши най-лесната задача - махането на празните редове. Като време сметни колко ти излиза и колко ще ти трябва да направиш автоматичното попълване. Няколко часа предполагам.
    Power Query: - Време за създаване на заявката - под 1 минута. Заявката се прави еднократно, а после само се рефрешва, не се изпълняват наново действията.
2. Изпълнение
   Макроси: Макросът се стартира с един клик, но трябва да е в активната книга или файлът с макроса да е отворен. Тоест или трябва да копираш извлечените данни във файла с макроса или да отвориш двата файла едновременно и да напишеш нов макрос във файла с извлечените данни, който да извиква макроса от другия файл. Сложно и изискващо време и се прави всеки път.
   Power Query: преди натискане на Refresh се изисква само файлът с извлечените данни да се копира в една и съща папка и под едно и също име всеки път. Предполагам, че файлът така или иначе винаги идва с едно и също име.  Ако се държи на макрос, аз написах кода (един ред), който може да се асоциира с бутон. И след това е наистина един клик, а не както при макросите - копиране от един в друг файл и тогава извикване на макроса.

Трябва да се преценява вложеното време и усилия и постигнатия резултат. Макросите са ОК, когато няма по-лесно и елегантно решение. Но ако искате да работите с VBA, няма лошо. Аз останах с впечатление, че се търси бързо и надеждно решение.

Последна редакция: ср, 05 фев 2020, 21:26 от Ясмина

# 474
  • Мнения: 10 878
Ясмина,
ще се отплати. Макросите могат да се запишат по такъв начин, че да не бъдат в конкретна кгига (book). Просто при стартиране на Ексела ви, ще се зареждат макросите, които посочите. Трябва да се запишат ето по този начин.
https://support.office.com/bg-bg/article/%D0%97%D0%B0%D0%BF%D0%B … a5f2-2fc7889ff74a
Тогава ще имате предимството да стартирате макроса, в който искате файл.
(в моя случай данните идват в програмно реализирани ексел файлове, те са с различни имена, с различен брой редове).
 Аз много харесвам твойто решение с този редактор, и много ви благодаря за споделянето, както и за тези решение с формулите, но мен това търсене по менютата ме затормозява  излишно. Представете си в края на работния ден да кликам като маймуна.  Ако беше за 2 -3 реда, щях да го правя на  ръка и никога няма да търся макрос, но тук става дума за пример от практиката, а не някаква ученическа задачка по ексел за размърдване на мозъка.
Даже, като виждам, че и в други фирми, и други хора,  имат подобен проблем, трябва да решим бързо и елегантно проблема с общи усилия.

# 475
  • Варна
  • Мнения: 3 308
Макросите могат да се запишат по такъв начин, че да не бъдат в конкретна кгига (book). Просто при стартиране на Ексела ви, ще се зареждат макросите, които посочите. Трябва да се запишат ето по този начин.
https://support.office.com/bg-bg/article/%D0%97%D0%B0%D0%BF%D0%B … a5f2-2fc7889ff74a
Тогава ще имате предимството да стартирате макроса, в който искате файл.
А как ще стартирате макроса от файла с данните, т.нар програмно реализирани excel файлове?



но мен това търсене по менютата ме затормозява  излишно. Представете си в края на работния ден да кликам като маймуна. 
Имам чуството, че говорим за различни неща. Къде в предложеното от мен решение има търсене по менюта и кликане на различни места, още повече "като маймуна" ? Може би аз не обяснявам добре.

Цитат
Даже, като виждам, че и в други фирми, и други хора,  имат подобен проблем, трябва да решим бързо и елегантно проблема с общи усилия.
Заради това участвам в дискусията, защото на някого може да е полезно. За мен безспорно по-добрия, лесен и бърз вариант е Power Query + Refresh. За вас явно са макросите, макар и да не мога да разбера защо. Проблемите с пречистването и трансформирането на данни от различни източници са доста често срещани, което и наложи вграждането и усъвършенстването на Power Query. Microsoft вече е дал елегантно и бързо решение.

# 476
  • Мнения: 10 878
Ето това е моето решение на проблема  с макрос:
След  като се изтрият празните редове, се маркират всички празни клетки и се запълват със стойността от горния ред! Даже няма значение в коя колона имате празни.
===============================
Sub DeleteAllEmptyRows_аndFillDown()
    Dim LastRowIndex As Integer
    Dim RowIndex As Integer
    Dim UsedRng As Range
 
    Set UsedRng = ActiveSheet.UsedRange
    LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count
    Application.ScreenUpdating = False
 
    For RowIndex = LastRowIndex To 1 Step -1
        If Application.CountA(Rows(RowIndex)) = 0 Then
            Rows(RowIndex).Delete
        End If
    Next RowIndex
 
    Application.ScreenUpdating = True

    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.FormulaR1C1 = "=R[-1]C"
End Sub
================
и се получава това:

# 477
  • Мнения: 10 878
Здравейте,
по този пример.
Начални данни:
Скрит текст:
Крайна цел:
Скрит текст:

Вече намерих начин да си сложа така макроса, че да ми се отваря във всяка ексел book. И започнах да си го ползвам. Много облекчаващо. За секунда го натискам.
В Ексел има т.нар. Personal Macro Workbook - това е място, където може да се запишат макроси, които да се виждат във всеки отворен ексел-файл на вашия компютър.
1.В началото трябва да имате меню Developer. Слага се от File-Options-Customize Ribon,   Choose command from - "Main tabs", "Developer", Add-OK.
2.Сигурно нямате още макроси и затова първо трябва да се създаде това място Personal Macro Workbook.
Натискате бутона Developer-Record Macro, давате името на макроса (например Изтриване редове и запълване). След това в Store Macro избирате  "Personal Macro Workbook" и просто записвате файла, без още макросът да има някакъв код (команди). Той е записан, но нищо не върши. Но по този начин създавате вашия "Personal Macro Workbook" или PERSONAL.XLSB. Записвате - Yes-OK. Затваряте Ексел.
3.Отваряте го пак.
в меню Developer-Visual Basic-ще забележите, че се е появило PERSONAL.XLSB. Кликнете го, и после два пъти кликнете  Мodul1-отваря се прозорецът на кода, и копирате кода между Sub  и  End Sub.
Това е кодът от нашия пример за изтриване на празни редове и попълване надолу, може да сте му дали име и Macro1. След Sub автоматично стои името, което вие сте дали.
 
Sub DeleteAllEmptyRows_аndFillDown()

    Dim LastRowIndex As Integer

    Dim RowIndex As Integer

    Dim UsedRng As Range

    Set UsedRng = ActiveSheet.UsedRange

    LastRowIndex = UsedRng.Row - 1 + UsedRng.Rows.Count

    Application.ScreenUpdating = False

    For RowIndex = LastRowIndex To 1 Step -1

        If Application.CountA(Rows(RowIndex)) = 0 Then

            Rows(RowIndex).Delete

        End If

    Next RowIndex

    Application.ScreenUpdating = True

     Selection.SpecialCells(xlCellTypeBlanks).Select

    Selection.FormulaR1C1 = "=R[-1]C"
End Sub

Затваряте редактора с кода и записвате отворения ексел. Няма значение в кой файл сте, всъщност се записва макроса във вашето пространство Personal Macro Workbook.

4.И накрая, макросът може да заработи. Отваряте някакъв файл, където да го приложите, от меню Developer- Macro- вече се показва вашия първи макрос, избирате го по името и RUN.  Забравете за трудностите до тук, за в бъдеще само ще се пуска(точка 4), което трае секунда и не се мисли.

И накрая да цитирам източника, тук има и картинки, не е трудно:
https://trumpexcel.com/personal-macro-workbook/

# 478
  • Мнения: 35 920
Здравейте, имам следния тъп въпрос/проблем.
На друг РС имам Ексел, при работата с който, като копирам и пействам формула, та се копира само на видимите редове по подразбиране, т.е. имам скрити редове, върху които не се копира. Не е еднократно копиране, което може да стане с Find - Go to special - visible only, а принципно си копира само на видимите. Знам, че е някъде от настройките на програмата, но не мога да се сетя къде точно....моля за съдействие, ако някой се сеща.

# 479
  • IC 1101,Abell 2029
  • Мнения: 1 278
Здравейте!Опитвам се да поставя копирано съдържание в документ на Excel,но не се получава.От страницата по долу се виждат резултати от АПЛ.Да вземем например 28 кръг.Има пет колони:Дата и час на срещата;Отбор домакин;Краен резултат;Отбор гост ;Резултат от първото полувреме.Маркирам всичко/може само без "Кръг 28/и копирам.Когато го поставя обаче в Excel ми излизат съобщения,които указват какво да се прави,но не разбирам как да стане.Искам така както се вижда в страницата,да го виждам и в Excel,т.е. 5-те колони от копираното в пет една до друга колони в лист на програмата.Дано някой от разбиращите тук да знаят как.Благодаря предварително!
https://www.scoreboard.com/bg/soccer/england/premier-league/results/

Общи условия

Активация на акаунт