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

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日: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 ・・・新着記事一覧を見る

数字(1~50)を丸付き数字に変換するVBA|VBA技術解説(2022-11-15)
TEXTAFTER関数(テキストの指定文字列より後ろの部分を返す)|エクセル入門(2022-11-14)
TEXTBEFORE関数(テキストの指定文字列より前の部分を返す)|エクセル入門(2022-11-14)
TEXTSPLIT関数(列と行の区切り記号で文字列を分割)|エクセル入門(2022-11-12)
LAMBDA以降の新関数はVBAで使えるか|VBA技術解説(2022-11-11)
WRAPCOLS関数(1次元配列を指定数の列で折り返す)|エクセル入門(2022-11-08)
WRAPROWS関数(1次元配列を指定数の行で折り返す)|エクセル入門(2022-11-08)
EXPAND関数(配列を指定された行と列に拡張する)|エクセル入門(2022-11-07)
TAKE関数(配列の先頭/末尾から指定行/列数を取得)|エクセル入門(2022-11-06)
DROP関数(配列の先頭/末尾から指定行/列数を除外)|エクセル入門(2022-11-06)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.エクセルVBAでのシート指定方法|VBA技術解説
9.マクロって何?VBAって何?|VBA入門
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




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


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



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