見出し画像

【Excelのタイパな話】 「タイピング筋」を鍛えて周りと差がつくタイパを実現しよう※タイピングゲームのコード付き

🎄こちらは、公式アドベントカレンダー2024_B 仕事術・キャリア・やってみた Day.10 の記事です。
公式アドベントカレンダー2024_A IT技術関連トピック も毎日記事を公開していますので、ぜひあわせてご覧下さい。

★ひとつ前のアドベントカレンダー記事
【イベントレポート】2024/11/7開催 第1回SaaS管理ツール「ワスレナイ」運用セミナー


この記事を読んでもらいたい人はこんな方です


  • ExcelのVBAに興味がある方

  • タイピングが好きな方

タイピングはとっても大事なPCスキル


こんにちは!私は(株)SHIFTで社内教育を中心とする業務を担当している根岸紳(ねぎし しん)と申します。

私は主に受入教育、つまり新卒や中途、さらにはIT業界未経験の受講生を対象に幅広いITスキルを教育しています。

そんな私から今日はタイピングの重要性について語りたいと思っています。

そのタイピングスキル、まだまだ磨けます!


弊社(株)SHIFTでは入社の条件にタイピングがあるほどタイピングのスキルを重視しています。なぜタイピングのスキルが重要かというと、従業員の生産性にかかわってくるからです。

この記事を読んでいるそこのあなたもe-typing 寿司打 などのタイピング力を測れるサービスを試してみたことがあるかもしれません。

私の実体験としては、はじめおもしろいと思って特訓していてもいつの間にかタイピングの特訓をやめてしまいます。なぜならある程度業務に困らないほどにはタイピングできているからです。

しかしたまにe-typing に再度挑戦してみると思わぬところで躓いて先に進めなくなるようなことが起こります。それはいったいなぜなのでしょう?

私たちの脳は常に退化する危険性がある!なぜなら


私たちの脳は常に退化してしまうリスクに晒されています。なぜかというとお気づきだと思いますが主にモバイル端末のせいです。

今の若者はマイクからの音声入力を駆使してテキストチャットをしているという記事も読んだことがあるくらい、スマホやタブレットの影響でキーボード入力を忘れてしまった、もしくはキーボード入力さえストレスに感じてしまう人が若者を中心に増えています。

確かに私たちはタッチパネルのモバイル端末のおかげでどこに行っても高速なデータ通信でSNSを通じて質の高い大量のコンテンツを視聴することができます。

さらに、身近なアプリのほとんどが昔はPC前提だったものがモバイル端末に対応するようになり、PCを使わなくても仕事ができてしまう方だっています。

そういった昨今の事情から、タイピングの重要性に今一度気づいてもらいたいのです。

Excel操作しながらタイピング力も鍛えられる


今回紹介するのはVBAのタイピングのゲームになります。これは1分間でいくつの単語をタイピングできたかを測ることができるゲームです。

英単語でタイピングできるようになっています。

なぜなら、英単語はタイピングのミスが発生しやすく、たとえばプログラミングのコーディングではタイプミスが発生すると、プログラムそのものがエラーになってしまうからです。

一般的なタイピングのゲームと違い自分の好きな単語で練習できる!


よく使われるタイピングのゲームは、決められた単語を使ってタイピングするしかありませんでしたが、このExcelを使ったタイピングのゲームはファイルを読み込むことで、好きな単語を登録して練習することができます。

早速Excelでタイピング力を測ってみよう!


こちらのVBAのコードを貼り付けて実行すればすぐにタイピングのゲームを楽しむことができます。制限時間は1分、あなたのスコアはどれくらいでしょうか?

Option Explicit

Private words() As String

