ฉันสามารถใช้สูตร excel เพื่อแยกตำแหน่งลิงก์ของไฮเปอร์ลิงก์ในเซลล์ได้หรือไม่


46

ฉันมีสเปรดชีตที่มีเซลล์จำนวนมากที่มีไฮเปอร์ลิงก์พร้อมข้อความแสดงต่างจากตำแหน่งไฮเปอร์ลิงก์

เช่น:

ตำแหน่งของเซลล์: A1

display text = "ข้อมูลไซต์"

ตำแหน่งเชื่อมโยงหลายมิติ = " http://www.mylocation.com "

มีสูตร excel ที่อนุญาตให้ฉันเข้าถึงสตริงข้อความของตำแหน่งเชื่อมโยงหลายมิติหรือไม่

เป็นการดีที่มันจะมีลักษณะเช่นนี้:

สูตร (A1) = " http://www.mylocation.com "


1
การเชื่อมโยงหลายมิติตามจริง (แทรก >> การเชื่อมโยงหลายมิติ) หรือการเชื่อมโยงหลายมิติโดยใช้=HYPERLINK()?

ต้องเป็นสูตรหรือไม่? มีโซลูชั่น VBA มากมาย
CharlieRB

คำตอบ:


53

คุณสามารถใช้มาโคร:

  • เปิดสมุดงานใหม่
  • เข้าสู่ VBA (กด Alt + F11)
  • แทรกโมดูลใหม่ (แทรก> โมดูล)
  • คัดลอกและวางฟังก์ชันผู้ใช้ Excel ที่กำหนดด้านล่าง
  • ออกจาก VBA (กด Alt + Q)
  • ใช้ไวยากรณ์นี้สำหรับฟังก์ชัน Excel ที่กำหนดเองนี้: = GetURL (เซลล์, [default_value])

     Function GetURL(cell As range, Optional default_value As Variant)
     'Lists the Hyperlink Address for a Given Cell
     'If cell does not contain a hyperlink, return default_value
          If (cell.range("A1").Hyperlinks.Count <> 1) Then
              GetURL = default_value
          Else
              GetURL = cell.range("A1").Hyperlinks(1).Address
          End If
    End Function
    

4
@igor ทำไมคุณถึงใช้ "range (" a1 ") ใน cell.range (" A1 ") Hyperlinks.Count และ cell.range (" A1 ") การเชื่อมโยงหลายมิติ (1) ที่อยู่ฉันคัดลอกมาโครของคุณแล้ว นำออก (-> cell.hyperlinks.count และ cell.hyperlinks (1) .ress) และทำงานได้อย่างสมบูรณ์แบบฉันอยากรู้อยากเห็นเกี่ยวกับวัตถุประสงค์ของ "range (" a1 ") ที่นี่
PO

สิ่งนี้ถือว่าเป็นหากมีหลายลิงค์ภายในไฮเปอร์ลิงก์ มันเป็นแค่ความคิดมันยอดเยี่ยมที่ได้ผลกับการปรับค่าของคุณ :)
Igor O

ถ้าเชื่อมโยงหลายมิติของคุณมีส่วนเอกสาร (เช่น#something) ที่ถูกเก็บไว้ในSubAddressดังนั้นคุณจะต้อง concatenate Address, และ"#" SubAddress
gilly3

เนื่องจากพารามิเตอร์cellเป็นวัตถุช่วงจึงสามารถมีมากกว่าหนึ่งเซลล์ อาจจะเขียนใหม่เป็นRange("A1") มันสั่งให้ฟังก์ชั่นที่จะต้องพิจารณาเฉพาะเซลล์แรกในพารามิเตอร์Cells(1) cell
ChrisB

19

ฉันต้องการแยกที่อยู่ออกจากค่าของเซลล์เดียวดังนั้นฉันจึงพบว่าฟังก์ชั่นเล็ก ๆ นี้มีประโยชน์:

แทนที่จะเป็นมาโคร "แรงเดรัจฉาน" คุณสามารถสร้างฟังก์ชันที่ผู้ใช้กำหนดเองซึ่งจะแยกและส่งคืน URL สำหรับไฮเปอร์ลิงก์ใด ๆ ที่มันชี้ไป:

Function GetURL(rng As Range) As String
     On Error Resume Next
     GetURL = rng.Hyperlinks(1).Address 
End Function

ในกรณีนี้คุณสามารถวางไว้ในตำแหน่งที่คุณต้องการ ตัวอย่างเช่นหากคุณต้องการ URL จากไฮเปอร์ลิงก์ใน A1 ที่จะแสดงในเซลล์ C25 จากนั้นในเซลล์ C25 คุณจะต้องป้อนสูตรต่อไปนี้:

= getURL (A1)

http://excel.tips.net/T003281_Extracting_URLs_from_Hyperlinks.html


2
function EXTRACT_URL(input) {

  var range = SpreadsheetApp.getActiveSheet().getRange(input);
  var re = /^.+?\(\"(.+?)\",.+?$/;
  if (input.indexOf(':') != -1) {
    var formulas = range.getFormulas();
    for (var i in formulas) {
      for (var j in formulas[i]) {
        formulas[i][j] = formulas[i][j].replace(re, "$1");
      }
    }
    return formulas;
  } else {
    return range.getFormula().replace(re, "$1");
  }

}

ในส่วนอื่นที่ไม่ใช้เครื่องหมายอัญประกาศในการอ้างอิงเซลล์โดยใช้สิ่งนี้ในสเปรดชีต = EXTRACT_URL (ADDRESS (แถว (A4), 1,4)) มิฉะนั้นคุณต้องฮาร์ดโค้ดอ้างอิงช่วง จากนั้นคุณสามารถคัดลอกฟังก์ชันนี้จากเซลล์หนึ่งไปอีกเซลล์หนึ่ง
Walker Rowe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.