2011-11-02 51 views
23

我有一張Excel中的數據表,其中引用了許多其他工作表中的各種不同單元格。當我嘗試對錶單進行排序或過濾時,引用會在單元格移動時發生變化。但是,我不想手動進入每個單元格並在任何地方插入$符號,因爲某些引用是連續的,我可能希望稍後自動填充。如何在Excel中對錶格中的單元格進行排序?

例如,我的一個數據列使用工作表2,B列23:28,工作表2,C列1:15和其他一些列。使用工作表2的列B的列的部分在排序之前都在相同的位置,每個其他部分也是如此。如果我插入$符號,我將不再能夠插入空行併爲新數據使用自動填充。

總之,我想要一種方法來保持我的單元格引用靜態而不使用$符號,但僅用於排序/過濾目的。我目前的解決方法包括複製表格的值,粘貼在空白表格中,然後進行排序。我希望有更好的方法來做到這一點。

+0

我只想要數字/字符串,*不是引用*。所以,打你想要排序/篩選的列/行的副本然後右鍵點擊你想編輯他們的地方,去糊的區域(填充符號)。如果沒有點擊某些東西,您會發現一些**選項用於粘貼**,但它在粘貼符號下的箭頭右側更多。選擇你的工作,並迅速完成工作。 *注意:我使用excel 365(或2016)* – nak

回答

15

我很確定這可以用indirect()函數來解決。這裏有一個簡單的電子表格:

  A   B      C       D ... 
     +------------------------------------------------------+- - - - - - - - - 
    1 |CITY  |Q1-Q3 SALES|ANNUALIZED SALES:(Q1+Q2+Q3)*1.33| 
     +======================================================+- - - - - - - - - 
    2 |Tampa | $23,453.00|      $31,192.49| 
     +------------------------------------------------------+ 
    3 |Chicago | $33,251.00|      $44,223.83| 
     +------------------------------------------------------+ 
    4 |Portland | $14,423.00|      $19,182.59| 
     +------------------------------------------------------+ 
    ...| ... | ... |    ...    | 

通常在C2單元格的公式將是=B2*1.33,直到你做一個複雜的排序工作正常。要使其對分類具有魯棒性,請使用此單元的行號構建您自己的單元格引用,如下所示: =indirect("B"&row())*1.33

希望能適用於您的情況。它修復了我遇到的類似問題。

+0

該解決方案爲我解決了這個問題;現在使用什麼版本的Excel並不重要,我會做多少複雜的事情,它將會是正確的。:-D –

+0

這個解決方案解決了我的問題,但需要注意:不能在間接內使用$引用。我不知道爲什麼,它可能就是我如何使用它,但是間接(「B2」)與間接(「$ B2」)不一樣 - 這很奇怪,因爲它應該表示同樣的事情? –

+0

如果你的公式引用了同一行,這將工作。如果您的公式引用其他行,則不起作用。 –

6

你有幾個選擇:

(1)有周圍的單元格引用沒有辦法不使用靜態引用時,排序時得到搞砸了。處理這個問題的最基本的方法是在排序之前簡單地複製並粘貼爲值,這可以通過簡單的VBA宏自動執行。

(2)如果您在公式中使用多個常用範圍,則還可以嘗試使用命名範圍。您可以在公式中將'Sheet2!B23:28'定義爲'Range1'並引用'Range1'。在這種情況下,顯然排序不會影響指定的範圍,因爲它是在其他地方定義的。

HTH

+1

我低估了這一點,因爲@Alex Svetlev的回答表明存在單元格引用越來越亂了 - 使用INDIRECT(「cellref」) –

+0

user3601903的解決方案下面解決了我陳述的問題 –

7