Sub TypingGame()
    Dim word As String
    Dim newWord As String
    Dim userInput As String
    Dim score As Integer
    Dim timeLimit As Integer
    Dim startTime As Double
    Dim ws As Worksheet
    Dim historyRow As Integer
    Dim wordStartTime As Double
    Dim timeTaken As Double
    
    ' 単語リストの読み込み
    If Not LoadWordsFromFile() Then
        MsgBox "単語リストの読み込みに失敗しました。ゲームを終了します。", vbCritical
        Exit Sub
    End If
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    score = 0
    timeLimit = 60 ' ゲーム時間を60秒に設定
    historyRow = 6 ' 履歴の開始行
    
    ' 表示セルの設定
    ws.Range("A1").Value = "入力する単語:"
    ws.Range("B1").Value = ""
    ws.Range("A2").Value = "スコア:"
    ws.Range("B2").Value = score
    ws.Range("A3").Value = "残り時間:"
    
    ' 履歴のヘッダー
    ws.Range("A5").Value = "履歴:"
    ws.Range("A6").Value = "単語"
    ws.Range("B6").Value = "入力"
    ws.Range("C6").Value = "結果"
    ws.Range("D6").Value = "時間(秒)"
    
    startTime = Timer
    word = GetRandomWord()
    ws.Range("B1").Value = word
    
    Do While Timer - startTime < timeLimit
        ' 残り時間の更新
        ws.Range("B3").Value = Round(timeLimit - (Timer - startTime), 0) & " 秒"
        
        wordStartTime = Timer
        userInput = InputBox("セルB1に表示されている単語を入力してください:", "タイピングゲーム")
        timeTaken = Timer - wordStartTime
        
        ' 履歴の追加
        historyRow = historyRow + 1
        ws.Cells(historyRow, 1).Value = word
        ws.Cells(historyRow, 2).Value = userInput
        ws.Cells(historyRow, 4).Value = Round(timeTaken, 2)
        
        If userInput = "" Then
            ' ユーザーがキャンセルした場合、ゲームを終了
            ws.Cells(historyRow, 3).Value = "キャンセル"
            Exit Do
        ElseIf userInput = word Then
            score = score + 1
            ws.Range("B2").Value = score
            ws.Cells(historyRow, 3).Value = "正解"
            MsgBox "正解! スコア: " & score
            
            ' 現在の単語と異なる新しい単語を取得
            Do
                newWord = GetRandomWord()
            Loop While newWord = word
            
            word = newWord
            ws.Range("B1").Value = word
        Else
            ws.Cells(historyRow, 3).Value = "不正解"
            MsgBox "不正解。正しい単語は: " & word
        End If
        
        DoEvents ' Excelの表示を更新
    Loop
    
    MsgBox "ゲーム終了! 最終スコア: " & score
End Sub

Function LoadWordsFromFile() As Boolean
    Dim filePath As String
    Dim fileNum As Integer
    Dim word As String
    Dim wordCount As Long
    
    ' ファイル選択ダイアログを表示
    filePath = GetFilePath()
    If filePath = "" Then
        MsgBox "ファイルが選択されませんでした。", vbExclamation
        LoadWordsFromFile = False
        Exit Function
    End If
    
    ' ファイルを開く
    fileNum = FreeFile
    On Error GoTo ErrorHandler
    Open filePath For Input As fileNum
    
    ' 単語数をカウント
    wordCount = 0
    Do While Not EOF(fileNum)
        Line Input #fileNum, word
        wordCount = wordCount + 1
    Loop
    
    ' 配列のサイズを単語数に合わせて再設定
    ReDim words(0 To wordCount - 1)
    
    ' ファイルポインタを先頭に戻す
    Seek fileNum, 1
    
    ' 単語を配列に読み込む
    wordCount = 0
    Do While Not EOF(fileNum)
        Line Input #fileNum, word
        words(wordCount) = Trim(word)
        wordCount = wordCount + 1
    Loop
    
    ' ファイルを閉じる
    Close fileNum
    
    MsgBox wordCount & "個の単語を読み込みました。", vbInformation
    LoadWordsFromFile = True
    Exit Function
    
ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
    If fileNum > 0 Then Close fileNum
    LoadWordsFromFile = False
End Function

Function GetFilePath() As String
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "単語リストファイルを選択してください"
        .Filters.Clear
        .Filters.Add "テキストファイル", "*.txt"
        .AllowMultiSelect = False
        
        If .Show = -1 Then
            GetFilePath = .SelectedItems(1)
        Else
            GetFilePath = ""
        End If
    End With
