Xác định số lượng chuỗi từ trong ô Excel với VBA


0

Tôi có một ô có dòng chữ - 'Tôi đã kiếm được 14 đô la hôm nay và 13 đô la ngày hôm qua'.
Sử dụng VBA trong Excel, làm cách nào để chuyển đổi nó thành - 'Tôi đã kiếm được 11,33 euro hôm nay và 10,52 euro ngày hôm qua'?

Ý tưởng: Dựa vào vị trí của các khoảng trắng trong văn bản, VBA có thể:

   a) identify the word order of each word within the cell [ex. '14' is word 
      3, 'dollars' is word 4] 
   b) identify whether the following word was 'dollars' and 
   c) if so, multiply the previous word times the conversion factor of .81. 

Tôi đang bị mắc kẹt về cách đưa điều này vào mã, tuy nhiên. Giúp đỡ, Superusers!


Điều này sẽ không khó thực hiện với một công thức. VBA có cần thiết không?
Bandersnatch

Một giải pháp công thức là được, có!
James Jordan

Câu trả lời:


1

Nếu bạn sử dụng bảng tra cứu tỷ lệ chuyển đổi, không cần VBA.

Nếu bạn định sử dụng VBA, tôi nghĩ sẽ "ưa thích nó" và giảm tỷ lệ chuyển đổi gần đây nhất. Hoặc bạn có thể làm điều đó bằng cách sử dụng một ngày cụ thể, tùy thuộc vào nơi bạn lấy dữ liệu của mình.

Làm việc thông qua điều này cũng sẽ mở rộng kiến ​​thức của bạn về các khả năng của VBA.

Đây là một ví dụ sử dụng dữ liệu gần đây nhất từ ​​một trang web cụ thể, nhưng có rất nhiều trên mạng. Đối với cái này, khóa api là miễn phí. Bạn sẽ phải áp dụng cho riêng bạn.

'Set reference to Microsoft winHTTP Services 5.0
'You'll need to install a JSON converter, or perhaps parse the csv output
'You could also parse this simple JSON using Regular Expressions
Option Explicit
Option Compare Text
Function ConvertInText(S As String) As String
    Dim V As Variant, W As Variant
    Dim DT As Date
    Dim I As Long

V = Split(S, " ")
For I = 0 To UBound(V)
    If V(I) = "Dollars" Then
        V(I) = "Euros"
        V(I - 1) = Format(USDtoEUR(CCur(V(I - 1))), "0.00")
    End If
Next I

ConvertInText = Join(V)
End Function

Private Function USDtoEUR(DOL As Currency) As Currency
    Const myAPI As String = "apikey=xxxxxxxxxxxxx"
    Const sURL As String = "https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=USD&to_currency=EUR&"
    Dim httpRequest As WinHttpRequest
    Dim strJSON As String, JSON As Object

Set httpRequest = New WinHttpRequest
With httpRequest
    .Open "Get", sURL & myAPI
    .Send
    .WaitForResponse
    strJSON = .ResponseText
End With
Set httpRequest = Nothing

Set JSON = parsejson(strJSON)

USDtoEUR = JSON("Realtime Currency Exchange Rate")("5. Exchange Rate") * DOL

End Function

nhập mô tả hình ảnh ở đây


Dẫn dắt tuyệt vời - Tôi sẽ giải quyết vấn đề này và sớm đánh dấu nếu đó là câu trả lời đầy đủ.
James Jordan

-2

Bạn có thể thử mã VBA này thông qua nút Lệnh hoặc dưới dạng Macro.

Private Sub CommandButton1_Click()

i = 8

str1 = Range("A2").Value

str1 = Mid(str1, 1, i - 1) & Replace(str1, "14 dollars today and 13 dollars", "11.33 euros today and 10.52 euros", Start:=i)

Range("A4").Value = str1


End Sub

nhập mô tả hình ảnh ở đây


1
và nếu A2 thay đổi thành "20 đô la" thì sao? OP đang tìm kiếm một phương pháp tính toán phổ quát.
user1016274

@ user1016274, không có nơi nào OP chỉ định cho loại giải pháp 'trình chuyển đổi phổ quát', chỉ có anh ta yêu cầu thay thế một phần của chuỗi văn bản bằng cách khác !!
Rajesh S
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.