Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 След.
ПРОСМОТРX не проливается в двух направлениях
 
Цитата
написал:
А вас не смущает, что результат одинаков для всех трех премий?
О, я даже не обратил внимания. Спасибо
ПРОСМОТРX не проливается в двух направлениях
 
В продолжение темы.

Итак высылаю файл с тремя вариантами формулы:

Вариант 1 - Массив "растекается" вправо и я растягиваю формулу вниз: =ПРОСМОТРX($G4;$B$4:$B$14;$C$4:$E$14;;-1)
Вариант 2 - Массив "растекается" вниз и я растягиваю формулу вправо: =ПРОСМОТРX($G19:$G30;$B4:$B14;C4:C14;;-1)

А вот третий вариант решает проблему - массив "растекается" и вправо и вниз: =ПРОСМОТРX(G34:G45;B4:B14;C4:E14;;-1) + H46:J46
(добавляю прибавление диапазона с нулями к ПросмотруX)

Вопрос! Как эта формула отрабатывается:
- сначала высчитывает ПРОСМОТРX в диапазоне G34:G45 для H46, потом для I46 и потом для J46
или
- сначала высчитывает ПРОСМОТРX для G34 последовательно для H46, I46 и J46. Затем ПРОСМОТРX для G35 и снова последовательно для H46, I46 и J46 и т.д.

То есть, "растекается" вниз, а затем поколончато вправо или сначала вправо, а затем построчно вниз?
ПРОСМОТРX не проливается в двух направлениях
 
Всем спасибо!
Видимо действительно еще не предусмотрели такой функционал, хоть было бы логично. Даже потому, что стоит добавить сомножитель (делитель), например, =ПРОСМОТРX(B6:B19;C5:P5;C4:P4)/C4:P4  (я приложил файл с примером - добавил лист 2) и все начинает растягиваться и вниз и вбок. Я понимаю, что для "вбок" здесь отрабатывает именно /C4:P4 вне функции, но ожидал, что и внутри функции должно быть так же.
ув. БМВ, это называется "наша песня хороша, начинай сначала..." Раньше ВПР меняли на ИНДЕКС и ПОИСКПОЗ, теперь ПРОСМОТРX менять придется :)
ПРОСМОТРX не проливается в двух направлениях
 
Добрый день!
эта формула растекается вправо на три ячейки: =ПРОСМОТРX(J11;B$6:B$30;C$6:E$30), после чего ее нужно растягивать вниз. Решил попробовать добавить диапазон в критерии, чтобы получить растекание и вниз (и не растягивать).

Пишу: =ПРОСМОТРX(J11:J21;B6:B30;C6:E30). Формула растекается вниз по первой колонке, но перестает растекаться вправо.

Что я не так делаю?

PS. Файл прилагаю, там другие адреса ячеек (поскольку выдирал фрагмент из оригинального файла), но суть та же
Вертикальное и горизонтальное отражение
 
Ув. gling, спасибо. Ваш вариант работает вообще без торможения, но это все же диапазон, а не вся строка или столбец... Но возможно, что так тоже получится, буду думать в этом направлении. Еще раз спасибо!
Вертикальное и горизонтальное отражение
 
Ув. БМВ, спасибо. Вставил DoEvents - притормаживает, но в целом все идет значительно быстрее.
Вертикальное и горизонтальное отражение
 
Спасибо за ответы!

Вот собственно сам файл. В нем два первых макроса.

Ув. asesja, в этом случае мне прийдется каждый раз корректировать макрос.

У меня есть картинка, сделанная разноцветными ячейками. Мне нужно ее, например:

1 перевернуть;
2 сделать серой
3 а ячейки, изначально раскрашенные в разные цвета, отделить друг от друга границами.

Со второй и третьей задачей справляется третий макрос. А вот первая (точнее ее реализация) - вызывает торможение.
Изменено: vadi61 - 17.02.2025 22:44:49
Вертикальное и горизонтальное отражение
 
Ув. БМВ, спасибо за ответ.

