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

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のお題をやってみました。もとネタはこちら、VBAによる解析シリーズその2カッコ 関連ツイート なかなか楽しかったので、VBAコードを掲載しておきます。まず最初にお題から受ける印象は、再帰処理を行うという事になると思います。
ツイッターで出されたVBAのお題(悪魔のCSV)をやってみた
ツイッターで出題されたVBAの問題をやってみました。ツイッターのエクセルおよびVBA関係の人達の間では、いろいろと面白く勉強になる問題を出し合うという事が行われています。フォローして参加してみると楽しいと思いますよ。
「VBAで導関数を求めよ」ツイッターのお題をやってみた
ツイッターで出題されたVBAの問題をやってみました。ツイッターのエクセルおよびVBA関係の人達の間で問題を出し合うという事が行われています。そんな中、現役高校生と思われる方からVBAの問題が出されました。
ツイッターのお題「君の名は?」
ツイッターのお題「CSV編集」
ツイッターに出されたお題をやってみるシリーズです。今回のお題は、CSV編集です。ツイートへのリンク https://twitter.com/i/status/1253307552802074625 VBSにしてみた VBAでも良いのですが、たまにはVBSも良いかと思い作ってみました。
アルファベットの26進(ツイッターお題)
ツイッターで出されたお題をVBAで回答したものです。AAAの値をAAB,AAC...AAZまでインクリメントし、次のアルファベットを桁上げし、ABA,ABC?ZZZまで計算するコードを書きたい。お題のツイート https://twitter.com/KotorinChunChun/status/1262026213…
ナンバープレート数字遊び:ツイッターお題
ツイッターで出されたお題をVBAで回答したものです。車のナンバープレートの4つの数字でやったりするお遊びです。ナンバーの4つの数字を四則演算で10にするというものです・【問題】 1-9までの数字が4つ与えられます それらを加減乗除を用いて10を作りたい その解答を全て列挙するプログラムを作成しなさい (解答なしの場…
サロゲートペアに対応した自作関数(Len,Left,Mid,Right)
ツイッターで、サロゲートペアに対応した文字列関数の話しになりました。シート関数のLEFTとRIGHTはサロゲートペアに対応しているようですが、MIDとLENは対応していません。そして、VBA関数の、Len,Left,Mid,Right、これらは一切サロゲートペアに対応していません。
迷路にネコが挑戦したら、どうなるかな…
ツイッターで迷路を解くVBAが流行っていたので、それならと言う事で私も参加してみることに… 迷路の解き方は定番の方法がありますが、それらはツイッターの他の人に任せるとして、ちょっと独自の挑戦をしてみました。※これはジョークソフトです。続編もあります。
迷路ネコが影分身の術を体得したら…
ツイッターで迷路を解くVBAが流行っていたので、ネコを迷路に挑戦させてみた… 迷路にネコが挑戦したら、どうなるかな… さすがに壁登りで迷路クリアは、、、ということで、ちゃんと迷路を攻略するようにネコを調教しました。ツイート 「壁登りは反則だろ」という厳しいご意見があったりなかったり… まうにゃんは厳しい躾けの末、


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

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




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


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



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