Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458

Заполнить брешь

20.02.2018, 13:44. Показов 2121. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно решить задачу:

есть мини таблички на листе (диапазоны значений с разрывами в несколько строк ( разное количество строк))

некоторые данные этих таблиц пустые, нужно заполнить пустые ячейки значениями снизу которые имеются и вверх
Миниатюры
Заполнить брешь  
Вложения
Тип файла: xlsx Brech.xlsx (9.2 Кб, 5 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2018, 13:44
Ответы с готовыми решениями:

Брешь в безопасности 1С
Ссылка на статью с сервером 1С, не прокатывает, а так получается

Брешь windows 8
Как снять брешь windows 8 за наблюдением за системой через сеть или сетевого провайдера?

Создать массив, заполнить случайными числами четные элементы массива, а нечетные заполнить квадратом их индекса
На паре задали сделать работу,но ничего не объяснили,а я до этого с массивами не работал,если кому то не сложно помогите,буду благодарен. ...

36
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
20.02.2018, 22:02
Студворк — интернет-сервис помощи студентам
А если так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit
 
Sub AeroButtonStart()
    On Error Resume Next
    ActiveSheet.Shapes(Application.Caller).Visible = 1
    Run ActiveSheet.Shapes(Application.Caller).Name
End Sub
 
 
Sub AeroButton1()
    Dim r As Range, i&, j&, jj&, b&, s$
    Call AeroButton2 'Делаем как было
    Set r = [g1]
    Set r = Cells.Find(What:="загаловок1", After:=r, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
    Do
        If r.Column = 7 Then
            j = r.Row + 1: i = r.Column: b = 0
            For jj = j To j + &H7FFF 'Большое число :)
 
                If IsEmpty(Cells(jj, i).Value) And b = 0 Then 'Вычисляем сколько в таблице строк
                    b = 1 'Первое пустое значение
                ElseIf Not IsEmpty(Cells(jj, i).Value) And b = 1 Then
                    b = 2 'Первое не пустое значение
                ElseIf IsEmpty(Cells(jj, i).Value) And b = 2 Then
                    Exit For 'Выход если в столбце опять найденно пустое
                End If
                
            Next
            
            For i = r.Column To r.Column + 2
                Set r = Range(Cells(j, i), Cells(jj - 1, i))
                r.FillUp '-------------------------------------------Заполнить вверх
            Next
            Set r = Cells(j, i)
        End If
        
        Set r = Cells.FindNext(After:=r)
         If InStr(s, r.Address) = 0 Then s = s & "," & r.Address Else Exit Do 'Выход из цикла если результат поиска повторился
    Loop
    
End Sub
 
Sub AeroButton2()
    '
    'Копируем исходную таблицу
    '
    Range("A2:D22").Copy
    Range("G2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub
Миниатюры
Заполнить брешь  
Вложения
Тип файла: xls Бреж.xls (55.5 Кб, 0 просмотров)
1
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
20.02.2018, 23:39
код работает отлично, но
обрабатывает все имеющиеся столбцы (видимо как я понимаю использует usedrange)... (начиная с 4 столбца некоторые данные с пустыми строками затираются - этого не нужно )
ну я сделал копирование всех столбцов кроме последнего.. если вам нужно только первые 3, можно в цикле ограничить до 3:
здесь вместо rng.Columns.Count - 1 нужно поставить цифру 3, тогда будут только 3 первые столбца таблицы рассматриваться
Visual Basic
1
2
3
4
5
6
For i = 1 To rng.Columns.Count - 1
        tmp = GetValue(Range(rng.Cells(2, i), rng.Cells(rng.Rows.Count, i)))
        For j = 2 To rng.Rows.Count
            rng.Cells(j, i) = tmp
        Next j
    Next i
1
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 17:55  [ТС]
hamin

Спасибо , работает)

Что еще нужно изменить , чтобы код обрабатывал не только активный лист, а все листы кроме указанных?

Добавлено через 29 минут
понял , функция работает если лист активирован, то есть надо запустить цикл по всем листам, кроме указанных, чтобы на каждом шаге выбирался этот лист!


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub Test()
 
For Each ws In ThisWorkbook.Worksheets
 
  If ws.Name <> "Лист 1" And ws.Name <> "Лист 2" 
 
ws.Select
 
    Dim rng As Range
    Dim startCell As Range
    Dim endCell As Range
    Dim table As Range
    Dim offx As Integer
   
    
    Set rng = GetUsedRange(1)
        
    
    For i = 1 To rng.Rows.Count
        If rng.Cells(i, 1) = header Then
            offx = rng.Cells(i, 1).End(xlToRight).Column - rng.Cells(i, 1).Column
            Set startCell = rng.Cells(i, 1)
            Set endCell = GetLastRowCell(Range(rng.Cells(i, 1).Offset(1, 0), rng.Cells(rng.Rows.Count, 1)))
    
            startCell.Select
            endCell.Offset(0, offx).Select
            
           SetValues Range(startCell, endCell.Offset(0, offx))
        End If
    Next i
    
  End If
  Next  
    
End Sub









Добавлено через 12 часов 56 минут


Подскажите кто знает,
хотелось бы просто понять для себя..


что означает (для чего нужно ) в коде ответа #17 это выражение :

Visual Basic
1
2
3
 If ws Is Nothing Then
        Set ws = ActiveSheet
    End If
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 18:08
У тебя в браузере переводчик есть ?

Visual Basic
1
2
3
Если ws ничего не значит
        Установить ws = АктивныйЛист
    Конец
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 18:34  [ТС]
Спасибо

я не про перевод а про смысл

Добавлено через 2 минуты
а переводить я пробовал , но вот это

'Ermittle das Arbeitsblatt

Добавлено через 26 секунд
переводчик понял что это немецкий, но не переводит
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 18:42
ws это переменная
которую предпологается использовать как ссылку на открытый лист
тосюда и условие ... если она пустая то...
в аргументах функции , Optional ws As Worksheet по умолчанию может быть пустой
и имеет только конструкцию листа, а не сам лист

Добавлено через 3 минуты
Цитата Сообщение от rar Посмотреть сообщение
Ermittle das Arbeitsblatt
кривой гугл перевод: Определите рабочий лист
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
21.02.2018, 18:47
rar,

Ermittle das Arbeitsblatt
это значит "определяю рабочий лист")

работаю в германии, поэтому и комментарии немецкие))

