2016-09-16 1 views
0

발행자 이름과 등급이있는 2 차원 (x, y) 배열이 있습니다. 불행하게도VBA 중복 결과를 배열로 일치시키고 누락 된 셀에 쓰기.

MBANK BBB 
0 NR 
QUERCUS TFI PL 0 
SCHRODER INVMGMT 0 
0 NR 
NEWAG 0 
GRUPA DUON 0 
BZ WBK TFI 0 
LEGG MASON PL 0 
POLAND 0 
POLAND 0 
POLAND 0 
CIECH SA 0 
ERBUD SA 0 
MBANK BBB 
DB LONDON BBB+ 
DB LONDON 0 
PIONEER PEKAO 0 
MBANK BBB 
TFI PL 0 
ELEMENTAL HLDG 0 
MONNARI TRADE 0 
MIDAS SA 0 
PE MGMS SA 0 
MOSTOSTAL ZABRZE 0 
LC CORP 0 
BANK HANDLOWY W NR 
POLAND A 
MBANK 0 

,이 목록은 결함이 발생하고 때로는은 0

내 목표는 (정확한 이름이 같은) 발행인을하는 것입니다

가지고 쓰기, 모든 isuers 등급을 제공하지 않는 소프트웨어 전체 배열에서 동일한 등급. 제공되는 예에서, MBANK는 등급 BBB를 가지고 있지만 마지막 항목에 MBANK 지금까지 0. 나의 코드가 :

'rating 
ReDim rating_array(n, 2) 
For x = 1 To n 
     rating_array(x, 1) = ThisWorkbook.Sheets("SAP BW Data").Cells(1 + x, 21) 'issuer group names 
     rating_array(x, 2) = ThisWorkbook.Sheets("SAP BW Data").Cells(1 + x, 34) 'ratings 
Next x 


For i = 1 To UBound(rating_array) 
    If rating_array(i, 1) = 0 Then 
     Issuer = rating_array(i, 2) 'issuer group name with blank rating 
     'to do: search through the array, find "Issuer", if at least one has a rating, give all "Issuer" the same rating. 
내 목표

:는, 배열을 검색 MBANK는 0을 가지고 찾을 수 있습니다 아래쪽에서 MBANK로 모든 항목을 살펴보고 등급이있는 항목 (이 경우 첫 번째 항목 인 BBB)을 찾고 해당 등급이 현재 0 인 모든 MBANK를 대체하도록하고 싶습니다. 데이터가 생성되는 방식에는 동일한 이름으로 다른 등급의 항목이있는 상황이 없어야합니다. 또한, 내 목록은 약 1500 개의 항목이므로 코드에서 계속 진행되는 다른 많은 것들이 있기 때문에 기능이 비교적 부드럽습니다.

코드의 "검색 및 바꾸기"부분을 처리하는 방법을 잘 모릅니다. 나는 이것에 대한 몇 가지 조언을 주시면 감사하겠습니다!

+0

를 사용하여 도움이되기를 바랍니다 귀하의 배열. – Jeeped

+0

@Jeeped 첫 번째 "일치"에 실제로 등급이 포함 된 경우에만 유용합니다. 내 MBANK 예제에서는 이것이 사실이지만 항상 제공되는 것은 아닙니다 (제공되는 데이터에서 POLAND라는 항목을보십시오). 이 주변의 어떤 방법? –

+0

@DaveR 열 21은 그룹의 이름입니까? 열 34는 등급입니까? –

답변

0

내가 아니라 다른 범위에 당신의 값을 사용 당신은해야합니다

Dim arrRating As Variant 
Dim i, x As Integer 

arrRating = Range("A33:B61") 

For i = 1 To UBound(arrRating) 

    If arrRating(i, 2) = 0 Then 

     For x = 1 To UBound(arrRating) 

      If arrRating(x, 2) <> 0 And arrRating(x, 1) = arrRating(i, 1) Then 

       arrRating(i, 2) = arrRating(x, 2) 
       Exit For 

      End If 

     Next 

    End If 

Next 

Range("A33").Resize(UBound(arrRating, 1), UBound(arrRating, 2)).Value = arrRating 

이이 범위를 변경하려고하지만`application.match (...)`에

+0

고마워,이 작품을 확인하고 작업을 완료! 고맙습니다 –