1

問題:

Excelには約50,000行あります。各行には domain=[a-Z0-9] という単語が含まれています。[a-Z0-9] は GUID のような一連の数字とテキストのプレースホルダーです。このドメイン ID を abc123 と呼びましょう。これは一意です。ただし、50,000 行ではテーブルの一意のキーではないため、ドメイン ID = abc123 の他のすべての行を削除して一意にする必要があります。ただし、すべてのドメインに対してこれを行う必要があるため、具体的には言えません。これを理解するにはスクリプトが必要です。ドメイン ID は常に同じ列にあり、多数の異なるドメイン ID が繰り返されます。

サンプル

列 2
abunchofstuff3123123khafadkfh23k4h23kh* DomainID=abc123 *

疑似コード

//Whenever there is a value for domain in row i col 2    
//does it already exist in ListOfUniqueDomains?  
//if so then remove this row  
//else add to the ListOfUniqueDomains

Excel/VBAでこれを行うにはどうすればよいですか?

更新された回答 ピボットテーブルを使用するというアイデアは本当に気に入りましたが、ドメインIDを抽出する必要があったため、その部分のソリューションをここに投稿すると思いました. グーグルで実際に他のWebサイトから機能を盗みましたが、適切な信用を与えるために元の投稿を失いました. もしその人があなたなら許してください。

したがって、私の場合domain=abc123&、長い文字列に埋め込まれた文字列に 2 つの区切り記号 (=、&) がありました。そのため、ドメイン ID を抽出するために、次のことを行いました。

 Public Function extract_value(str As String) As String
    Dim openPos As Integer
    Dim closePos As Integer
    Dim midBit As String
     On Error Resume Next
    openPos = InStr(str, "=") 'get the position of the equal sign
     On Error Resume Next
    closePos = InStr(str, "&") ' get the position of the &
     On Error Resume Next

    midBit = Mid(str, openPos + 1, closePos - 1) 
   'get the string that is between equal sign and before '&' however this seems  
   'greedy and so it 'picked up the last '&'.I used split to get the first occurrence
   'of '&' because that was how my string was designed.

   Dim s As String
    s = Split(midBit, "&")(0)
    extract_value = s

    End Function

VBA は、このようなものに対しても良い考えですか?

ありがとう

4

1 に答える 1

2

一意の要素のみを抽出する必要があるかなり大きなファイル (50k 行) に対してこれを行いました。私がやったことは非常に簡単です: ピボット テーブルを使用します。この方法では VBA は必要ありませんが、さらに処理したい場合でも、テーブルを更新してデータを抽出するのは非常に簡単です。

私がこの方法を本当に気に入っている理由の 1 つは、非常に簡単であると同時に強力であることです。ループやアルゴリズムを記述する必要はありません。Excel の機能で十分です。

ここに画像の説明を入力

于 2012-09-11T00:26:23.693 に答える