- ベストアンサー
VBAプログラミングについて教えてください
a→1、b→2、c→3、……というふうに読んで、例えば a 1 f 6 h 8 g 7 e 5 b 2 f 6 c 3 d 4 a 1 エクセル上に左のアルファベットの列が与えられていて、それを 右のように対応した数字の列を横に書き表したいです。 初心者でして、わかりそうでわかりませんでした。 教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
kokoichikoさんが学生さんで、 情報処理の基礎を学ばれて、内部コードが何たるかを理解されていて、 先生が内部コードの規則性を考えて貰うための問題であるのなら、 #1さん、#2さんの回答で大正解なんですが、 社会人で実務でエクセルを使おうとしている方でしたら、 はて、初心者と言われている方に内部codeの意味が分かるのかな? -96 の意味が分かるのかな? a→1、b→2、c→3、……は単なる例であって 本当は りんご→100円、みかん→30円、バナナ→80円・・・ では無いのかな?と思うのは考え過ぎなのかな? いやいや、初心者だから りんご→100円、みかん→30円、バナナ→80円・・・を a→1、b→2、c→3、……と例えることはできない。 の考えもあり得るな、、、うぅむ! もっと応用的な実社会でも使えるような質問の意味合いがあるような気がします。 と勝手に問題をすり替えて、勝手に割り込んでしまいます。 問題をそのまま回答例にします。 a→1、b→2、c→3、……を少し離れた所にテーブルを作ります。 D1セルにa E1セルに1 D2セルにb E2セルに2 D3セルにc E3セルに3 D4セルにd E4セルに4 ・ ・ D26セルにz E26セルに26 とテーブルを作っておきます。 で、B1セルに、=VLOOKUP(A1,$D$1:$E$26,2,FALSE) B列を下へコピー これはエラー処理をしていませんので、エラー処理を入れるなら、 =IF(COUNTIF($D$1:$E$26,A1)=0,"",VLOOKUP(A1,$D$1:$E$26,2,FALSE)) B列を下へコピー 余計なお世話でした。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test01() d = Range("A65536").End(xlUp).Row For i = 1 To d Cells(i, "B") = Asc(Cells(i, "A")) - 96 Next End Sub 既出回答にモご指摘の通り ほんとにA列は アルファベットで、小文字のa、b、c・・が入っていること それ以外の文字は入ってないこと 1文字であること などに限り上記コードは有効です。 ーー 普通のニーズではこういう例はほとんど無いと思いますので、質問の 説明の例がまずいのではと思います。 ーー VLOOKUP関数を使う例では 例えばF1:G5に 東京 1 名古屋 2 大阪 3 神戸 4 福岡 5 と作って Sub test02() d = Range("A65536").End(xlUp).Row For i = 1 To d Cells(i, "B") = WorksheetFunction.VLookup(Cells(i, "A"), Range("F1:G5"), 2, False) Next End Sub ーー 例データ A列 B列(結果) 名古屋 2 神戸 4 東京 1 ーー 検索表 F1:G5 東京 1 名古屋 2 大阪 3 神戸 4 福岡 5
お礼
ほんとうはabc…ではありません。説明が悪かったです。 しかし、内部コードの勉強もできてよかったです。 VLookupのプログラムまで書いてくださってありがとうございました。 参考にします
- midly
- ベストアンサー率40% (24/59)
#1さんに補足すると 例えばアルファベットの列が100行ある場合は 最初に、B1に"=CODE(A1)-96"を書いておいてから B1をctrl-Cして B2からB100までを範囲指定してctrl-Vすると 100行分一気に記入できます。
- t-sazen
- ベストアンサー率42% (37/87)
簡単ですが、例です。 A列にアルファベット(小文字)を書き、B列に指定の数値に置き換えるとすると、B列に「=CODE(A1)-96」を書けばOKです。 勿論行数が増えるにしたがって、=CODE(A2)-96、=CODE(A3)-96・・と変わる事をお忘れなく。
お礼
tinu2000さんの余計なお世話のおがげで理解することができました。 VLOOKUPは便利ですね。どうもありがとうございました。