- ベストアンサー
文字を変換するマクロ
こんばんわ。エクセルのマクロについて教えてください。 A列に、「イ」「ロ」「ハ」「ニ」「ホ」という文字が入っており、 これをB列に、 イなら1、ロ→2、ハ→3、ニ→4、ホ→5 というな置換ルールで入力していくマクロは、 どのように組めばよいのでしょうか。 (マクロを組まずとも、 普通に置換を使えばできると思うのですが、 是非、マクロで組みたいので・・・) (A列)(B列) ロ 2 イ 1 ハ 3 ニ 4 イ 1 ホ 5 ↑ マクロを実行すると、 B列に変換された数値が入力される よろしくお願いします。
- みんなの回答 (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
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
例データ 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を使うのは勉強や趣味の問題だということ。
お礼
imogasiさん、こんばんわ。 おっしゃるとおり、関数で用が足りるのですが、 (マクロ初心者の身分でありながら、) いろいろなマクロを組み合わせて、複数の操作を 一度にやろうと思ったので・・・。 回答していただきありがとうございました。 活用させていただきます。
- WWolf
- ベストアンサー率26% (51/192)
こんばんは 下記を参考に思っているように変形して下さい。 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 興味を持ち聞いて覚える事は良い事ですが、自分で調べて考える 事も大事です。ネット上には数々の情報が溢れております。
お礼
WWolfさん、こんばんわ。 >興味を持ち聞いて覚える事は良い事ですが、自分で調べて考える 事も大事です。ネット上には数々の情報が溢れております。 ご指摘いただいたとおりです。反省です。 さっそくの回答ありがとうございました。 勉強させていただきます。
お礼
Wendy02さん、こんばんわ。 こちらにも回答していただいて、恐縮しております。 (お礼が遅れましてすみませんでした。) >スピードの点で、VB型よりも、Excel独自型のほうが速いのです。 初めてききました。 Wendy02さんが回答に寄せてくださるコードには いつもたいへん勉強させていただいております。 活用させていただきます。 ありがとうございました。