а смысл этого выражения в том, что если ты не передаешь в функцию ссылку на нужный лист, то программа работает с текущим листом
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 18:56  [ТС]
hamin

вау, ничего себе

Добавлено через 25 секунд
прям перевод с самой Германии

Добавлено через 1 минуту
fever brain пожалуй буду перечитывать с десяток раз, пока не пойму...

Добавлено через 50 секунд
hamin слушайте, а как будет на немецком "чайник" ?
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 19:01
Странно что в гугле нет перевода может тебя гугл не любит
вообщето на немецком говорят примерно в 9 странах европы
не говор о нац меньшинствах это еще около сотни

Добавлено через 55 секунд
Цитата Сообщение от rar Посмотреть сообщение
"чайник" ?
наверное Wasserkocher
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 19:03  [ТС]
fever brain ну что вы , у меня тут предоставился эксклюзивный шанс получить перевод аж с самой Германии, как этим не воспользоваться?
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 19:09
Ну на немецком это будет переводиться как *нагреватель воды*
у них там нет того смысла, какой мы в россии тут этому придаем и скорее всего более понятнее им там будет LUSER (лузер)
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 19:12  [ТС]
Ехх , не долго счастье длилось , связь с Германией прервалась (

что ж fever brain придется мне ваш гугловский перевод принимать на веру. Крут вот и новый ник для меня обрисовывается - Wasserkocher. только надо для ясности добавить префикс "vba" , итого будет "vba - Wasserkocher "


ладно , если серьезно, то

Visual Basic
1
2
3
If ws Is Nothing Then
        Set ws = ActiveSheet
    End If
тут может быть какой то лист на входе , а може т не быть Is Nothing ... ?

Добавлено через 1 минуту
а вот за ник vba-LUSER подписываться не буду , обидно как то звучит....
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 19:16
Цитата Сообщение от rar Посмотреть сообщение
"vba - Wasserkocher "
Смотри не опоздай а то твой крутой ник ктонибудь перехватит

Цитата Сообщение от rar Посмотреть сообщение
тут может быть какой то лист на входе , а може т не быть Is Nothing ... ?
да на входе во в функцию я ж писал уже
Function GetUsedRange(SpalteNr As Integer, Optional ws As Worksheet) As Range

аргумент (по умолчанию или необязательный)
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 19:20  [ТС]
верно ли - это можно прочитать как: если мы сами не задаем заранее значение ws (напрмер ws =Sheets("Лист1")) , то берется активный лист на момент выполнения функции?
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
21.02.2018, 19:25
верно ли - это можно прочитать как: если мы сами не задаем заранее значение ws (напрмер ws =Sheets("Лист1")) , то берется активный лист на момент выполнения функции?
именно

Не по теме:


wasserkocher действительно чайник)

2
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
21.02.2018, 19:27  [ТС]
Все спасибо! Хоть какое то понимание появилось...
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
21.02.2018, 19:29
Цитата Сообщение от rar Посмотреть сообщение
если мы сами не задаем заранее значение ws
Если не задаем то он будет пустой

вызов функции = GetUsedRange(1 [,здесь ничего не поставил]
это значит что условие выполниться и присвоится открытый (активный) лист

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от hamin Посмотреть сообщение
wasserkocher действительно чайник)
Ну вот заберай скорее

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2018, 19:29

Создать массив, заполнить его, затем создать новый массив, заполнить его числами наоборот
То есть например массив {10, 25, 38, 49} А новый массив {94, 83, 52, 10} Подскажите хотя бы верный алгоритм.

Заполнить массив b1, b2, …, bn,
Дан одномерный массив целых чисел a1, a2, …, an. Заполнить массив b1, b2, …, bn, i-тый элемент которого равен среднему арифметическому...

Заполнить массив
Всем доброго времени суток, имеется следующая проблема: Имеется курсор, который строится на основе запроса:SELECT DISTINCT...

Заполнить массив
Как это сделать ? Натуральное число N (1&lt;=N&lt;=100) вводится с клавиатуры. Целочисленный линейный массив a0, a1, …, aN-1 заполняется...

Заполнить матрицу
Заполнить массив А следующим образом: 1 2 3 .... 10 0 1 2 .... 9 0 0 1 .... 8 ............


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru