|
Тема
|
търсене на нулеви и отрицателни стойности
|
|
Автор |
metamorphosis (новак) |
Публикувано | 20.01.16 21:16 |
|
Здравейте!
В sheets1 в колона "А" (от "А1" до "А10") имам списък с имена на хора, а в колона "B"(от "B1" до "B10") срещу всяко име има стойност - нулева или отрицателна или положителна. Въпросът ми е как в sheet2 в колона "А1" до " А10" да отпечатам само имената на хората срешу които стойността е отрицателна или нулева?
Благодаря!
| |
|
Какво означава "да отпечатам"? Да излезе на принтера или да се пренесат само определени клетки от единия на другия лист?
1.Ако трябва да се пренесат само клетките, то как да отидат на лист2 - да има ли празно място между редовете (там където не отговаря условието?
например:
в ЛИСТ1
-2 ИВАН
1 ДРАГАН
3 ПЕТЪР
-1 АСЕН
във втория ист какво трябва да има?
ИВАН
АСЕН
(без празни редове между тях)
или
ИВАН
АСЕН
(с 2 празни редамежду тях)?
2.В кой момент трябва да отидат имената на лист2?
-при всяка промяна на клетка от лист1?
-при натискане на опредделен бутон нейде
-при отваряне на файла?
-при активиране на лист2?
-.....
3.В лист1 възможно ли е да има празен ред между списъка? Може ли например да има информация само на ред 1 и ред 7?
| |
|
Здравейте!
Идеята е следната в лист 2 да се прехвърлят имената само на тези, на които стойността е по-големи от нула
Пример:
1. Иван 5
2. Георги 0
3. Димитър 4
Ето кода който написах...
Private Sub Worksheet_Activate()
For k = 22 To 57
For i = 18 To 57
If (Sheets("Лист1").Cells(k, 38).Value > 0) Then
Sheets("Лист2").Cells(i, 2) = Sheets("Лист1").Cells(k, 2)
End If
k = k + 1
Next i, k
End Sub
Но проблема е, че прехвърля имената в лист2 на позицията, на която са в лист 1 а, аз бих искал да ги пренася един под друг(да не остават празни редове между имената). Пример:
1. Иван 5
2. Георги 0
3. Димитър 4
-На първия ред ще прехвърли Иван;
-на втория ред ще пропусне, тъй като стойността на Георги е нула
-на третия ред ще прехвърли Димитър.
И така ще се получат празни редове.
Благоддаря!
<P ID="edit"><FONT class="small"><EM>Редактирано от metamorphosis на 21.01.16 19:12.</EM></FONT></P><P ID="edit"><FONT class="small"><EM>Редактирано от metamorphosis на 21.01.16 19:35.</EM></FONT></P>Редактирано от metamorphosis на 21.01.16 19:36.
| |
|
Не мога да разбера защо двата цикъла са ти от 22 до 57 и от 18 до 57, след като данните ти са в колоните от A1:B10 и B1:B10.
Разясни само това. Другата идея вече ми се изясни.
та ако данните са на колона 1 и 2 - в първите 10 реда, мога да предложа код:
Private Sub Worksheet_Activate()
Dim I As Integer, K As Integer, List1 As String
List1 = "Sheet1" 'ime na purvi list
For I = 1 To 10 'iztriva stari danni ako ima
Rows(1).Delete
Next I
K = 0
For I = 1 To 10
If Sheets(List1).Cells(I, 2).Value > 0 Then
K = K + 1
Cells(K, 1) = Sheets(List1).Cells(I, 1).Value
Cells(K, 2) = Sheets(List1).Cells(I, 2).Value
End If
Next I
End Sub
| |
|
Единият цикъл 22 - 57 е за sheet1 , където от 22 ред до 57 ред е списъкът с имената, а цикълът от 18 - 57 е за sheet2, където от 18 ред до 57 ще прехвърлям имената, които отговарят на условието.
Затруднението ми се изразява в това, че не мога все още да го измисля, като как да прехвърлям имената едно под друго.
Редактирано от metamorphosis на 21.01.16 22:09.
| |
|
Private Sub Worksheet_Activate()
Dim I As Integer, K As Integer, List1 As String
List1 = "Sheet1" 'ime na purvi list. promeni go kakto e pri tebe
For I = 18 To 57 'iztriva stari danni ako ima v list2
cells(i,1).value=""
cells(i,2).value=""
Next I
K = 17
For I = 22 To 57 'obhod na list1
If Sheets(List1).Cells(I, 2).Value > 0 Then
K = K + 1 'poreden red v list 2
Cells(K, 1) = Sheets(List1).Cells(I, 1).Value
Cells(K, 2) = Sheets(List1).Cells(I, 2).Value
End If
Next I
End Sub
Тази процедура е във втория лист и се изпълнява, когато се активира листа.
При мене върши работа. С офис пакет 2003 съм го тествал.
В първия лист имаш 57-18=39 реда макс.
А на втория си предвидил място 57-22=35 реда.
Трябва да предвидиш вариант ако всички от лист1 се прехвърлят в лист2. Да не вземе нещо да се сгъбяса с другите кутийки надолу , ако са запълнени с нещо друго.
А ако предклавиатурното устройство вземе, че въведе нещо на 58 ред? И други проверчици...Ти си знаеш заданието все пак....Редактирано от BatiGogo на 21.01.16 22:36.
| |
|
Много ти благодаря! Получи се страхотно!
| |
|
|
|
|