1回しか使わない変数を消した
これ以上の短縮は無理かな?

Function kanacaps(s1) As String
  For i = 1 To Len(s1)
    c = Asc(Mid(s1, i)) - 167
    If 0 <= c And c < 9 Then Mid(s1, i) = Array("ア", "イ", "ウ", "エ", "オ", "ヤ", "ユ", "ヨ", "ツ")(c)
  Next
  kanacaps = s1
End Function