返回列表 上一主題 發帖

有請解答! 如何製作此一欄位??

本帖最後由 luhpro 於 2010-7-27 19:33 編輯

回復 9# cheng17875

這個主題中的程式是必須有同時在 Windows 上執行 "精x的股票看盤軟體" 才能看到實際結果,
附檔是我在公司時參照第一帖圖示與上方 6# jackdream 大大的程式片段做出來的,
雖然不是用你後來上傳的檔案做例子測的,
應該仍然還是可以正常使用才是.

'===== 以下程式放在 Sheet1 =====
Private Sub Worksheet_Change(ByVal Target As Range)

  Dim iI As Integer, iRow As Integer


  iRow = ActiveSheet.Cells(2, 2).End(xlDown).Row
   
  For iI = 2 To iRow
    If Not Intersect(Target, ActiveSheet.Cells(iI, 1)) Is Nothing Then '若有更改 Ax 內容

        If Not Cells(Target.Row, Target.Column) = Empty Then

        Call Change(iI)

        End If

    End If
  Next iI

End Sub


'===== 以下程式放在 Module1 =====
Sub Change(iI)

  Dim iJ As Integer, iCol As Integer, iRow As Integer
  Dim sStr As String


  With Sheets(1)
    iCol = .Cells(2, 1).End(xlToRight).Column
   
      For iJ = 2 To iCol
        sStr = .Cells(iI, iJ).Formula
        sStr = Left(sStr, 12) & .Cells(iI, 1).Value & Mid(sStr, 17, Len(sStr) - 16)
        .Cells(iI, iJ).Formula = sStr
      Next iJ
  End With

End Sub

Book_a.zip (10.06 KB)

TOP

本帖最後由 luhpro 於 2010-7-30 21:14 編輯

回復 17# cheng17875

第 1 個問題我也有發現到,
主要是因為股票代號的字數並非固定為 4 碼,
所以要改成找關鍵字 "`",
部分程式修改如下請自行帶入 :
        dim iNum%

        sStr = .Cells(iI, iJ).Formula
        iNum = InStr(1, sStr, "`", 1)
        sStr = Left(sStr, 12) & .Cells(iI, 1).Value & Mid(sStr, iNum, Len(sStr) - iNum + 1)
        .Cells(iI, iJ).Formula = sStr

至於公式的修改方式主要就是取代掉 "股票代號" 的部份,
例如 精x 的公式 :
股票名稱  =eMidst|SW!'2330`1019'
股價          =eMidst|SW!'2330`205'
就是用 left()抓 2330 前面的字串 + 新的股票代號 + 2330 的 "0" 後面那個字 "`" 開始的字串來取代原公式即可.

而那另一個軟體的公式相同的以 2388 為基礎做字串分拆,
後面那個字串就抓 "8" 後面那個 "." 開始的字串就可以了.

當然還有一個方法就是不管原儲存格的內容,
直接將公式內的文字 Copy 下來分拆,
再將字串組合後丟給原儲存格就可以了,
例如 精x 的改用 :
        sStr = "=eMidst|SW!'" & .Cells(iI, 1).Value  & "`1019'"
        .Cells(iI, iJ).Formula = sStr
缺點是公式已經定死在程式中,
若儲存格互相對調位置也必須改程式,
彈性較小.

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題