Giá trị chuỗi duy nhất trong phạm vi


0

Tôi có một số bảng tính nơi có số lượng lớn các ô về cơ bản đã được sử dụng cho văn bản miễn phí.

Có một bộ giá trị hữu hạn cho văn bản miễn phí này và hầu hết, nếu không phải tất cả lặp lại.

ví dụ.

   A        B       C       D
1  Monkey   Gorilla Cat     Dog
2  Dog      Cat     Gorilla Gorilla
3  Dog      Dog     Dog     Cat

Có thể có khoảng 50 hoặc hơn các giá trị ô khác nhau trải đều trên nhiều trang tính và hàng trăm hàng và cột.

Tôi cần phân tích dữ liệu này và đếm số lần xuất hiện, đây không phải là vấn đề ngoài việc lấy danh sách các giá trị duy nhất để bắt đầu và điều này đã đẩy tôi lên tường.

Cách tốt nhất để sản xuất danh sách này là gì

Vì vậy, từ trên chúng ta sẽ có

Monkey
Dog
Cat
Gorilla

Theo thứ tự các giải pháp ưa thích, vì điều này sẽ cần phải được thực hiện hàng tháng.

  1. Dựa trên công thức động
  2. Tập lệnh VB
  3. Khác (Lọc nâng cao hoặc các bước thủ công khác)

Tôi đã giải quyết điều này bằng cách xuất sang csv và viết một tập lệnh ruby, tuy nhiên những người khác có thể tìm thấy bất kỳ câu trả lời nào hữu ích. Tôi sẽ đảm bảo bất kỳ câu trả lời được xem xét.
Dean Smith

Câu trả lời:


0

Dựa trên một số mã bắt đầu được tìm thấy ở đây , CHỨC NĂNG XÁC ĐỊNH NGƯỜI DÙNG này sẽ thu thập tất cả các giá trị từ tất cả các ô trên tất cả các trang KHÁC so với mã bạn sử dụng chức năng này. Vì vậy, hãy rõ ràng, chèn một tờ giấy trắng vào sổ làm việc của bạn và chỉ sử dụng chức năng này trên trang tính đó.

= ĐỘC ĐÁO (ROW (A1))

Đặt công thức đó vào bất kỳ ô nào, sau đó sao chép xuống cho đến khi không còn giá trị nào xuất hiện nữa.

Trong cùng một sổ làm việc, đặt mã UDF này vào một mô-đun trống (Chèn> Mô-đun):

    Option Explicit

    Function UNIQUE(ItemNo As Long) As Variant
    Dim cl As Range, cUnique As New Collection, cValue As Variant
    Dim ws As Worksheet, Inputrange As Range
    Application.Volatile

    On Error Resume Next
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> Application.Caller.Parent.Name Then
            For Each cl In ws.UsedRange
                If cl.Formula <> "" Then cUnique.Add cl.Value, CStr(cl.Value)
            Next cl
        End If
    Next ws
    On Error GoTo 0

    UNIQUE = ""
    If ItemNo = 0 Then
        UNIQUE = cUnique.Count
    ElseIf ItemNo <= cUnique.Count Then
        UNIQUE = cUnique(ItemNo)
    End If

    End Function

0

Giả sử dữ liệu đủ nhỏ để vừa trong một cột trên bảng tính, tôi sẽ sao chép tất cả các cột vào một cột và tạo một bảng trụ đơn giản để đếm từng giá trị cho tôi.

Để chạy nó thường xuyên, tôi sẽ tạo VBA Macro, không phải VB Script. Quy trình dưới đây sẽ tự động thực hiện toàn bộ trong Excel 2010. (Một số mã bảng trục có thể khác trong các phiên bản trước của Excel.)

Sub CreateSummary()
' This macro assumes there is nothing else below the data being summarized
' and that there are no empty cells in any of the columns of data.
   Const FIELDNAME As String = "FreeText"
   Dim v As Variant
   Dim sht As Worksheet, rTop As Range, r As Range
   Dim pc As PivotCache, pt As PivotTable

   Set v = Application.InputBox("Select first cell of table to be summarized." _
                               , "Create Summary", Type:=8)
   If TypeName(v) = "Range" Then
      Set rTop = v
   Else
      Exit Sub
   End If
   Set sht = rTop.Parent

   ' create new summary worksheet
   sht.Copy
   ActiveSheet.Name = sht.Name & " Summary"
   Set sht = ActiveSheet
   Set rTop = sht.Range(rTop.Address)

   ' add header
   rTop.Rows.EntireRow.Insert
   With rTop.Offset(-1)
      .Value = FIELDNAME
      .Font.Bold = True
      .BorderAround XlLineStyle.xlContinuous
   End With

   ' Grab data from other columns and move it to first column
   Application.ScreenUpdating = False
   Application.StatusBar = "Converting table to one column ..."
   Set r = rTop.Offset(0, 1)
   Do While r.Value <> ""
      sht.Range(r, r.SpecialCells(xlCellTypeLastCell)).Cut
      rTop.End(xlDown).Offset(1).Select
      sht.Paste
      Set r = r.Offset(0, 1)
      Application.StatusBar = Application.StatusBar & "."
      DoEvents
   Loop
   rTop.Select
   Application.ScreenUpdating = True

   ' create PivotTable
   Application.ScreenUpdating = False
   Application.StatusBar = "Creating pivot table..."
   Set r = Range(rTop.Offset(-1), rTop.End(xlDown))
   With ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=r.Address)
      With .CreatePivotTable(TableDestination:=rTop.Offset(-1, 2))
         .AddDataField .PivotFields(FIELDNAME), "Count", xlCount
         .AddFields FIELDNAME, , , True
      End With
   End With
   Application.ScreenUpdating = True
   Application.StatusBar = False

   Set r = Nothing
   Set rTop = Nothing
   Set sht = Nothing

   MsgBox "Done creating summary."
End Sub
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.