• ベストアンサー

文字を変換するマクロ

こんばんわ。エクセルのマクロについて教えてください。 A列に、「イ」「ロ」「ハ」「ニ」「ホ」という文字が入っており、 これをB列に、 イなら1、ロ→2、ハ→3、ニ→4、ホ→5 というな置換ルールで入力していくマクロは、 どのように組めばよいのでしょうか。 (マクロを組まずとも、  普通に置換を使えばできると思うのですが、  是非、マクロで組みたいので・・・) (A列)(B列)  ロ   2  イ   1  ハ   3  ニ   4  イ   1  ホ   5      ↑   マクロを実行すると、   B列に変換された数値が入力される よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 こちらの回答も寄せておきます。 いろんなやり方はありますが、以下のような私の書いた内容は、癖の強い種類のものかもしれません。ただ、実際の私のコードは、以下のような使い方をしている、という実例です。以下のようなコードが、理由なく「嫌だな」と思う人がいるはずです。それは、VB型ではないExcel独特のコードであることだからです。VB型に書いたほうが、コード的にはきれいです。しかし、スピードの点で、VB型よりも、Excel独自型のほうが速いのです。 Public 定数を用いることで、どこのモジュールでも、この定数を使うことが可能になります。 Match関数で、配列変数の中の順番を探しています。 ------------------------------------------------- '標準モジュールに設定してください。 'Option Explicit Public Const CHR As String = "イ,ロ,ハ,ニ,ホ,ヘ,ト" '下は二桁でも可能だけれども、区切りは、上にあわせること Public Const NUM As String = "1,2,3,4,5,6,7" Sub CharAlternative()   Dim ArChr As Variant   Dim ArNum As Variant   Dim c As Variant   Dim ret As Long   ArChr = Split(CHR, ",")   ArNum = Split(NUM, ",")   Application.ScreenUpdating = False   For Each c In Range("A1", Range("A65536").End(xlUp))     On Error Resume Next     ret = 0     ret = Application.WorksheetFunction.Match(c.Value, ArChr, 0)     On Error GoTo 0     If ret > 0 Then       c.Offset(, 1).Value = ArNum(ret - 1)     End If   Next c   Application.ScreenUpdating = True End Sub

pgn
質問者

お礼

Wendy02さん、こんばんわ。 こちらにも回答していただいて、恐縮しております。 (お礼が遅れましてすみませんでした。) >スピードの点で、VB型よりも、Excel独自型のほうが速いのです。 初めてききました。 Wendy02さんが回答に寄せてくださるコードには いつもたいへん勉強させていただいております。 活用させていただきます。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

例データ A列   B列(実行結果) 山田 5 池田 3 近藤 2 鈴木 4 上野 1 ーー 対応表 D1:E5 近藤 2 池田 3 上野 1 山田 5 鈴木 4 ーー Sub test02() d = Range("A65536").End(xlUp).Row For i = 1 To d Cells(i, "B") = Application.WorksheetFunction.VLookup(Cells(i, "A"), Range("d1:E5"), 2, False) Next i End Sub ーー (2)IF,Caseで対応表を全行判別 (2)FINDメソッド法 (3)関数法 上記は(3)。コード数が少ない。 ということは、関数で用がたり、VBAを使うのは勉強や趣味の問題だということ。

pgn
質問者

お礼

imogasiさん、こんばんわ。 おっしゃるとおり、関数で用が足りるのですが、 (マクロ初心者の身分でありながら、) いろいろなマクロを組み合わせて、複数の操作を 一度にやろうと思ったので・・・。 回答していただきありがとうございました。 活用させていただきます。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.1

こんばんは 下記を参考に思っているように変形して下さい。 sub sample() with worksheets(1) LR=.range("A65536").end(xlup).row for i=1 to LR a=.cells(i,1).value select case a case "イ" B=1 case "ロ" B=2 case "ハ" B=3 case else msgbox "対応できません" end select end with end sub 興味を持ち聞いて覚える事は良い事ですが、自分で調べて考える 事も大事です。ネット上には数々の情報が溢れております。

pgn
質問者

お礼

WWolfさん、こんばんわ。 >興味を持ち聞いて覚える事は良い事ですが、自分で調べて考える 事も大事です。ネット上には数々の情報が溢れております。 ご指摘いただいたとおりです。反省です。 さっそくの回答ありがとうございました。 勉強させていただきます。

関連するQ&A