К сожалению тормозит так же, но только из-за ScreenUpdating = False не отображает процесс. Проверил на двух компьютерах с разными офисами (2013 и 2019)
Вертикальное и горизонтальное отражение
 
Добрый день!
У меня есть рисунки сделанные с помощью закрашенных ячеек. Иногда мне нужно какой-нибудь рисунок изобразить либо слева-направо или вверх "ногами". Я написал два коротюсеньких макроса, которые работают:
Код
Sub HorizontalSpiegeln()
For i = 1 To 20
    With Worksheets("buch 1")
        .Columns(i).Select
        Selection.Copy
        .Cells(1, 45 - i).Select
        .Paste
    End With
Next i
End Sub

Sub VertikalSpiegeln()
For i = 1 To 20
    With Worksheets("buch 1")
        .Rows(i).Select
        Selection.Copy
        .Cells(45 - i, 1).Select
        .Paste
    End With
Next i
End Sub
НО, после быстрого прохождения первых 6 - 7 строк или 6 - 7 столбцов Excel начинает сильно тормозить.

Что у меня в макросе не так?
Почему не срабатывает ScreenUpdating = False
 
Попробую завтра...
Почему не срабатывает ScreenUpdating = False
 
Hugo, спасибо за ответ и за то, что потратили на меня время. У меня на Office 2013 мелькает курсор. Не сильно, очень кратковременно, но мелькает. Во всяком случае я это вижу. Попробую завтра на другом Excel.
Почему не срабатывает ScreenUpdating = False
 
Hugo, спасибо, что откликнулись. Ничего у меня ниже по коду нет ...

Вот файл.
Почему не срабатывает ScreenUpdating = False
 
Добрый день!
у меня есть есть несколько диапазонов из 4-х ячеек, в которые по клику ставятся крестики. В каждом диапазоне может быть только один крестик. Поэтому я сначала очищаю диапазон, а потом в нужную ячейку вношу крестик. Все работает, мелькает (как я понимаю при очищении ячеек)

Как это можно исправить? Или причина в чем-то другом?

Вот макрос:
Код
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim i As Integer
        Dim r As Integer
       
        If Target.Cells.Count > 1 Then Exit Sub
            ActiveSheet.Unprotect Password:=""

            If Not Intersect(Target, Range("C11:F11", "C12:F12")) Is Nothing Then
                r = Target.Row

                If Target = vbNullString Then
                    i = 0
                Else
                    i = 1
                End If

                Application.ScreenUpdating = False
                
                For Each Z In Range(Cells(r, 3), Cells(r, 6))
                    Z.Value = vbNullString
                Next
                
                Application.ScreenUpdating = True

                Target.Font.Name = "Wingdings 2"
                If i = 0 Then
                    Target = "Ð"
                Else
                    Target = vbNullString
                End If
            End If

             ActiveSheet.Protect Password:=""
Как разорвать связь Word-файла с таблицей Excel, создавшей этот файл
 
ув. andypetr, Спасибо, помогло!
Как разорвать связь Word-файла с таблицей Excel, создавшей этот файл
 
Добрый день!

Создаю Word-документ макросом из Excel-файла. Мне надо просто проверить правописание, после чего закрыть Word-файл без сохранения.

Файл создается. Но, после того, как я с ним поработал и хочу закрыть он сначала выдает запрос на сохранение, а когда я говорю "не сохранять" он пишет, что файл используется другим приложением или пользователем и в скобках пишет путь к Normal.dotm. Можно ли сделать так, чтобы этот созданный файл закрывался без запроса на сохранение или (если с запросом), чтобы по нажатию "не сохранять" он закрылся.

Вот текст макроса:

Код
Sub WordCreate()
    'On Error Resume Next

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim ExcelTable As Range
    
    Dim i As Integer                       
    Dim Pos_Massnahme() As String          
    
    
    i = Sheets(ActiveSheet.Name).Cells(2, 2).Value
    
    
    Set ExcelTable = ThisWorkbook.Sheets("VD-LN").Range(Cells(8, 5), Cells(8 + i, 5))

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True 

    Set WordDoc = WordApp.Documents.Add

    ExcelTable.Copy
    WordApp.Selection.PasteExcelTable LinkedToExcel:=False, WordFormatting:=False, RTF:=False

    Application.CutCopyMode = False

    Set WordDoc = Nothing
    Set WordApp = Nothing          
