2016-08-31 7 views
-4

私はVBを初めて使用しています。両方の列のアドレスを比較する必要があります。4列のデータの比較

両方のアドレスが一致する場合、両方のデータが一致するかどうかをチェックし、ソースファイルとダンプファイルのアドレスとデータの両方をテキストファイルに出力しない場合はチェックします。

列Aのアドレスが列Cに見つからない場合は、ソースファイルのアドレスとデータをテキストファイルに出力します。

列Cのアドレスが列Aに見つからない場合、ダンプファイルのアドレスとデータをテキストファイルに出力します。

誰かが私を助けることを願っています。ありがとう!アドレスが一致した場合

Source File   Dump File 
     a   b   c  d 
1 address data  address data 
2 s100  a   s010  x 
3 S010  x   s020  b 
4 S030  y   S030  y 
5 s040  z   S040  d 

一つの問題

は、私はそれは、データが両方のアドレスで同じであるかどうかを確認doesntのだと思います。たとえば、ソースファイルは、アドレスがデータ「Z」で「S040」が、アドレスを持つファイルをダンプデータ「D」

時間の問題

それは非常に長いARD 900M反復があるので取って「S040」を有します。重複を最初に削除してからこの検索を実行する方が良いですか?私はエクセルの重複削除機能を使用しようとしましたが、1つの列に対してのみ機能します。サイクル全体で25分かかる。データを組み合わせる


連続したアドレスがリストに一意である場合:

1列で一意のアドレスのチャンクがあれば、私が最初に固有のアドレスと最後の独特の開始アドレスを見つける必要があります

'If all the data are FF's output like this 
File: dump.s19 
0x006180 – 0x007E8F 
[Result] OK 

'Here certain lines are all FF's which are not displayed here, only Non FF's lines need to printed as follows. 
File: dump.s19 
0x007EB0 – 0x00FFFF 
S224007FF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4247494EFFFFFFFFFFFFFFFF0000FFFF66 
S224008010FFFFFFFF01019D160825A100100201FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA 

S224008050302D4100E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8 
S224008070FFFFFFFFFFFFFFFFFFFFA3BF454E442EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E 
Result: NOK 

私はこの追加のロジックを統合する方法を確認していない:すべてのFFはこのような者ではありませんアドレスと 出力行のみ私のコードに。

'Set the address you're trying to find 
      fa = Range(sf & cr).Value 
      fa_data = Range(Chr(Asc(sf) + 1) & cr).Value 
      Debug.Print "fa" & fa 
'Find it 
      Set targetcell = Range(si & 3 & ":" & si & lr_2).Find(What:=fa, LookIn:=xlValues, _ 
       SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) 
'If Nothing is returned it is not found 
      If targetcell Is Nothing Then 
'Write your search cell and it's ajacent to your file. 
       If l = 1 Then 

        startadd = Range(sf & cr).Value 
        If startadd <> "FFFFFF" Then 

         Dec_startadd = Val("&H" & startadd & "&H") 
         lgth = Len(Range(Chr(Asc(sf) + 1) & cr)) - 2 
         lgth = lgth/2 - 1 
         endadd = Hex(Dec_startadd + lgth) 
         endadd = Right("000000" & endadd, 6) 

         Print #fn, "File:" & orig_filename 
         Print #fn, "0x" & startadd & " - 0x" & endadd 
         Print #fn, Range(Chr(Asc(sf) - 1) & cr).Value & Range(sf & cr).Value & Range(Chr(Asc(sf) + 1) & cr).Value 
         Print #fn, "Result: NOK" 
         Print #fn, 
         Print #fn,  
+0

は、あなたがこれまでにしようとしているものを、SOへようこそ! SOはコード作成サービスではありませんので、あなた自身でこれを解決しようとしているものを提供してください。 – DragonSamu

+0

(1分足らず)http://stackoverflow.com/questions/7899034/compare-values-in-excel-vbaおよびhttp://www.homeandlearn.org/write_to_a_text_file.html –

+0

私は2つのforループを使用する予定でした。ダンプファイル(35000)とアドレスのard 31000ファイルには、より多くのアドレスがあるので、効率的に行う方法がわかりません。私は多くのコーディングをしていないし、初心者ですので、私にとっては非常に複雑に思えます。 – Manick9

答えて

1

私はそれの楽しみのためにこれを手早く:

'Get a the next available file number 
    fn = FreeFile 
'Open your file ready for writing. 
    Open "your full path and file name" For Output As #fn 
'Set the First row to search from. 
    fr = 2 
'Find the last row. 
    lr = ActiveCell.SpecialCells(xlLastCell).Row 
'Set the column for the value that you are searching for. 
    sf = "A" 
'Set the column for that you are searching in. 
    si = "C" 
'You want to search two columns 
    For l = 1 To 2 
'Loop from first row to the last row. 
     For cr = fr To lr 
'Set the address you're trying to find 
      fa = Range(sf & cr).Value 
'Find it 
      Set targetcell = Range(si & fr & ":" & si & lr).Find(What:=fa, LookIn:=xlValues, _ 
       SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
'If Nothing is returned it is not found 
      If targetcell Is Nothing Then 
'Write your search cell and it's ajacent to your file. 
       Write #fn, Range(sf & cr).Value & "," & Range(Chr(Asc(sf) + 1) & cr).Value 
      End If 
'I always put a DoEvents in a loop; just in case you need to break out of it. 
      DoEvents 
     Next 
'Now you've done one column swap them over and do it again. 
     sf = "C" 
     si = "A" 
    Next 
'It's done. 
    Close #fn 
+0

ありがとう@Jason Stallard。そしてそのコメントは私が簡単に理解するのを助けました。 – Manick9

+0

アドレスが一致すると、データが両方のアドレスで同じかどうかを確認できません。たとえば、ソースファイルのアドレスは「s040」、データは「z」ですが、ダンプファイルのアドレスは「s040」、データは「d」 – Manick9

+1

ターゲットセルがあります。 .Valueとあなたが探しているアドレス(fa)とを比較するだけです。 –