即使使用絕對引用,sort也不能正確處理引用。相對引用指向與新行位置相同的相對偏移量(這顯然是錯誤的,因爲其他行不在相同的相對位置上)並且絕對引用不會更改(因爲SORT省略了翻譯絕對引用的步驟每行重排後)。做到這一點的唯一方法是手動將行(將轉換的引用轉換爲絕對值)逐個移動。 Excel然後進行必要的參考翻譯。 Excel SORT缺陷,因爲它不這樣做。

0

我們也在努力解決同樣的問題。

作爲一種解決方法,我們使用宏來轉換表列表,對列表進行排序,然後將列表轉換回表格。

這裏請找到一個示例宏

Sub Sort_Table() 

    'change table name to "table1" 
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$c$4"), , xlYes).Name = _ 
    "Table1" 
    ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" 


    Dim oSh As Worksheet 
    Set oSh = ActiveSheet 
    'remove table or list style 
    oSh.ListObjects("Table1").Unlist 

'Sort List 
    Range("B2").Select 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A4"), _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Sheet1").Sort 
    .SetRange Range("A1:C4") 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
'Change list back to table again 
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$c$4"), , xlYes).Name = _ 
    "Table1" 
    ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2" 
    End Sub 
0

我有同樣的問題;我有一張主表,它是我工作簿中其他工作表信息的摘要。

如果您只是想在工作表中對您的數據進行過濾/排序,然後將其恢復到原始狀態(無論您要過濾/排序),只需在第一列中輸入行項目編號。

在初始過濾器/排序後,您可以通過「行項目編號」使其恢復正常。注意:只有當您總是將新行按順序添加到列表末尾時,這才起作用。

6

對於我這種工作就像下面 -

我在公式表名稱引用了同一張紙上。當我從公式中刪除當前工作表名稱並將其正確排序時。

+0

我只是和原來的帖子有同樣的問題,這個答案完全無效了。 – 2014-08-01 16:44:37

+0

這對我來說非常合適。不知道爲什麼表格名稱會影響如何排序處理單元格引用? – PermaNoob

+0

這也適用於我。 –

0

這是一個很好的答案弄清楚如何從其他用戶整理作品,我會增加我的筆記就知道它是如何不完全正確的,什麼是正確的:

後對公式的影響排序與複製相同。排序不會移動行內容,它會複製它們。公式可能(或可能不取決於abs /相對引用)使用新數據,就像複製的公式一樣。

我的觀點是,如果公式可以從1行復制到另一個,效果不會改變,排序不會影響公式結果。如果公式如此複雜並且依賴於位置,複製這些公式會更改相對內容,則不要對它們進行排序。

我的注意,我在實踐中經歷:

以上用戶是在說正確的,但實際上它有一些例外: 份含表名稱(!像Sheet1中A1)一列式的被視爲絕對的,參考文獻(儘管是複製,如果它們是相對的,則更改參考文獻) ,以便複製公式的一部分而不更改相對於更改公式的位置的參考文獻 這包括當前工作表單元格,其格式如下:sheet1!A2並將視爲絕對引用(僅用於排序) 我測試了這個excel 2010,我不認爲這個問題在其他版本中得到解決。 解決方法是在另一個地方複製並過濾特殊值,然後使用排序。

0

最好的方法是將參考數據保留在工作表的一側,並將工作表的另一側的所有公式保留。然後在它們之間留下一個空白列(如果需要,將其隱藏起來),那麼您將僅對參考數據進行排序,並將公式參考始終指向同一位置。下行是Excel會在你每次排序時重新計算。

0

一個非常簡單的方法是將問題列保留在過濾的數據之外,但是在過濾的部分中添加一個列,並在其中引用單元格引用(簡稱「='cell'」)。

這樣的問題的公式將保持不變,但過濾後的數據將正確地引用他們,你可以使用這些細胞進行排序相應

0

試試這個方法:

  1. 插入列左邊要排序的單元格。
  2. 假設列B:G爲基於B進行排序
  3. 複印列B
  4. 值粘貼到柱A
  5. 高亮列B:ģ
  6. 替換#跡象
  7. 排序=跡象COLS答:g,以甲
  8. 高亮列B:ģ
  9. 替換#標誌與標誌=
  10. 刪除COL A.
  11. 瞧!