End Sub
Ошибки при копировании листов книги
 
ув. Sanja, спасибо Ваши советы сработали. Почему-то квадратные скобки ему не понравились
Ошибки при копировании листов книги
 

Добрый день!

Подскажите в чем ошибка.

Копирую два листа активной книги в новую:

Код
HomeDir = ThisWorkbook.Path
file_Prefix_name = "/2023-09-28"
file_name = HomeDir & file_Prefix_name & " VD-TestFile.xlsx"

Worksheets(Array("1 One", "2 Two")).Copy
With ActiveWorkbook
    .SaveAs Filename:= file_name
    .Close SaveChanges:=False
End With

Все работает. Теперь 2 проблемы.

Первая возникает на строке

Код
Worksheets(Array("1 One", "2 Two")).Copy

когда я скрываю копируемые листы. Пишет, что не может осуществить метод копирования.

Вторая – в строке

Код
.SaveAs Filename:= file_name 

если я вместо

Код
file_name = HomeDir & file_Prefix_name & " VD-TestFile.xlsx"

пишу

Код
file_name = HomeDir & file_Prefix_name & " VD-Newton, Isaac [130552].xlsx"

Пишет, что нет доступа к файлу.

Как мне избежать этих ошибок?
убрать предупреждение о персональных данных, как его убрать при сохранении
 
Спасибо!
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
ув. sokol92, ув. Marat Ta,спасибо ребята!!
Как все просто, когда знаешь. Мне теперь даже и именованные диапазоны удалять не надо, поскольку в диспетчере имен их нет изначально. Здорово!!

Пока не понял, что делает SaveData = False. Попробовал, вроде не на что не влияет. Диапазоны и подключения убирает . Delete
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
ув. sokol92, Спасибо, а как это сделать макросом, не подскажите?

Я сейчас удаляю только имена диапазонов, которые присваиваются автоматически при загрузке таблиц:
Код
Dim nName As Name

For Each nName In ActiveWorkbook.Names
    nName.Delete
Next nName

А как удалить подключения?
Изменено: vadi61 - 07.03.2021 15:47:48
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
Marat Ta написал:
Думайте в этом направлении.
Буду думать. Во всяком случае появилась "зацепка". Спасибо, большое
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
New написал:
Вот такой код
Да, спасибо. Действительно лишняя строка.

Спасибо, что ищете решение, но я уже исправил код записи в файл, так что все работает. Но вопрос остается: ПОЧЕМУ? это происходит из-за увеличения длины строки в текстовом файле.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Цитата
New написал:
Почему кнопки из-за этого уезжают правее - не знаю
Вот и я не знаю... Причем, алгоритм записи в файл в 9 случаях из 10 выдает правильный результат, а один раз вот такое удлинение. Но с алгоритмом я разберусь. Мне не ясно каков механизм влияния на смещение кнопок внутри Excel'я. Задача-то тривиальная строки с разделителями переносятся в Excel-таблицу. И какая разница сколько полей предопределено текстовым файлом.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Marat Ta, я так и делаю. Я просто для примера все выбросил оставил только ту часть, которая выдавала не то что хотелось.
На самом деле Excel файл только показывает расшифрованное содержимое текстового файлы, а в случае добавления записи - зашифровывает и сохраняет уже зашифрованный текст в текстовом файле (видимо при этой записи в файл у меня и ошибка - сейчас проверяю где именно). Сам же Excel ничего в Excel-файлах не сохраняет - он пустой.
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Marat Ta,  спасибо за ответ! Да что-то очень длинно получилось. Проверю процедуру записи в файл.

Add. Но все равно не понятно, как длина (количество ячеек) может сдвигать кнопки
Изменено: vadi61 - 06.03.2021 21:52:12
Почему один и тот же макрос, который просто загружает данные из текстового файла, ведет себя с разными файлами по-разному?
 
