ツイッター出題回答
ツイッターのお題「君の名は?」

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2020-02-24 最終更新日:2020-02-24

ツイッターのお題「君の名は?」


ツイッターで出題されたVBAの問題をやってみました。
ツイッターのエクセルおよびVBA関係の人達の間で問題を出し合うという事が行われています。
今回のお題は以下になります。

ツイートへのリンク

お題:君の名は?

"-"ちゃんの名前がわかりません!
教えてください。
VBA マクロ ツイッターお題


ツイッターで回答したので、その記録です。


回答した名前を返す関数のVBAコード

Function 名前を教えて(ByVal aName As String) As String
  Dim arySymbolNum, arySymbol, aryName
  arySymbolNum = Array(65293, 45, 8208, 8722, 8210, 8212, 8211, 8213, 12540, 65392, 9472, 9473, 19968)
  aryName = Array("全角ハイフンマイナス", "半角ハイフンマイナス", "全角ハイフン", "全角マイナス", _
          "フィギュアダッシュ", "全角ダッシュ", "二分ダッシュ", "ホリゾンタルバー", _
          "全角長音", "半角長音", "罫線細", "罫線太", "いち")

  Dim i As Long
  arySymbol = ""
  For i = LBound(arySymbolNum) To UBound(arySymbolNum)
    arySymbol = arySymbol & ChrW(arySymbolNum(i))
  Next
  
  Dim ix As Long
  ix = InStr(arySymbol, aName)
  If ix = 0 Then
    名前を教えて = "知らん"
  Else
    名前を教えて = aryName(ix - 1)
  End If
End Function

この問題の難しいところは、これらの記号がVBAでは直接文字列として入力できない事にあります。
VBEの文字コードはShift_JISなので、先の文字の多くは入力しても"?"となってしまいます。
そこで、このVBAではUnicodeで入力して、ChrWで文字列に変換しています。
文字コードの詳細については以下を参照してください。
VBA技術解説マクロでShift_JIS文字コードか判定する
環境依存文字・機種依存文字をチェックしたいという話は時々聞くことなのですが、何をもってして判別するかという事が実はとても難しい問題になります、①②もIMEでは[環境依存]と表示されますが、通常これが問題になる事はないでしょう。そもそもコンピューターの中は2進数だけで表現されているもので、コンピューターの文字とは、

Byte配列と文字コード関数について
マクロVBAのデータ型にByte型がありますが、使う機会はかなり限られています。バイト型は、8ビット(1バイト)の変数で、0~255の範囲の単精度の正の数値が格納されます。1バイトで使う事もなくはありませんが、Byte型配列として使われることがしばしばあります。

文字コードから文字列に変換後は配列にしても良いのですが、
1文字判定に限定するならInStr関数で位置を取得したほうが早そうだと思い、文字列結合で処理してみました。
このあたりは、いろいろなやり方が考えられるところです。

テスト実行

まず、そもそもテストするための文字をVBAでは入れられないので、そこはシートにしました。

マクロ VBA ツイッターのお題

この文字を関数に渡して、返り値をイミディエイトに出力します。

Sub test()
  Dim i As Long
  For i = 1 To 14
    Debug.Print 名前を教えて(Cells(i, 1))
  Next
End Sub

マクロ VBA ツイッターのお題

一応、無事出力されているようです。



同じテーマ「ツイッター出題回答 」の記事

「VBAによる解析シリーズその2 カッコ」をやってみた
ツイッターで出されたVBAのお題(悪魔のCSV)をやってみた
「VBAで導関数を求めよ」ツイッターのお題をやってみた
ツイッターのお題「君の名は?」
ツイッターのお題「CSV編集」
アルファベットの26進(ツイッターお題)
ナンバープレート数字遊び:ツイッターお題
サロゲートペアに対応した自作関数(Len,Left,Mid,Right)
迷路にネコが挑戦したら、どうなるかな…
迷路ネコが影分身の術を体得したら…


新着記事NEW ・・・新着記事一覧を見る

WshNetwork(ネットワークドライブの割り当て等)|VBA技術解説(2025-04-09)
TRANSLATE関数(翻訳) DETECTLANGUAGE関数(言語識別)|エクセル入門(2025-04-08)
QRコード、バーコード作成の覚え書き|エクセル関数応用(2025-04-05)
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