返回列表 上一主題 發帖

[發問] 如何從兩欄中尋找出指定值

回復 1# luke
  1. Option Explicit
  2. Sub Ex()
  3.     Dim R As Range, W As String, Rng As Range
  4.     With ActiveSheet
  5.         W = Application.Phonetic(.[D3:E3])       '結合兩字串
  6.         For Each R In .Range("A:B").SpecialCells(xlCellTypeConstants).Rows '有資料的儲存格
  7.             If W = Application.Phonetic(R) Then
  8.                 If Rng Is Nothing Then
  9.                     Set Rng = R
  10.                 Else
  11.                     Set Rng = Union(Rng, R)
  12.                 End If
  13.             End If
  14.         Next
  15.         If Rng Is Nothing Then
  16.             MsgBox "查無 " & .[D3] & .[E3] & "資料"
  17.         Else
  18.             Rng.Select
  19.             MsgBox "共 " & Rng.Cells.Count / 2 & "筆 資料"
  20.         End If
  21.     End With
  22. End SubEnd Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 5# luke
  1. Private Sub Auto_open()   'Module1 於檔案開啟時自動執行的程式,要定義:"END"區塊位置
  2.     'Names.Add 活頁簿中定義新名稱
  3.         With sheet1.Range("A:A")
  4.         If Not .Find("END", lookat:=xlWhole) Is Nothing Then
  5.             .Replace "END", "=EX", xlWhole
  6.             '將"END"替代為公式,因為無效的公式,儲存格傳回錯誤值
  7.             With .SpecialCells(xlCellTypeFormulas, xlErrors)
  8.                 Names.Add "資料區", RefersTo:=.Parent.Range(.Address)
  9.                 .Value = "END"    '儲存格傳回錯誤值:回復原字串
  10.             End With
  11.             Names.Add "按鈕次數", 1           '按鈕1 第一個資料區
  12.         Else
  13.             Names.Add "按鈕次數", 0           '按鈕1
  14.         End If
  15.     End With
  16. End Sub
  17. Sub Ex()
  18.     Dim i As Integer, W As String, Rng As Range
  19.     If [按鈕次數] = 0 Then
  20.         MsgBox "資料區 沒有 END區塊 "
  21.         Exit Sub
  22.     End If
  23.     With ActiveSheet
  24.         W = Application.Phonetic(.[D3:E3])       '結合兩字串
  25.         'i = [資料區].Areas([按鈕次數]).Row       '第 i 個"END"資料區的列號
  26.         For i = [資料區].Areas([按鈕次數]).Row To [資料區].Areas([資料區].Areas.Count).Row
  27.             If W = Application.Phonetic(.Range("A:B").Rows(i)) Then
  28.                 Names.Add "按鈕次數", [按鈕次數] + 1   '
  29.                 Set Rng = .Range("A:B").Rows(i)
  30.                 Exit For   '找到第一個 離開迴圈
  31.             End If
  32.         Next
  33.         If Rng Is Nothing Then
  34.             MsgBox "查無 " & .[D3] & .[E3] & "資料"
  35.         Else
  36.             Rng.Select
  37.             MsgBox "找到 " & Rng.Cells(1, 1).Address(0, 0)
  38.         End If
  39.     End With
  40.      If [資料區].Areas.Count = [按鈕次數] Then Names.Add "按鈕次數", 1     '[按鈕次數] 回到第一次
  41. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 6# luke
果想跳過第1個有「END」資料區
只有1個「END」資料區嗎??????
請將問題完整的提出來!!!
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2013-5-5 21:12 編輯

回復 8# luke
不好意思,看了兩天,你說的很詳細但還是看不懂
可以附上檔案的4個工作表內容是
1 [SHEET1 A]工作表是  文字檔A型
2 [SHEET1 B]工作表是  文字檔B型
3 [A WORK]工作表是 :  文字檔A型 貼上[A WORK]工作表 後 執行 複製 插入 的範例
4 [B WORK]工作表是 :   文字檔B型 貼上[A WORK]工作表 後 執行 刪除 插入 的範例
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 10# luke
執行 [寫入Work]前須先執行 [Link] 確定工作表的超連結.
  1. Sub Link()
  2.     Dim D As Object, R As Integer, C As Range, A As Range, Ky As Variant
  3.     Set D = CreateObject("Scripting.Dictionary")
  4.     With Sheets("sheet1")
  5.         Set A = .[A:A].Find([J1], lookat:=xlWhole)
  6.         If [J1] = "" Then Exit Sub
  7.         For Each C In .Range(A, .[A65536].End(xlUp))
  8.             If C & C.Offset(, 1) Like .[I3] & .[J3] Then
  9.                 D(C.Value & D.Count) = C.Resize(, 2).Address(0, 0)
  10.             End If
  11.         Next
  12.         [L:N].Clear
  13.         If D.Count = 0 Then MsgBox "無符合資料": Exit Sub
  14.         For Each Ky In D.keys
  15.             R = R + 1
  16.             .Cells(R, "L") = .Range(D(Ky)).Cells(1, 1)
  17.             .Cells(R, "M") = .Range(D(Ky)).Cells(1, 2)
  18.             .Hyperlinks.Add Anchor:=.Cells(R, "N"), Address:="", SubAddress:=D(Ky)
  19.         Next
  20.     End With
  21.     Range("J3").Select
  22. End Sub
  23. Sub 寫入Work()
  24.     Dim Rng(1 To 3) As Range, E As Variant, R As Range
  25.     Set Rng(1) = Sheets("Work").UsedRange.Range("a:a")
  26.     For Each E In Sheets("Sheet1").Hyperlinks                 '物件集合:工作表的超連結。
  27.         Set Rng(2) = Sheets("Sheet1").Range(E.SubAddress)     '制定: 超連結的儲存格
  28.         For Each R In Rng(1)
  29.             If Rng(2).Cells(1) & Rng(2).Cells(1, 2) = R & R.Cells(1, 2) Then '與超連結儲存格的內容相同
  30.                 Set Rng(3) = R.CurrentRegion                               '範圍只有AB兩欄
  31.                 'CurrentRegion 屬性 傳回 Range 物件,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀。
  32.                 Rng(2).CurrentRegion.Copy                                    '複製:超連結儲存格的連續範圍
  33.                 Rng(3)(1).Insert Shift:=xlDown                               '插入貼上:超連結儲存格的連續範圍
  34.                 'Rng(3)(1) =>  Rng(3).Cells(1, 1)                            '範圍的第一個楚墫格
  35.                 Set Rng(3) = Rng(3).Range("A1:C" & Rng(3).Rows.Count)        '多增加一欄保持資料的完整性 (C欄也要刪除)
  36.                 Rng(3).Delete Shift:=xlUp                                    '刪除: 下方儲存格上移
  37.                 Exit For
  38.             End If
  39.         Next
  40.     Next
  41.     Set Rng(1) = Sheets("Sheet1").[A:A].Find("END", lookat:=xlWhole)   '[SHEET1]A欄中尋找: "END"
  42.     Set Rng(1) = Sheets("Sheet1").Range("A1:C" & Rng(1).Row)           '制定範圍: A欄到C欄 "END"的列號
  43.     Rng(1).Copy Sheets("Work").Cells(Sheets("Work").Rows.Count, 1).End(xlUp)
  44.     MsgBox "完成"
  45. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題