Задать вопрос
Ответы пользователя по тегу Excel
  • Как выделить доменное имя с ячейки Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Если данные в колонке A, то скопировать формулу в ячейку B1:
    =СЦЕПИТЬ(".";СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(A1;".";ПОВТОР(" ";5));5)))
    Растянуть по колонке.
    Ответ написан
    Комментировать
  • Запрос к БД MS SQL из Excel - какой драйвер применять?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Использовал эти драйвера для файловых баз небольших объёмов (MS Excel 2010). У первого версия может быть уже свежее, поэтому не на каждом ПК будет по умолчанию. Второй должен быть универсальный.
    Private Type GUIDs
      Data1 As Long
      Data2 As Integer
      Data3 As Integer
      Data4(0 To 7) As Byte
    End Type
    
    Private Declare Function CLSIDFromProgID Lib "ole32" (ByVal lpszProgID As Long, rclsid As GUIDs) As Long
    
    Public Function IsOLEObjectInstalled(Name As String) As Boolean
    Dim mGuid As GUIDs
      On Error Resume Next
        IsOLEObjectInstalled = CLSIDFromProgID(StrPtr(Name), mGuid) = 0
    End Function
    
    Private Sub GetOLEObjects()
    Dim msg As String
      msg = "Microsoft.ACE.OLEDB.12.0 = " & IsOLEObjectInstalled("Microsoft.ACE.OLEDB.12.0") & vbCrLf
      msg = msg & "Microsoft.Jet.OLEDB.4.0 = " & IsOLEObjectInstalled("Microsoft.Jet.OLEDB.4.0") & vbCrLf
      MsgBox msg
    End Sub

    Субъективно лучше первый.
    Ответ написан
    Комментировать
  • Как сделать выгрузку из excel и в каком формате?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Пишем макрос:
    1. Пробегаемся по колонке и смотрим у ячейки "уровень отступа" по свойству ActiveCell.IndentLevel
    2. Создаём массив (или коллекцию), куда вносим значение ячейки и п/п номера в нужном формате
    3. Выгружаем массив (или коллекцию) куда нужно
    Ответ написан
    Комментировать
  • Как в Экселе подключить набор данных из другой таблицы?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Если во второй книге есть колонка, где значения совпадают со значениями из колонки в первой книге - функция ВПР должна помочь (таблица должна быть отсортирована по убыванию по нужным полям на случай, если будут найдены дубликаты искомых данных). Подробно.
    Ответ написан
  • Как конвертировать файл .csv в формат .xlsx на VBScript?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Берём какой-нибудь скрипт с заменой символов и изменяем под задачу.
    Option Explicit
    
    Const VERSION = "rev100"
    Const VERSIONDATE = "17/10/2016"
    
    Sub ProcessDir(folder)
    	Dim fname, file, subfolder, i
    	Const ForReading = 1
    	Const ForWriting = 2
    	Const xlOpenXMLWorkbook = 51
    	
    	For Each file In folder.Files
    	If extold = LCase(fso.GetExtensionName(file)) Then
    		fname = file.Path
    		Set fl = fso.OpenTextFile(fname, ForReading, False)
    		txt = Split(fl.ReadAll(), vbCrLf)
    		For i = 0 To UBound(txt)
    			txt(i) = Replace(txt(i), ";", ",")
    		Next
    		fl.Close
    		file.Name = file.Name & "_bak"
    		Set fl = fso.CreateTextFile(fname, True)
    		fl.Write Join(txt, vbCrLf)
    		fl.Close
    	End If
    	Next
    	For Each file In folder.Files
    	If extold = LCase(fso.GetExtensionName(file)) Then
    		fname = file.Path
    		Set fl = CreateObject("Excel.Application")
    '		fl.Visible = True ' Debug
    		With fl.Workbooks.Open(fname)
    			' Do Something... '
    			.SaveAs Replace(fname, extold, extnew), xlOpenXMLWorkbook: .Close False
    		End With
    		fso.DeleteFile(Replace(fname, extold & "_bak", extold))
    	End If
    	Next
    	For Each file In folder.Files
    	If extold & "_bak"= LCase(fso.GetExtensionName(file)) Then
    		file.Name = Replace(file.Name, extold & "_bak", extold)
    		MsgBox "File " & file.Name & " successfully created.", vbInformation
    	End If
    	Next
    	For Each subfolder In folder.SubFolders
    		ProcessDir (subfolder)
    	Next
    End Sub
    
    Dim fso, folder, fl, txt
    folder = "C:\Users\User\Desktop\"
    ' Change the extension in the program settings
    Const extold = "csv"
    ' This extension can be written after changing semicolon to a comma
    Const extnew = "xlsx"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folder)
    ProcessDir (folder)
    Set fso = Nothing
    Ответ написан
  • В чем ошибка в создании зависимых списков excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Всё у вас работает. Выберите значение из списка в ячейке C2, увидите список в ячейке D2.
    Ответ написан
  • Как получить вторую строку?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Функция VLOOKUP ищет в первом столбце диапазона (диапазон указан во 2-м аргументе). Поскольку значения в колонках 2 и 4 не уникальные, то значения этих колонок необходимо соединить формулой (добавить новую колонку перед 2-й колонкой, и вставить формулу =$C5&$E5 по всей колонке). Рабочую формулу заменить на:
    =IF($C5;VLOOKUP($B5;'seznam januar 2016'!$B$5:$AI$2500;3);" ")
    Ответ написан
  • Как снять пароль с VBA проекта файла XLAM?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Статьи описывают другой алгоритм. Здесь помогают. +RAR
    Ответ написан
  • Как на VBA написать массив?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Так объявляются статические массивы (границы массива изменять нельзя):
    ' 1 - нижняя граница массива, 5 - верхняя граница массива
    Dim arr(1 To 5) As Integer
    ' Если не объявлять нижнюю границу,
    ' то по умолчанию в Excel нижняя граница массива будут начинаться с 0 до 5

    Динамические массивы объявляются безразмерными, затем для изменения границ массива используется оператор ReDim. Параметр Preserve можно опустить:
    Dim arr() As Integer
    b = 5
    ' Параметр Preserve нужен для сохранения значений в массиве при изменении верхней границы
    ReDim Preserve arr(1 To b)

    ЗЫ: Если всё понятно, внизу ответа нужно нажать кнопку "Отметить решением" :)
    Ответ написан
    Комментировать
  • Как удобнее реализовать проверку наличия вводимого значения в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Для подсветки повторяющихся значений в столбце можно использовать условное форматирование. Если хотите использовать безграничный диапазон (неизвестно конечное число строк), в примере выделите всю колонку "A" и измените в условном форматировании формулу на =ПОИСКПОЗ($A1;$A:$A;0)<>СТРОКА($A1), а диапазон укажите =$A:$A.
    Значение должно быть целиком введено в ячейку. Регистр (для текста) не учитывается.

    Если требуется выбирать только введённые (ранее) значения, то в Excel создаются списки значений.
    Ответ написан
    5 комментариев
  • Как и возможно ли чтобы, при подписи делений на оси абсцисс, вместо чисел было число Пи с соответствующими коэффициентами?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Возможно.
    c66ffb163af34fdc9492eef8859bc72a.png
    Подготавливаем данные для функции синуса.
    1. В колонке A указываем значения по оси абсцисс от -2,5 до 2,5 с шагом 0,125; это минимальная кратность шага. Т.о. можно в ячейку A2 записать формулу =$A1+СТЕПЕНЬ(0,5;3) и протянуть до 41-й строки, а в ячейку A1 записать значение "-2,5"
    2. В колонке B устанавливаем меру для оси абсцисс кратную Пи с помощью формулы: =ОКРУГЛ(ПИ()*$A1;2)
    3. В колонке C записываем формулу синуса: =SIN(ПИ()*$A1)

    Строим график синуса, указывая в "данных диаграммы" колонку C. Настраиваем график:
    1. Конструктор (меню) -> Выбрать данные
    2. Подписи по горизонтальной оси (правая колонка) -> Изменить (кнопка)
    3. Выбираем для "диапазона подписей" колонку B. Нажимаем OK.

    Открываем "Дополнительные параметры основной горизонтальной оси". В Excel 2010: Макет (вкладка) -> Оси (раздел).
    1. Выбираем в "Параметры оси" (меню слева) -> Вертикальная ось пересекает: в категории с номером (переключатель). Вводим номер строки, где в колонке A указано значение "0" (в моём примере "21").
    2. Положение оси выставляем "по делениям" (переключатель). Нажимаем OK.


    Чтобы изменить цену деления кратное Пи/4, теперь достаточно изменить формулу в колонке B.
    Вставить формулу в ячейку B1 и протянуть до конца:

    =ЕСЛИ($A1=0;0;ЕСЛИ(ОСТАТ($A1;0,5)=0;ЕСЛИ(НОД(ABS($A1*2);4)=1;ЕСЛИ(ABS($A1)>1;$A1*2;ЕСЛИ(ЗНАК($A1)=-1;"-";""))&"π/2";ЕСЛИ(ABS($A1)>1;$A1;ЕСЛИ(ЗНАК($A1)=-1;"-";""))&"π");ЕСЛИ(ОСТАТ($A1;0,25)=0;ЕСЛИ(НОД(ABS($A1*4);8)=1;ЕСЛИ(ABS($A1)>=0,75;$A1*4;ЕСЛИ(ЗНАК($A1)=-1;"-";""))&"π/4");"")))

    Остаётся задать идентичный по осям единичный отрезок, но вы с этим справитесь :)
    Ответ написан
    Комментировать
  • Как изменить разделители для CSV в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    • Изменяется региональными настройками системы: Дополнительные параметры (кнопка) -> Числа (вкладка) -> Разделитель элементов списка. Блинк
    • Написать макрос для сохранения данных с разделителем запятой:
      Sub SaveAComma()
        ActiveWorkbook.SaveAs Filename:="C:\Users\User\Desktop\ActiveSheet.csv", _
          FileFormat:=xlCSV, CreateBackup:=False, Local:=False
      End Sub
    • Чтобы открыть файл c разделителем "запятая" - в первой строке CSV-файла написать sep=,
    Ответ написан
    4 комментария
  • Excel VBA выделяющая ячейку со значением?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Вы усложняете задачу. Для этого нужен не VBA, а условное форматирование. Видео смотреть с 2:02. Особенности:
    • В примере указана ссылка на ячейку с текущей датой. Если необходимо привязаться к дате на ПК, то формула в 2:44 будет: =$E5<СЕГОДНЯ()
    • В Excel даты представляются в виде чисел. Поэтому для выделения цветом разницы в 30 дней (и старше) задаём формулу для условного форматирования: =$E5<СЕГОДНЯ()-29
    Ответ написан
    Комментировать
  • Почему при чтении из xlsx файла, с использованием библиотеки xlrd, данные с датой получаются в формате float?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    В Excel все даты сохраняются в виде целых чисел, а все значения времени — в виде десятичных дробей. В этой системе Excel может выполнять со значениями даты и времени операции сложения, вычитания и сравнения, как и с любыми другими числами. Операции со всеми значениями дат производятся с использованием этой системы.

    https://support.microsoft.com/ru-ru/kb/214094
    Ответ написан
    Комментировать
  • Как проверить диапазон ячеек объединен или нет?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Если нужно проверить, объединена ли ячейка B1 с другими в один диапазон, то для VBA код будет:
    merge = Cells(1, 2).MergeArea.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Ответ написан
    Комментировать
  • Как автоматически установить ширину столбцов и строк в электронной таблице?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    1. Excel 2007 и старше:
      1_html_2150f374.jpg
    2. Разработать алгоритм, затем написать макрос. Программ не существует.
    Ответ написан
    3 комментария
  • Как в Excel суммировать только отфильтрованные ячейки?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Для этого есть функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ (или SUBTOTAL). Первым атрибутом "номер_функции" указать 109. В Excel 2007 и ниже может считать неверно, хотя заплатки Майкрософт выпускал.
    Ответ написан
    2 комментария
  • Как исправить данную ошибку в Excel?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Не нужно Вам использовать функцию CDate; в Excel по умолчанию даты - это числа, - хорошо складываются.
    Как написал Антон Федорян задайте тип переменной j. Без указания типа переменной получается j As Variant. Если будет возникать указанная ошибка, у Вас в колонке A попалось "не число". Примечание: Типы данных.
    Ответ написан
    Комментировать
  • Как сконвертировать формулу Excel из английского в русский формат?

    honor8
    @honor8
    Принципы быстродействия VBA в описании
    Проверить названия функций листа Excel 2003 можно, например, по списку. Также для русскоязычных формул вместо разделителя параметров "," нужно использовать ";".
    Ответ написан
    Комментировать