2012-08-14 38 views
0

現在我想到了在Excel中執行此操作的一種相當簡單的方法。我打算寫一個自定義的Python方式來做到這一點,但我對CSV模塊不是非常精通。我根本不瞭解VBA(雖然我不會爲了這個任務而學習它)。試圖從列J中刪除所有不在Excel中的列F中的值

基本上我的問題是這樣的:

我有在它的多個名字(串聯姓氏和名字從列H和I用公式=H&" "&I列J和我想要做的幾件事情:

1 - 首先我想將列G與列J相關聯(列G包含一個聯繫人ID,我試圖將其與所有其他行相關聯)。我相信我會用組來做這件事嗎?

2 - 第二,我想刪除在整個F列中沒有匹配的所有J(以及G)值。

實質上,對於F的所有值,如果在J列中沒有任何值相等,我希望J和G的分組被刪除或隱藏。

注意,絕對沒有驗證被G上在此整個時間完成的,只有F和J之間

我懷疑的是,這將意味着j的每個值與F的值的數組,然後如果沒有對應的值,則刪除該特定值爲其一部分的組。

編輯:澄清,F中的數據也是名字和姓氏。

+0

你好安德魯,你完全反對Python解決方案嗎?如果您熟悉Python,那麼CSV模塊實際上並不是那麼糟:)高興地幫助解決方案。無論如何,你能否提供一些示例行以便了解它是如何設置的? – RocketDonkey 2012-08-14 14:38:16

+0

我已經開始在Python中開發解決方案。這是我到目前爲止有: 導入CSV F = csv.reader(開放( 'F.csv', 'RB'),分隔符= '')在 FLIST = [] 爲行F: FList.append( ''。加入(行)) JG = csv.reader(開放( 'JG.csv', 'RB'),分隔符= '') ultralist = [] 在FLIST項目: 爲JG行: 如果行[1] ==項目: ultralist.append(行) 打印ultralist – 2012-08-14 14:46:23

+0

不錯!所以csv.reader的一般概念是它將CSV中每一行的內容讀入一個列表,其中每個元素表示一個列值。另外,還有csv.DictReader,它允許您按名稱訪問列。如果你想通過解決方案工作,很樂意進入聊天。 – RocketDonkey 2012-08-14 14:58:22

回答

0

我知道這是可怕的不雅(甚至可能完全不起作用),但這會做你想做的。您只需根據需要調整列的範圍(我使用了17,000行)。我使用J和F列,就像你說的,所以你應該只需要運行它:

Sub CheckColumnForValuesInAnotherColumn() 

Dim CheckColumn As Range 
Dim ColumnToDeleteValuesFrom As Range 

Dim wbk As Workbook 
Set wbk = ThisWorkbook 
Set ws = wbk.Sheets(1) 

Set CheckColumn = ws.Range("F2:F17000") 
Set ColumnToDeleteValuesFrom = ws.Range("J2:J17000") 

Dim cell As Range 

On Error Resume Next 

Application.ScreenUpdating = False 

ws.Select 

    For Each cell In ColumnToDeleteValuesFrom 

     If Application.WorksheetFunction.VLookup(cell.Value, CheckColumn, 1, False) = IsError(xlErrNA) Then 
      cell.ClearContents 
     End If 

    Next cell 

ws.Select 
Range("A1").Select 

Application.ScreenUpdating = True 

End Sub 

祝你好運。

+0

這是VBA btw。您需要將此代碼插入到vba模塊中,然後運行它。 – Stepan1010 2012-08-14 16:28:17