Excel сопоставляет числа в 2 столбцах с числом в 3-м - PullRequest
0 голосов
/ 26 июня 2018

Я наткнулся на дорожный блок. Я получаю вывод .PDF из бухгалтерской программы и копирую / вставляю данные в excel, а затем преобразую текст в столбцы. Я пытаюсь сопоставить код GL с итогами для этой конкретной учетной записи. Столбцы A, B и C показывают состояние моих данных до их сортировки, а строки в разделе «Предполагаемый вывод» показывают, как я хочу, чтобы данные выводились.

Я пытаюсь автоматизировать этот процесс, чтобы я мог вставить данные в столбцы A, B и C в необработанном формате и автоматически выдать нужные числа в формате предполагаемого вывода. Коды GL остаются прежними, но номера и количество строк изменятся. Для удобства просмотра я выделил их цветом.

Большое спасибо заранее!

Image 1

Ответы [ 2 ]

0 голосов
/ 27 июня 2018
Try this procedure:

 Public Sub bruce_wayne()
 'Assumptions
 '1. Data spreadsheet will ALWAYS have the structure shown in the question
 '2. The key word "Total" (or whatever else it might be) is otherwise NOT found
 '        anywhere else in the 1st data column
 '3. output is written to the same sheet as the data
 '4. As written, invoked when data sheet is the active sheet
 '5. set the 1st 3 constants to the appropriate values

 Const sData2ReadTopLeft = "A1"      'Top left cell of data to process
 Const sData2WriteTopLeft = "J2"     'Top left cell of where to write output
 Const sSearchText = "Total"         'Keyword for summary data

 '*******************
 Const sReplaceText = "Wakanda"

 Dim r2Search As Range
 Dim sAccountCode As String
 Dim rSearchText As Range
 Dim iRowsProcessed As Integer

 Set r2Search = Range(sData2ReadTopLeft).EntireColumn
 sAccountCode = Range(sData2ReadTopLeft).Offset(1, 0).Value
 iRowsProcessed = 0

 Do While Application.WorksheetFunction.CountIf(r2Search, sSearchText) > 0
    Set rSearchText = r2Search.Find(sSearchText)
       Range(sData2WriteTopLeft).Offset(iRowsProcessed, 0) = sAccountCode
       Range(sData2WriteTopLeft).Offset(iRowsProcessed, 1) = rSearchText.Offset(0, 1).Value
       Range(sData2WriteTopLeft).Offset(iRowsProcessed, 2) = rSearchText.Offset(0, 2).Value ' add this if there are more summary columns to return
       'last two lines could be collapsed into a single line; at the expense of readability..

       rSearchText.Value = sReplaceText 'so that next search will find the next instance of the trigger text

       iRowsProcessed = iRowsProcessed + 1

       sAccountCode = rSearchText.Offset(1, 0).Value
 Loop
 r2Search.Replace what:=sReplaceText, Replacement:=sSearchText
End Sub
0 голосов
/ 26 июня 2018

Используя комбинацию следующих формул, вы можете создать список отфильтрованных результатов. Он работает с принципалом, что текст Data1, который вы хотите извлечь, является единственным текстом с «-», и что итоговые значения, которые вы извлекаете из Data2 и Data3, являются единственными числами в столбце. Любое изменение в этом шаблоне, скорее всего, сломает систему. Обратите внимание, что формулы не будут копировать форматирование.

  • IFERROR
  • ИНДЕКС
  • ОБЩИЙ
  • ROW
  • ISNUMBER
  • FIND

Предположим, что вывод будет помещен в небольшую таблицу, где E2 - это верхнее левое местоположение данных.

В E2 используйте следующую формулу и, при необходимости, скопируйте:

=IFERROR(INDEX(A:A,AGGREGATE(15,6,ROW($A$1:$A$30)/ISNUMBER(FIND("-",$A$1:$A$30)),ROW(A1))),"")

В F2 используйте следующую формулу и скопируйте в нужную 1 колонку и при необходимости вниз:

=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($A$1:$A$30)/ISNUMBER(B$1:B$30),ROW(A1))),"")

POC

AGGREGATE выполняет вычисления, подобные массиву. Поэтому не используйте в нем полные ссылки на столбцы, такие как A: A, так как это может привести к избыточным вычислениям. Обязательно ограничьте его диапазоном, на который вы смотрите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...