![見出し画像](https://assets.st-note.com/production/uploads/images/68209229/rectangle_large_type_2_ca950ec2804c17fc02578cfeabcc0e2a.jpg?width=1200)
【VBA】タイピング時の左手と右手の使用回数を求める関数
初心者向け #VBAクイズ
— としじ 🚗³₃Boooon!!♡ (@toshi81350036) December 14, 2021
任意の英単語が与えられたときに、その単語を(一般的に正しいとされているタイピング方法で)左手および右手で入力する回数を求めれるようにしてください
細かいルールは自由で←
例:
sample -> 3,3
baseball -> 6,2
PowerShell -> 5,5
Power Apps -> 5,4
Option Explicit
Function get_左手と右手の使用回数_str(argString)
Dim str_L, str_R, trgString, i, s, cnt_L, cnt_R
str_L = "qwertasdfgzxcvb"
str_R = "yuiophjklnm"
trgString = StrConv(argString, vbLowerCase + vbNarrow)
cnt_L = 0
cnt_R = 0
For i = 1 To Len(trgString)
s = Mid(trgString, i, 1)
If str_L Like "*" & s & "*" Then cnt_L = cnt_L + 1
If str_R Like "*" & s & "*" Then cnt_R = cnt_R + 1
Next
get_左手と右手の使用回数_str = cnt_L & "," & cnt_R
End Function
Function get_左手と右手の使用回数_arr(argString)
Dim arr_L, arr_R, trgString, i, s, cnt_L, cnt_R
arr_L = Split("q,w,e,r,t,a,s,d,f,g,z,x,c,v,b", ",")
arr_R = Split("y,u,i,o,p,h,j,k,l,n,m", ",")
trgString = StrConv(argString, vbLowerCase + vbNarrow)
cnt_L = 0
cnt_R = 0
For i = 1 To Len(trgString)
s = Mid(trgString, i, 1)
If UBound(Filter(arr_L, s)) > -1 Then cnt_L = cnt_L + 1
If UBound(Filter(arr_R, s)) > -1 Then cnt_R = cnt_R + 1
Next
get_左手と右手の使用回数_arr = cnt_L & "," & cnt_R
End Function
Function get_左手と右手の使用回数_dic(argString)
Dim dic_L, dic_R, trgString, i, s, cnt_L, cnt_R, e
Set dic_L = CreateObject("Scripting.Dictionary")
Set dic_R = CreateObject("Scripting.Dictionary")
For Each e In Split("q,w,e,r,t,a,s,d,f,g,z,x,c,v,b", ",")
dic_L.Add e, False
Next
For Each e In Split("y,u,i,o,p,h,j,k,l,n,m", ",")
dic_R.Add e, False
Next
trgString = StrConv(argString, vbLowerCase + vbNarrow)
cnt_L = 0
cnt_R = 0
For i = 1 To Len(trgString)
s = Mid(trgString, i, 1)
If dic_L.Exists(s) Then cnt_L = cnt_L + 1
If dic_R.Exists(s) Then cnt_R = cnt_R + 1
Next
get_左手と右手の使用回数_dic = cnt_L & "," & cnt_R
End Function
Sub Main()
Debug.Print get_左手と右手の使用回数_str("sample")
Debug.Print get_左手と右手の使用回数_str("baseball")
Debug.Print get_左手と右手の使用回数_str("PowerShell")
Debug.Print get_左手と右手の使用回数_str("Power Apps")
Debug.Print
Debug.Print get_左手と右手の使用回数_arr("sample")
Debug.Print get_左手と右手の使用回数_arr("baseball")
Debug.Print get_左手と右手の使用回数_arr("PowerShell")
Debug.Print get_左手と右手の使用回数_arr("Power Apps")
Debug.Print
Debug.Print get_左手と右手の使用回数_dic("sample")
Debug.Print get_左手と右手の使用回数_dic("baseball")
Debug.Print get_左手と右手の使用回数_dic("PowerShell")
Debug.Print get_左手と右手の使用回数_dic("Power Apps")
Debug.Print
End Sub
この記事が気に入ったらサポートをしてみませんか?