Друзья, прошу помощи. Имеется небольшое приложение (не сочтите за труд скачать, пожалуйста, Здесь, или Здесь). Выкладываю в обменники, т.к. файл содержит массивы чисел и весил 292 Кб. Без самих баз не смогу спросить, что требуется... показать полученный результат.
Суть приложения такова. Пользователь из списка на листе "Вывод результата" выбирает один из массивов (F0-F5) или все сразу, нажимает на кнопку. Приложение спрашивает, какое значение искать. Пользователь должен ввести дробное число из интервала 1-2 (для листов F0-F4) включительно, 1-3 (для всех листов и листа F5). На самом деле какое бы количество знаков не ввёл пользователь, число будет округляться до 2-х знаков после запятой. Дальше приложение начинает искать это число.
Здесь, наверное, надо немного пояснений по коду. 1. На каждом из листов массивы сидят в одном и том же диапазоне:
Код
Range(Cells(3, 2), Cells(103, 102))
2. Вторая строка и первый столбец содержат, как бы координаты в десятичной системе. 3. В результате работы кода я вывожу вот такие значения:
Например, Debug мне выписывает: На листе F4, ячейка 25: 24 c координатой 1,22 : 1,22
По моему разумению, он делает всё правильно... будем так считать...
Дк вот... мой вопрос: Очень нужно теперь аккуратненько вывести это на лист "Вывод результата" В коде заложена очистка при каждом исполнении строк с 5 по 11000 (удаляем их кодом:
Вот и получается, что нужно выводить начиная с пятой строки 5 столбов: 1) Наименование массива, где найдено число (F0-F5); 2) Номер строки с ячейкой с подходящим значением; 3) Номер столбца с ячейкой с подходящим значением; 4) Строчную координату, которая прописывается в первом столбце на каждом листе; 5) Столбовую координату, которая прописывается во второй столбце на каждом листе;
Вроде как ... нет проблем... какая беда... есть и переменная "kolvoznacheniy", которая наращивается по мере нахождения нужного значения. Бери, казалось бы, в качестве координаты её (переменную) и начинай выводить 5 столбцов. Но вот очень долгий процесс получается. А вот, например, если пользователь захочет вывести "1) по всем таблицам, то там этих значений очень много. Долго.... (Понятно, что по итогу написания программы, я отключу визуализацию.)
Помогите, пожалуйста, дописать код, чтобы всё это максимально быстро выводилось. Мне это очень нужно, т.к. это лишь часть кода.... а таких прогонов по массивам, я буду делать десятки.
Чисто теоретически. Забирайте в массив значения из диапазонов, например arr1 = Range("A1:A10").Value обрабатывайте массив кодом и выгружайте на лист конструкцией, типа Range("A1").Resize(...) = arr1 З.Ы. Вместо каких-то "приложений" покажите Ваш код. Хотя-бы
Согласие есть продукт при полном непротивлении сторон
Sub Perebor()
Dim MSGForInputBox As String 'переменная формирует текст для Application.InputBox
Dim vRetVal 'для получения выбранного значения с формы Application.InputBox и перевода в Znacheniye
Dim currentwsh As Object 'Храним текущий лист
Dim kolvoznacheniy As Integer
Dim Znacheniye As Double 'переменная отлавливает введённое пользователем значение (берёт с vRetVal)
Dim iFoundRng As Range 'переменная ищет ячейку с нужным значением
Dim StartPoint, EndPoint, StepPoint, PointPerebor As Integer
'запрос числа - Type:=1
'возвращает число. Не даст ввести текст, выдав сообщение об ошибке
Set currentwsh = ActiveWorkbook.ActiveSheet
If ((ActiveSheet.Cells(2, 1).Value = "F5") Or (ActiveSheet.Cells(2, 1).Value = "F4") Or (ActiveSheet.Cells(2, 1).Value = "F3") Or _
(ActiveSheet.Cells(2, 1).Value = "F2") Or (ActiveSheet.Cells(2, 1).Value = "F1") Or (ActiveSheet.Cells(2, 1).Value = "F0") Or _
(ActiveSheet.Cells(2, 1).Value = "ВСЕ")) Then
'обработаем базовое сообщение для Application.InputBox
MSGForInputBox = "Укажите число в диапазоне от 1 до 2"
If ((ActiveSheet.Cells(2, 1).Value = "F5") Or (ActiveSheet.Cells(2, 1).Value = "ВСЕ")) _
Then: MSGForInputBox = "Укажите число в диапазоне от 1 до 3"
AA: vRetVal = Application.InputBox(MSGForInputBox, "Запрос данных", "", Type:=1)
Znacheniye = vRetVal
'проведём дополнительную проверку корретности ввода значения
If (((Znacheniye < 1) Or (Znacheniye > 2)) And (ActiveSheet.Cells(2, 1).Value <> "F5")) Then: GoTo AA
If (((Znacheniye < 1) Or (Znacheniye > 3)) And (ActiveSheet.Cells(2, 1).Value = "F5")) Then: GoTo AA
'округлим корректно введённое значение до 2-х знаков после зяпятой
Znacheniye = Format(Znacheniye, "#,##0.00")
Znacheniye = Round(Znacheniye, 2)
Debug.Print ("Будет осуществлён поиск значения " & Znacheniye)
'Очистим после со хначения для вывода новых
Rows("5:11000").Select
Selection.Delete Shift:=xlUp
ActiveSheet.Cells(2, 1).Select
kolvoznacheniy = 0
'создаём перебор, где в зависимости от выбора перебираются либо все листы, либо какой-то конкретный
If ActiveSheet.Cells(2, 1).Value <> "ВСЕ" Then
StartPoint = CInt(Right(ActiveSheet.Cells(2, 1).Value, 1))
EndPoinr = CInt(Right(ActiveSheet.Cells(2, 1).Value, 1))
StepPoint = 1
Else
StartPoint = 0
EndPoinr = 5
StepPoint = 1
End If
'ищем конкретное значение на одном или всех листах
For PointPerebor = StartPoint To EndPoinr Step StepPoint
'активируем нужный лист
ActiveWorkbook.Sheets("F" & PointPerebor).Activate
With ActiveSheet.Range(Cells(3, 2), Cells(103, 102)) 'берём диапазон, в котором искать
Set iFoundRng = .Find(What:=Znacheniye, LookIn:=xlValues) 'задаём поиск
If Not iFoundRng Is Nothing Then
firstAddress = iFoundRng.Address 'указываем ячейку с началом поиска
Do
Debug.Print ("На листе " & "F" & PointPerebor & ", ячейка " & iFoundRng.Row & ": " & iFoundRng.Column & " c координатой " & _
ActiveSheet.Cells(iFoundRng.Row, 1).Value & " : " & ActiveSheet.Cells(2, iFoundRng.Column).Value)
kolvoznacheniy = kolvoznacheniy + 1
Set iFoundRng = .FindNext(iFoundRng)
Loop While Not iFoundRng Is Nothing And iFoundRng.Address <> firstAddress
Else
'Debug.Print "Не найдено."
End If
End With
Next PointPerebor
Debug.Print ("Всего найдено " & kolvoznacheniy & " значений")
'вернулись на исходную
currentwsh.Activate
ActiveSheet.Cells(2, 1).Select
Else
MsgBox ("Вы ничего не Выбрали - макрос остановлен")
Exit Sub
End If
End Sub
Для корректной работы поиска в данном примере кода требуется проделать некоторые действия: 1. Ввести константу в блоке объявления переменных (после вот этой строки
Код
Dim StartPoint, EndPoint, StepPoint, PointPerebor As Integer
) такой строкой:
Код
Const AmericanDecimalSeparator = "."
2. Обязательно осуществлять поиск по текстовому значению, используя предварительную обработку кода вот такой строкой:
Kirill Gureev, однозначно, откройте для себя мир МАССИВОВ (а далее словарей/коллекций). Все тормоза из-за перебора ячеек. На массивах раз в 50 будет быстрее
Согласие есть продукт при полном непротивлении сторон
Ну помогите, на примере, пожалуйста. Я пытался, но туплю.... При этом и разницы не понимаю массивов/словарей/ коллекций. Всё на английском.... разбирать сложно... Помогите, если не затруднит, пожалуйста вот на это примере.
Kirill Gureev написал: Без самих баз не смогу спросить, что требуется... показать полученный результат.
Kirill Gureev если вы не можете спросить - т.е. понять свою проблему и сделать под неё пример на несколько строк!!! = ЗНАЧИТ вы знать не знали и знать не хотели и нафиг не важно, что там не работает... правьте за вас всё!.. неужели вы до сих пор думаете, что это надо кому-либо кроме вас...
Цитата
Kirill Gureev написал: Ну помогите, на примере, пожалуйста..... При этом и разницы не понимаю массивов/словарей/ коллекций.
... если хотите продолжать в том же духе - автоматизировать свой проект макросами - ТО придётся разбираться!.. уже давно пора, много вопросов отпало бы... вы спрАшивайте по тому, что НЕ понимаете в этих массивах/словарях/коллекциях!... (прежде посмотрите примеры их использования через Поиск - может и вопросы отпадут) и ПОшагово добавляйте свои новые знания в свой проект... а не всех планетян добавляйте в список читателей всего вашего творения... ну, действительно, уже слов давно не хватает - вы не хотите разбираться со своими проблемами и всё время просите полные решения за вас по всему безумию, известному только вам - это в Раздел Работа!!!.. ИЛИ берите гайки и шурупы, свой Боинг конструируйте сами!.. путь осилит идущий... ответ в #2 и #4 - вы даже НЕ пробуете применить, а снова Ну-каете о помощи [хотя просите не помощь, а сделать всё за вас] о том, с чем ДО сих пор просто не хотите разобраться... Ну-кать не надо, берите и делайте - если не хотите понимать за столько!! времени весь vba, чтобы сделать самому - альтернативный раздел уже знаете... p.s. если бы это была первая ваша ветка - наверное, промолчала бы... но у вас каждый раз одна и та же проблема - вам ответы либо не подходят, либо вы даже не собираетесь их применять, а выпрашиваете готовое решение чужими руками снова... Рабочие Руки - дорогое удовольствие!.. особенно, когда они свои... оплатите временем, вложенным на понимание, - поймёте, в какую цену обойдуться вам ВАШИ руки
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Kirill Gureev, я согласен с JeyCi, Если Вы собираетесь и дальше заниматься автоматизацией своих задач, то на выпрашивании готовых решений далеко не уедете. Обложитесь учебниками, потратьте на САМОразвитие СВОЕ время. То, до чего додумался сам, остается на всю жизнь. Плюс щенячий восторг от новых знаний и САМОСТОЯТЕЛЬНО решенных задач. Тем более
Цитата
Kirill Gureev написал: Мне это очень нужно, т.к. это лишь часть кода.... а таких прогонов по массивам, я буду делать десятки
Собираетесь еще десятки раз обращаться за помощью? Со скуки я сделал Вам (Ваш) пример. Пришлось полностью переделать Ваш код.
Скрытый текст
Код
Sub Perebor()
Dim curSh As Worksheet
Dim arrSh()
Dim arrRez()
'установка начальных параметров
Set curSh = Worksheets("Вывод результата")
With curSh.Cells(2, 1)
If .Value = "F5" Or .Value = "ВСЕ" Then
n = 3
If .Value = "ВСЕ" Then
arrSh = Array("F0", "F1", "F2", "F3", "F4", "F5")
Else
arrSh = Array(.Text)
End If
Else
n = 2
arrSh = Array(.Text)
End If
End With
'обработка искомого значения
Do While Not (Znach >= 1 And Znach <= n)
Znach = Application.InputBox("Укажите число в диапазоне от 1 до " & n, "Запрос данных", Type:=1)
If Znach = False Then Exit Sub
Loop
Znach = Round(Znach, 2)
'очистка диапазона вставки
curSh.Range("A4:A11000").ClearContents
curSh.Range("A4") = Format(Znach, "#,##0.00")
'сам поиск (в массиве)
For I = LBound(arrSh) To UBound(arrSh)
With Worksheets(arrSh(I))
arrTemp = .Range(.Cells(3, 2), .Cells(103, 102)).Value
For Stroka = LBound(arrTemp, 1) To UBound(arrTemp, 1)
For Stolbec = LBound(arrTemp, 2) To UBound(arrTemp, 2)
If Znach = arrTemp(Stroka, Stolbec) Then
ReDim Preserve arrRez(K)
arrRez(K) = "Лист - """ & arrSh(I) & _
"""; ячейка - " & Stroka + 2 & ":" & Stolbec + 1 & _
"; координата - " & .Cells(Stroka + 2, 1) & ":" & .Cells(2, Stolbec + 1)
K = K + 1
End If
Next
Next
End With
Next
'вывод результатов
If K <> Empty Then
curSh.Range("A5").Resize(UBound(arrRez) + 1, 1) = Application.Transpose(arrRez)
MsgBox "Найдено " & UBound(arrRez) + 1 & " значений", vbInformation + vbOKOnly
Else
MsgBox "Значение " & Format(Znach, "#,##0.00") & " не найдено!", vbExclamation + vbOKOnly
End If
End Sub
Согласие есть продукт при полном непротивлении сторон
Sanja, спасибо Вам за Ваш пример. Суть такой выгрузки понятна, использование массивов тоже понятно. Если Вам интересно, то я немного поправил Ваш код...
Скрытый текст
Sub Perebor_3() Dim curSh As Worksheet Dim arrSh() Dim arrRez() Dim arrResult_F() As String 'Массив для хранения результатов (массив) Dim arrResult_Row() As Integer 'Массив для хранения результатов (номер строки) Dim arrResult_Column() As Integer 'Массив для хранения результатов (номер столбца) Dim arrResult_Row_k() As Single 'Массив для хранения результатов (координату строки) Dim arrResult_Column_k() As Single 'Массив для хранения результатов (координату столбца)
'установка начальных параметров a = Timer Application.ScreenUpdating = False Set curSh = ActiveWorkbook.ActiveSheet With curSh.Cells(2, 1) If .Value = "F5" Or .Value = "ВСЕ" Then n = 3 If .Value = "ВСЕ" Then arrSh = Array("F0", "F1", "F2", "F3", "F4", "F5") Else arrSh = Array(.Text) End If Else n = 2 arrSh = Array(.Text) End If End With 'обработка искомого значения Do While Not (Znach >= 1 And Znach <= n) Znach = Application.InputBox("Укажите число в диапазоне от 1 до " & n, "Запрос данных", Type:=1) If Znach = False Then Exit Sub Loop Znach = Round(Znach, 2) 'очистка диапазона вставки curSh.Rows("5:11000").Select Selection.Delete Shift:=xlUp 'curSh.Range("A4") = Format(Znach, "#,##0.00") 'сам поиск (в массиве) For i = LBound(arrSh) To UBound(arrSh) With Worksheets(arrSh(i)) arrTemp = .Range(.Cells(3, 2), .Cells(103, 102)).Value For Stroka = LBound(arrTemp, 1) To UBound(arrTemp, 1) For Stolbec = LBound(arrTemp, 2) To UBound(arrTemp, 2) If Znach = arrTemp(Stroka, Stolbec) Then ReDim Preserve arrRez(K) ReDim Preserve arrResult_F(K) 'Массив для хранения результатов (массив) ReDim Preserve arrResult_Row(K) 'Массив для хранения результатов (номер строки) ReDim Preserve arrResult_Column(K) 'Массив для хранения результатов (номер столбца) ReDim Preserve arrResult_Row_k(K) 'Массив для хранения результатов (координату строки) ReDim Preserve arrResult_Column_k(K) 'Массив для хранения результатов (координату столбца
K = K + 1 End If Next Next End With Next 'вывод результатов If K <> Empty Then 'curSh.Range(Cells(5, 1), Cells(5, 1)).Resize(UBound(arrRez) + 1, 1) = Application.Transpose(arrRez) curSh.Range(Cells(5, 1), Cells(5, 1)).Resize(UBound(arrResult_F) + 1, 1) = Application.Transpose(arrResult_F) curSh.Range(Cells(5, 2), Cells(5, 2)).Resize(UBound(arrResult_Row) + 1, 1) = Application.Transpose(arrResult_Row) curSh.Range(Cells(5, 3), Cells(5, 3)).Resize(UBound(arrResult_Column) + 1, 1) = Application.Transpose(arrResult_Column) curSh.Range(Cells(5, 4), Cells(5, 4)).Resize(UBound(arrResult_Row_k) + 1, 1) = Application.Transpose(arrResult_Row_k) curSh.Range(Cells(5, 5), Cells(5, 5)).Resize(UBound(arrResult_Column_k) + 1, 1) = Application.Transpose(arrResult_Column_k)
'MsgBox "Найдено " & UBound(arrRez) + 1 & " значений", vbInformation + vbOKOnly Else MsgBox "Значение " & Format(Znach, "#,##0.00") & " не найдено!", vbExclamation + vbOKOnly End If Debug.Print ("Всего найдено " & K & " значений") curSh.Activate ActiveSheet.Cells(2, 1).Select Application.ScreenUpdating = True MsgBox Timer - a End Sub
И сделал несколько примеров для других пользователей, кто столь же неопытен, как и я. Может Вам будет интересно посмотреть файл(файл грузится какое-то время, т.к. на этапе запуска прогружаются базы в массив) ВАШ вариант, там под номером 3.
Пример 4 интересен тем, что все массивы погружаются на этапе запуска файла и работа получается ещё быстрее.
У меня остался один вопрос по такой выгрузке, которую делали Вы. Вы сформировали цельную строчку и пустили её циклом строкой:
Посмотрел Ваш файл - для корректного хронометража таймер нужно запускать ПОСЛЕ ввода пользователем искомого значения. Поправьте Ваши варианты и сравните время. Ваш вариант4 у меня вообще не сработал - почему Вы упорно продолжаете делать кучу лишних телодвижений по проверке/корректировке/опять проверке/форматировании/проверке/.../ введенного пользователем значения? Чем мой вариант не устроил? - зачем вместо ОЧИСТКИ диапазона Вы удаляете строки? От этого время исполнения только увеличивается - ну и классика жанра SELECT И ACTIVATE - ЗАЧЕМ НУЖНЫ И НУЖНЫ ЛИ? Про многомерные массивы много чего есть в интенетах. Для Вашего примера можно так
Скрытый текст
Код
'сам поиск (в массиве)
For I = LBound(arrSh) To UBound(arrSh)
With Worksheets(arrSh(I))
arrTemp = .Range(.Cells(3, 2), .Cells(103, 102)).Value
For Stroka = LBound(arrTemp, 1) To UBound(arrTemp, 1)
For Stolbec = LBound(arrTemp, 2) To UBound(arrTemp, 2)
If Znach = arrTemp(Stroka, Stolbec) Then
ReDim Preserve arrRez(4, K)
arrRez(0, K) = arrSh(I)
arrRez(1, K) = Stroka + 2
arrRez(2, K) = Stolbec + 1
arrRez(3, K) = .Cells(Stroka + 2, 1)
arrRez(4, K) = .Cells(2, Stolbec + 1)
K = K + 1
End If
Next
Next
End With
Erase arrTemp
Next
'вывод результатов
If K <> Empty Then
curSh.Range("A5").Resize(UBound(arrRez, 2) + 1, 5) = Application.Transpose(arrRez)
MsgBox "Найдено " & UBound(arrRez, 2) + 1 & " значений", vbInformation + vbOKOnly
Else
MsgBox "Значение " & Format(Znach, "#,##0.00") & " не найдено!", vbExclamation + vbOKOnly
End If
Попробовал Ваш вариант. Ожидал прироста скорости, но его не произошло... (существенного, по крайней мере).
Цитата
Sanja написал: - для корректного хронометража таймер нужно запускать ПОСЛЕ
С этим полностью согласен, существенный комментарий, спасибо.
Цитата
Sanja написал: - почему Вы упорно продолжаете делать кучу лишних телодвижений по проверке/корректировке/опять проверке/форматировании/проверке/.../ введенного пользователем значения? Чем мой вариант не устроил?
Не обижайтесь, пожалуйста, я же учусь и делаю эксперимент. Эти куски кода скопированы с примеров, где поиск производился через Fimd. На самом деле эксперименты показали, что потерь времени существенных за счёт этого нет.
Цитата
Sanja написал: - зачем вместо ОЧИСТКИ диапазона Вы удаляете строки? От этого время исполнения только увеличивается
А вот здесь встречный вопрос... очистка предполагает удаление значений и всё. А вот если пользователь вывел данные, решил поработать с использованием какого-то форматирования, наставил границ, цветов и т.д., то поможет ли в этом случае очистка контента? НЕТ. Именно по этой причине я предпочитаю просто удалять строки. Может есть какой-то иной способ? Именно чтобы форматирование полностью также чистилось? (хотя вопрос не в эту ветку)
Цитата
Sanja написал: SELECT И ACTIVATE - ЗАЧЕМ НУЖНЫ И НУЖНЫ ЛИ?
Это я конечно немедленно прочитаю. Ну я использовал для того, чтобы удалять строки вместо очистки. У меня просто оказывался чистить (удалять) без активации листа. Ну и так... интуитивно... Но после Вашей ссылки, полагаю, буду делать это более разумно.
Цитата
Sanja написал: Про многомерные массивы много чего есть в интенетах. Для Вашего примера можно так
Существенного прироста скорости не дало, но спасибо за разъяснения.
Цитата
Sanja написал: Ваш вариант4 у меня вообще не сработал
Вообще оказалась интересная история. Когда пользователь залазит в Макрос и начинает что-то править, то после перехода к исполнению прогруженные на этапе открытия файла массивы теряются. Не знал. Полезная информация. В результате, пришлось сделать дополнительную проверку. Т.е. теперь, при запуске макроса, проводится проверка по первому значению, а если базы потерялись, то предлагается один раз их заново прогрузить. Выложил правленный файл
Цитата
Sanja написал: Про вставку через одну/две строки не понял
Попробую переформулировать.... Что мы с Вами фактически делаем... выделяем конкретную ячейку и изменяем размер выделения в зависимости от размера массива (если я правильно понял). А если у пользователя возникает необходимость вставить не в каждую строку от указанной (подряд), а через строчку, например. Ну т.е. я, допустим, захочу вывести значения не в строках 5, 6, 7, 8 и т.д., а в строках 5, 7, 9, 11 и т.д. Т.е. через одну строчку... или, например через 2, т.е. в 5, 8, 11, 14 и т.д.
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Kirill Gureev написал: ...очистка предполагает удаление значений и всё. А вот если пользователь....
Да я не против. Таких "если" может быть сколько угодно и каких угодно. В таком случае еще совет При непосредственной работе с ячейками листа (удаление/копирование/вставка/перемещение и проч) отключайте обновление экрана а в конце включайте
JeyCi, чуть опередила. У Вас наверняка не 386-й IBM PC/XT. Неужели Вы думаете что на матрицах 100х100, да на современном железе разница будет в секунды? Даже в миллисекунды? Увеличьте размер, хотя-бы до десятков тысяч...
Согласие есть продукт при полном непротивлении сторон
Sanja написал: Увеличьте размер, хотя-бы до десятков тысяч...
Уверен, что Вы правы. Просто пока в силу этапности решения задачи нет такой возможности. Вот позже, когда буду обрабатывать десятки и сотни, то конечно же попробую.
Kirill Gureev написал: Просто пока в силу этапности решения задачи
не обязательно для этой задачи... просто берите на заметку... чтобы не привыкать кодировать не совсем оптимально... рано или поздно вылезет боком (на других задачах, например, вылезет)... лучше сразу учиться правильно... и не терять времени Потом на поиски лУчших решений... успехов p.s. учитесь верить на слово ... рекомендаций вам от Sanja - это тоже касается
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi, Вот Вы меня всегда ругаете, что я, вроде как, не читаю документацию. Но вот простой пример. Запрашиваем в Яндексе "vba application", идём по первой ссылке. Начинаем читать, вроде как по теме... ну нет на той странице упоминания о "Transpose". И вот как мне, самоучке, узнать о существовании такой вещи, как не спросить у Вас профессионалов...
никогда... просто констатирую факты... как в программировании - работаем только с фактическим материалом... будут другие факты - будут другие выводы p.s. вы, видимо, не читаете слова, в которых я всегда желала вам успехов ... когда перестанете видеть лишь "чёрное" и во всех постах от всех планетян начнёте видеть Рекомендации (а не ругательства) и Применять их - поверьте, ваша жизнь изменится
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi написал: p.s. вы, видимо, не читаете слова, в которых я всегда желала вам успехов - когда перестанете видеть лишь "чёрное" и во всех постах от всех планетян начнёте видеть рекомендации и Применять их - поверьте, ваша жизнь изменится
Спасибо большое... а вот по факту... где новичку читать исчерпывающий материал? Может есть рекомендация (желательно на русском). Спасибо.
Поскольку боюсь, что вопрос потеряется, то дублирую в этом сообщении...
Цитата
Sanja написал: Про вставку через одну/две строки не понял
Попробую переформулировать.... Что мы с Вами фактически делаем... выделяем конкретную ячейку и изменяем размер выделения в зависимости от размера массива (если я правильно понял). А если у пользователя возникает необходимость вставить не в каждую строку от указанной (подряд), а через строчку, например. Ну т.е. я, допустим, захочу вывести значения не в строках 5, 6, 7, 8 и т.д., а в строках 5, 7, 9, 11 и т.д. Т.е. через одну строчку... или, например через 2, т.е. в 5, 8, 11, 14 и т.д.
Kirill Gureev написал: где новичку читать исчерпывающий материал?
чтивом кода не написать - надо Себе составлять тех.задание и искать Наилучший способ его реализации - который понравиться себе самому... к которому не подкопаться (НИ вам, НИ вашему компьютеру, НИ вашим дальнейшим планам, НИ желательно ещё спецам в области программирования - до последнего долгий путь), согласно своей логике... новыми нюансами и новым профессионализмом всё обрастёт со временем... любить изящность и стройность кодов... и создавать их такими для себя... помогать другим (когда интересные задачи встречаются)... вобщем делать только то, что нравится, и в этом стремиться к совершенству... - это самая мощная внутренняя мотивация, которая всегда приведёт к победе... просто Красивой победе - прежде всего над собой... и Автоматически - к результатам - нужным вам... а чтиво и др. - это лишь средства, но не цель... считаю, свои собственные поиски и живой диалог, когда надо что-то уточнить в своём понимании, - дадут больше пользы... поэтому Форум, Поисковик и свои попытки (иногда на чужих задачах, которые казались проще моих, но для отработки навыков работы с тем или иным элементом, инструментом, подходом) - мне этого было достаточно, когда начинала с нуля... и вам желаю того же p.s. только выводы всегда Должны быть кристально прозрачными, полными и истинными (из любых ваших экспериментов - для этого к экспериментам лучше подойти всеобъемлюще) - чтобы один раз поковырять - и пользы немерено на всю программистскую жизнь (и никаких иллюзий)... или в раздел Работа (иначе зачем тратить своё время, чтобы опять недопонять до конца) - лучше сразу отдать спецам ... сэкономите своё время Верный вывод (из любого своего шага) - и очередной шаг вперёд - планируемый Только вами.... вместо хаотичного или досконально построчного чтения ресурсов... ваш главный ресурс - Вы сами... Знать Чего хотите - и Реализовывать Это для себя... никто лучше вас этого не сделает (реализует ваши потребности для вас) в своё время!
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)