0

我需要使用引用對單元格進行排序,並且確實需要避免粘貼值以便使用..「透視表」完成了這個任務。

  1. 準備你的表與參考。
  2. 選擇表(帶引用)並插入數據透視表
  3. 在數據透視表中,選擇所需的過濾器以使數據透視表看起來像您的原始表(如果需要)。
  4. 根據需要對數據進一步分類/過濾。

只要確保右鍵單擊數據透視表,並在每次更改一些通用數據(在表中使用)時點擊「刷新」。

希望它會有所幫助。 安德烈

2

我已經受夠了這種麻煩自己,找到最好的和最簡單的解決方案...

  1. 複製您希望做成一個表,然後排序數據。
  2. 粘貼位於電子表格的其他位置
  3. 由於您的單元格引用,值將發生變化,但我們不希望這樣做,因此請單擊彈出式窗口執行「特殊粘貼」並僅選擇粘貼「值」。
  4. 將你的新數據轉換成表格,並將你的生活分開!

希望你找到它的工作。問候。

0

不知道這是否會滿足所有,但我找到了一個簡單的解決方法,爲我解決了這個問題。將所有引用的單元格/公式移動到不同的工作表,以便不引用工作表中要排序的表中的任何單元格。如果你這樣做,你可以分類!

-1

將美元符號放在要保持不變的單元格的行和/或列的前面。

爲我修好了!

+1

OP說明了他爲什麼不願意使用美元符號的幾個原因。因此,這個答案沒有幫助。 –

0

對我來說,答案是將數據與它們之間的空白欄分成兩個網格。左邊的網格是您想要排序的數據,右邊的網格包含您想要計算的公式。在排序時,該公式只處理左側網格中的行中的數據,並且不會按排序混淆行引用。

0

最簡單的方法是使用OFFSET功能。因此,對於原始示例,公式將爲: =偏移量(c2,0,-1)* 1.33 =「使用當前單元格(c2)作爲參考點,獲取單元格在同一行上的內容,但將一列左邊(b2)並乘以1.33「

工程處理。

-1

簡單的解決方案 - 從Excel複製並粘貼到谷歌表。它將所有參考單元格複製爲絕對單元格,以便您可以從頭開始。然後將其作爲Excel網格進行排序和下載,然後重新格式化爲您的需求。

0

我使用「另存爲」將工作表複製到msdos文本格式的新文件。 這樣做會刪除公式,只用計算的值替換單元格內容。然後以製表符分隔的形式打開新文件,並在定義列後進行排序。我需要通過里程日誌的相關文本字符串(目的地)對計算值進行排序,以便我可以總結每個目的地的里程數。

日起結束距離目的地

其中第2行,並開始連續行是前一行結束和距離即將結束負開始。

0

創建兩個選項卡,一個與公式,然後粘貼鏈接整個表的第二個。第二個標籤在排序時應該沒有問題!

-1

我希望能在這裏找到原因,但我認爲答案比我們做得更簡單。

單元格應排序,而不管他們在工作簿中引用的頁面。導致此問題的原因是當前頁面上的任何頁面名稱引用。

EX:我在今天的工作簿中,並且正在另一頁上的銷售代表的數據中引用數據。

如果我的標準(代表姓名)在Today!C1(或$ C1,$ c $ 1),並且我嘗試排序,表單將無法識別該操作。但是,如果您刪除引用您所在頁面的名稱(真的是冗餘引用),則應該停止此問題。

所以SUMIFS( '銷售'!C1, '銷售'!A1,今天!C1)現在將SUMIFS( '銷售'!C1, '銷售'!A1,C1)

如果有人可以啓發爲什麼它以這種方式工作,這將是驚人的。

相關問題