End Function

Function GetRandomWord() As String
    If UBound(words) < 0 Then
        GetRandomWord = "単語が読み込まれていません"
    Else
        Randomize
        GetRandomWord = words(Int(Rnd * UBound(words)))
    End If
End Function

単語リストのサンプルはこちらです。単語が200あります。こちらを.txtの拡張子のテキストファイルとして保存してください(例えばinputs.txt)

ability
able
about
above
accept
according
account
across
act
action
activity
actually
add
address
administration
admit
adult
affect
after
again
against
age
agency
agent
ago
agree
agreement
ahead
air
all
allow
almost
alone
along
already
also
although
always
American
among
amount
analysis
and
animal
another
answer
any
anyone
anything
appear
apply
approach
area
argue
arm
around
arrive
art
article
artist
as
ask
assume
at
attack
attention
attorney
audience
author
authority
available
avoid
away
baby
back
bad
bag
ball
bank
bar
base
be
beat
beautiful
because
become
bed
before
begin
behavior
behind
believe
benefit
best
better
between
beyond
big
bill
billion
bit
black
blood
blue
board
body
book
born
both
box
boy
break
bring
brother
budget
build
building
business
but
buy
by
call
camera
campaign
can
cancer
candidate
capital
car
card
care
career
carry
case
catch
cause
cell
center
central
century
certain
certainly
chair
challenge
chance
change
character
charge
check
child
choice
choose
church
citizen
city
civil
claim
class
clear
clearly
close
coach
cold
collection
college
color
come
commercial
common
community
company
compare
computer
concern
condition
conference
Congress
consider
consumer
contain
continue
control
cost
could
country
couple
course
court
cover
create
crime
cultural
culture
cup
current
customer
cut
dark
data
daughter

安心してください。VBAがわからなかったとしても、これから実行方法をできるだけ丁寧に説明いたします。

実行方法


①開発タブを有効化する

Excelを開いて新しいブックを作成し、ALT+T+Oを順番に押してExcelのオプションから「リボンのユーザー設定」を選んで開発タブを有効化します。

②VBEエディタの起動

Excelのシートに戻りALT+F11キーを同時押しします。そうすると、Microsoft Visual Basic For Applicationsというタイトルのウィンドウが開きます。

③標準モジュールの挿入

挿入タブから標準モジュールを選択し空のモジュールを作成します。

④👆のコードを貼り付けてください

貼り付けたらCTRL+Sで保存してエディタを閉じましょう。

⑤ 実行

ALT+F8キーを同時押しして、作成したTypingGameを選んで実行しましょう。 1分間のタイピングゲームが始まります!実行ボタンを押す前に深呼吸を忘れずにw

⑥実行したらまずファイルを読み込む

上の方で紹介したinputs.txtを指定しましょう

B1セルの値と同じ値をダイアログに入力しましょう。1分間でいくつ入力できるでしょうか?

※注意:マクロ(VBA)のファイルは必ずxlsmのマクロ実行専用の拡張子で保存してください

今回作ったVBAはマクロと呼ばれています。マクロはマクロ実行ファイルでないと実行できません。保存するときはご注意ください。

おわりに


いかがでしたでしょうか?タイピングの正確性は年齢を重ねても改善し続けることができると思います。

日頃からタイピングを意識して生産性を上げて定時で帰りましょう!


執筆者プロフィール:根岸 紳
前職は年間研修実施回数15,000回超の研修会社の社内SE。
その時に培ったIT研修特にオンラインの新人IT研修の経験などから、IT教育に興味を持つようになり2020年10月から株式会社SHIFTにジョイン。
入社後は主にIT業界未経験者として採用された若手むけの研修を担当、その他に新卒研修、社外向けの研修ヒンシツ大学の講師を担当する。趣味は温泉と読書と筋トレと水泳とカラオケ

🎁次のアドベントカレンダーは
SHIFT発!障がい者雇用でデザイン業務をして気づいたこと


お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

この記事が参加している募集