Код, който обхожда всички колони и връща резултат на база на съдържанието на клетките?

4 одобрения 0 неодобрения
попитан 2018 февруари 9 в VBA от Kalin начинаещ (20 точки)
редактиран 2018 февруари 9 от Kalin

Здравейте, имам таблица с 20 колони, в тях има или 0 или описание по 1 клетка на ред. Направил съм си първата колона да ми връща описанието което присъства в реда със 20 IF -а :)) Има ли по опростена формула да прави това защото скоро ще са ми налични може би 60 колони... и със 60 If-а малко дълго ще я правя и да не се счупи нещо. Засега посочената ми формула работи идеално... но ако стане по дълга незнам :)

http://prikachi.com/images/219/9262219l.jpg

 

4 коментари

коментиран 2018 февруари 9 от Kalin начинаещ (20 точки)
http://prikachi.com/images/219/9262219l.jpg
Слагам и линк на снимката от примерната таблица че не се вижда добре във въпроса
коментиран 2018 февруари 9 от Badan експерт (253 точки)
Здравей,
За какво са ти всички тези if-ове? Обясни по-детайлно какво се опитваш да направиш. Какво описание трябва да изкараш и от коя колона? В линка не се вижда нищо.
коментиран 2018 февруари 9 от Kalin начинаещ (20 точки)
редактиран 2018 февруари 9 от Kalin
прилагам нова снимка малко по ясна, първата е да очертае общата картина.
http://prikachi.com/images/253/9262253P.jpg
Това е част от една много по сложна таблица където си правя разни справки. Всеки ред непрекъснато се обновява от колона D   нататък, резултата в реда е или 0 във всяка клетка или описание в една от клетките в реда. За да не се лутам визуално по всички колони за да открия кое описание фигурира в реда съм си направил формулата с IF - ове.
Въпроса ми е има ли по работещ вариант, тъй като очаквам необходимите ми колони да се утроят.
ето ми и работещата в момента формула:
=IF([@Column1]<>0;[@Column1];IF([@Column2]<>0;[@Column2];IF([@Column3]<>0;[@Column3];IF([@Column4]<>0;[@Column4];IF([@Column5]<>0;[@Column5];IF([@Column6]<>0;[@Column6];IF([@Column7]<>0;[@Column7];IF([@Column8]<>0;[@Column8];IF([@Column9]<>0;[@Column9];IF([@Column10]<>0;[@Column10];IF([@Column11]<>0;[@Column11];IF([@Column12]<>0;[@Column12];IF([@Column13]<>0;[@Column13];IF([@Column14]<>0;[@Column14];IF([@Column15]<>0;[@Column15];IF([@Column16]<>0;[@Column16];IF([@Column17]<>0;[@Column17];IF([@Column18]<>0;[@Column18];IF([@Column19]<>0;[@Column19];IF([@Column20]<>0;[@Column20];""))))))))))))))))))))
коментиран 2018 февруари 9 от Badan експерт (253 точки)
Ако разбирам правилно, на всеки ред имаш клетки със стойност "0" и само една клетка с някакъв текст, така ли? Ще ти върши ли работа код, който да премахва клетките със стойност 0 и оставя само описанията? Другия вариант за който се сещам е код, който подрежда описанията в колона А.
По късно тази вечер ще ти дам примерно решение.

1 отговор

1 одобрение 0 неодобрения
отговорени 2018 февруари 9 от Badan експерт (253 точки)
избран 2018 февруари 12 от Kalin
 
Най-добър отговор

Този код копира всички клетки, чието съдържание е различно от 0 или празно и ги пейства едно под друго в колона А, от клетка А1 надолу. Не е най-оптималният вариант, но би трябвало да ти свърши работа:

Sub CopyDescriptionsInColumnA()

   Dim c As Range
   counter = 0

   For Each c In Range("B1:Z50")
      c.Select
      If c.Value <> "0" And c.Value <> "" Then
        counter = counter + 1
        Cells(counter, 1).Value = c.Value
      End If
   Next

End Sub

Промени си рейнджа според размера на таблицата, която проверяваш. Ето референция как да подкараш макрото в ексел.

1 коментар

коментиран 2018 февруари 12 от Kalin начинаещ (20 точки)
благодаря за съдействието
Добре дошли в българския форум за Ексел и Майкрософт офис! Тук можете да питате хора със знания и опит, както и да споделите знанията и опита си с другите.
...