Добрый день!
Подскажите если знаете в чем кроется причина. Макрос загружает из текстового файла, в котором поля разделены точкой с запятой, таблички на листы Excel. Макрос для всех листов один и тот же. Текстовые файлы однотипные. Ну текст он и в Африке текст...
Так вот, на одном листе все загружается нормально, а на другом, вроде как добавляются колонки слева, в которые и происходит запись (это видно по кнопкам, которые уезжают вправо).

Для примера удалил все, что можно. Оставил только сам макрос (который был записан средствами Excel, с последующими незначительными изменениями).
В файле два листа, на каждом кнопка "загрузить".Лист test1 грузит из файла test1.txt,  а лист test2 - из файла test2.txt (имена листов соответствуют названию файлов) с test2 все нормально, a test1 глючит.

Прикладываю сам excel файл и ещё оба текстовых файла - все должны лежать в одной папке.
Да, в текстовых файлах текст - это просто символы юникода, поскольку текстовое (читаемое) содержимое должно быть зашифровано.
Сам макрос:
Код
Dim file_name As String

file_name = ThisWorkbook.Path & "\" & ActiveSheet.Name & ".txt"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & file_name, Destination:=Range("$A$4:$N$100"))
    .Name = "Vertragsansicht_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 65001
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Вот, собственно и все. Ума не приложу в чем дело...
Как выбрать из массива случайным образом уникальные значения
 
ув. Kuzmich,  я вот так Вашим кодом воспользовался:
Код
Sub tt2()
   Dim i As Integer
   Dim max As Integer
   Dim r As Integer
   Dim sl: Set sl = CreateObject("Scripting.Dictionary")
   max = WorksheetFunction.CountA(Sheets("Main").Columns(1))
   Randomize
   i = 1
   With Sheets("Main")
   Do
      r = Int(Rnd * max + 1)
      If Not sl.exists(r) Then
         .Cells(i, 2).Value = .Cells(r, 1)
         .Cells(i, 3).Value = r
         sl.Add r, 1
         i = i + 1
      End If
   Loop While sl.Count < 5
   End With
   'Set sl = Nothing

End Sub

Вроде все работает.
Изменено: vadi61 - 14.12.2020 01:53:18
Как выбрать из массива случайным образом уникальные значения
 
Цитата
Kuzmich написал:
оно заносится в соответствующую ячейку
Спасибо, понял и так пять раз. Есть 3 вопроса.
1. А зачем массив, можно же непосредственно с колонкой А работать? Я читал, что Excel массивы обрабатывает быстрее, но сначала все скопировать в массив (а там может быть от 2000 слов и выше), а потом из него выбирать... и все из-за 5 выбранных слов?
2. Вы в конце пишете Set sl = Nothing. Как я понимаю - освобождаете память. А что при закрытии файла память не освобождается?
3. Вы Randomize вставили внутрь цикла. Я тоже так поступал (и в различных примерах видел), но Александр Моторин своем коде  вынес его за пределы цикла. Я сделал тестовый файлик и попробовал и так, и так (десять раз выбирал по 10 цифр из массива обеими способами). По-моему и за пределами цикла (то есть один раз) Randomize обеспечивает случайность всех последующих random'ов. Или это не так?

Ну, собственно, все. Еще раз спасибо!
Как выбрать из массива случайным образом уникальные значения
 
ув. Kuzmich, спасибо за ответ. Но я уже использовал решение Александра Моторина. Все работает быстро и, вроде, без сбоев.
Кроме того, оно мне понятнее. Я, к своему стыду, не очень понял, что в Вашей процедуре происходит :oops:

Но все равно, большое спасибо, за желание помочь.
Как выбрать из массива случайным образом уникальные значения
 
ув. Александр, спасибо. Замена Round на Int - очень понравилась.

А со словарями я никогда не встречался :), поэтому переменную t объявил как String. Это правильно или в словаре должен быть какой-то особый тип?

Но все вроде работает. Спасибо!
Страницы: 1 2 3 4 5 6 7 8 9 След.
Наверх