Minha intenção real no arquivo exemplo era extrair as informações que estão todos em apenas 1 coluna, e separá-los em duas colunas de tal forma que as informações ficassem alinhadas.
.
No tópico está apenas uma faixa do código.
.
Posto abaixo para registro, com arquivo exemplo:
Option Explicit
Public oDoc as Object
Public oSheet as Object
Public oRange as Object
Public oSvc as Object
Public i as Long
Sub ExtraiTransmitente()
oDoc = ThisComponent 'Retorna o doc atual
oSheet = oDoc.CurrentController.getActiveSheet() 'Retorna planilha ativa
oSvc = createUnoService( "com.sun.star.sheet.FunctionAccess" ) 'Cria instancia do objeto
oRange = oSheet.getCellRangeByName("D:D").queryContentCells(4).RangeAddresses(0) 'Retorna endereço do intervalo que tenha conteudo
'Faz leitura do intervalo e insere formula cont.se para extrair os transmitentes
For i = oRange.StartRow+2 To oRange.EndRow
oSheet.getCellRangeByName("E" & i).Value = _
oSvc.callFunction("COUNTIF", Array(oSheet.getCellRangeByName("D" & i), Ucase("Transmitente") ) )
'Se o resultado for > 0, então obter nomes
If oSheet.getCellRangeByName("E" & i).Value > 0 then
oSheet.getCellRangeByName("E" & i).String = oSheet.getCellRangeByName("C" & i).String
Else
oSheet.getCellRangeByName("E" & i).String = ""
End If
Next i
'Se igual a transmitente, concatenar
For i = oRange.StartRow+2 To oRange.EndRow
If oSheet.getCellRangeByName("D" & i).getString = Ucase("Transmitente") then
oSheet.getCellRangeByName("F" & i).String = oSvc.callFunction("CONCAT", Array(oSheet.getCellRangeByName("E" & i), Chr$(10), oSheet.getCellRangeByName("E" & i+1) ) )
End If
Next i
'Deleta coluna usada primeiro para extrair os transmitentes
oSheet.getColumns().removeByIndex(4, 1)
End Sub
Sub ExtraiAdquirente()
oDoc = ThisComponent 'Retorna o doc atual
oSheet = oDoc.CurrentController.getActiveSheet() 'Retorna planilha ativa
oSvc = createUnoService( "com.sun.star.sheet.FunctionAccess" ) 'Cria instancia do objeto
oRange = oSheet.getCellRangeByName("D:D").queryContentCells(4).RangeAddresses(0) 'Retorna endereço do intervalo que tenha conteudo
'Faz leitura do intervalo e insere formula cont.se para extrair os adquirentes
For i = oRange.StartRow+2 To oRange.EndRow
oSheet.getCellRangeByName("F" & i).Value = _
oSvc.callFunction("COUNTIF", Array(oSheet.getCellRangeByName("D" & i), UCase("Adquirente") ) )
'Se o resultado for > 0, então obter nomes
If oSheet.getCellRangeByName("F" & i).Value > 0 then
oSheet.getCellRangeByName("F" & i).String = oSheet.getCellRangeByName("C" & i).String
Else
oSheet.getCellRangeByName("F" & i).String = ""
End If
Next i
For i = oRange.StartRow+2 To oRange.EndRow
If oSheet.getCellRangeByName("D" & i).getString = Ucase("Adquirente") then
oSheet.getCellRangeByName("G" & i).String = oSvc.callFunction("CONCAT", Array(oSheet.getCellRangeByName("F" & i), Chr$(10), oSheet.getCellRangeByName("F" & i+1) ) )
End If
Next i
For i = oRange.StartRow+2 To oRange.EndRow
If oSheet.getCellRangeByName("G" & i).String = "" then
oSheet.getCellRangeByName("H" & i).String = oSheet.getCellRangeByName("G" & i+1).String
Else
oSheet.getCellRangeByName("H" & i).String = ""
End If
Next i
For i = oRange.StartRow+2 To oRange.EndRow
If oSheet.getCellRangeByName("H" & i).String = "" then
oSheet.getCellRangeByName("I" & i).String = oSheet.getCellRangeByName("H" & i+1).String
Else
oSheet.getCellRangeByName("I" & i).String = ""
End If
Next i
'Deleta colunas usadas para extrair os adquirentes
oSheet.getColumns().removeByIndex(5, 3)
End Sub
ExemploAsk.ods (30,3,KB)