- ベストアンサー
エクセル・マクロを使って・・
1列目に漢字の名前を入力しておき、 これをみて愛情⇒1、恋愛⇒2、学校⇒3・・ といった変換後の数字を2列目に入れるプログラムを作りたいと思っています。 マクロ自体ほとんど分からない(使ったことはある)のですが、 このようなプログラムの書き方を教えてください。 あと、参考になる文献があれば、文献のみでも教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1の者です。もう正解が出てしまったようですね。 でも“お礼”のところに >5こだけ実行するように指定する方法があれば教えてください とあるので、何も書かないと無視したみたいで悪いので、 別の方法(といってもほとんど#3の方と同じですが)を書いておきます。 Sub test01() Dim a, i, r As Long r = ActiveSheet.Rows.Count Cells(r, 1).End(xlUp).Select a = ActiveCell.Row For i = 1 To a Select Case Cells(i, 1) Case "愛情" Cells(i, 2) = 1 Case "恋愛" Cells(i, 2) = 2 Case "学校" Cells(i, 2) = 3 Case Else End Select Next i End Sub CurrentRegionだとデータに空欄(隙間)が無くつながっている場合ですと問題ないんですが、もし途中に空欄のセルがあるとそこまでの行カウントになってしまいます。 r = ActiveSheet.Rows.Count Cells(r, 1).End(xlUp).Select というのはrはこのシートの行数=65536 そこ(セル(A,65536))から上に上がってきてデータのある行を選ぶ。 つまり途中に空白セルがあっても最終行まで実行できます。 試してみて下さい。 もちろん最終行が空白セルだったらダメですけどね。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#2の者です。 >このやりかた、よく分からないです・ 極く簡単です。(1)一箇所だけ関数式=IF(A1="","",VLOOKUP(A1,$D$1:$E$3,2,FALSE)) を回答からコピーしてB1に貼り付ければ良いです。 (2)その後B1セルをポイントして右下に出る+を 最下行まで引っ張れば、それで終わりです。 Vlookup関数になれなくて使うのがおっくうなのかと思いますが非常によく使われる、便利なものですので使ってみてください。 >データ数が多いので 最下行まで引っ張るのが少し手間だけです。 (関数式のメリット) ・VBAよりプログラムを組む手間がなく簡単 ・A列にデータを入れるとして、入力すると結果が直ぐ B列に出る。目(サイト)チェックに適している。 ・VBAだとA列に全て入力し終わって、プログラムを実行 しないとB列に結果が表示されない。表示されてから 入力データ原書とチェックするのも手間。 (VBA) >データ数が毎回かわる場合 >例えば、一列目に入れたのが5こだった場合に、5こだけ実行するように 下記に盛りこんでいます(下記CurrentRegion部分)。 エラー表示をしています。 F列に抜き出しています。 Sub test01() k = 1 a = Range("a1").CurrentRegion.Rows.Count For i = 1 To a Select Case Cells(i, 1) Case "愛情" Cells(i, 2) = 1 Case "恋愛" Cells(i, 2) = 2 Case "学校" Cells(i, 2) = 3 Case Else Cells(i, 2) ="エラー" Cells(k, 6) = Cells(i, 1) k = k + 1 End Select Next i End Sub A列に入力するとB列に即座にコードを表示することも VBAで出来ます。
お礼
詳細ありがとうございました。 マクロのプログラムを組んでしまったので、 今度この方法を使わせて頂こうと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
ぴったりの関数があります。マクロも良いが本件では 関数がお勧めです。 D1:E3に表データ 愛情 1 恋愛 2 学校 3 を作ります。 B1セルに関数 =IF(A1="","",VLOOKUP(A1,$D$1:$E$3,2,FALSE)) を入れます。 意味は、もしA1セルに入力されていなければ「””」、 何も表示せず「””」、入力されたら、VLOOKUP(A1,$D$1:$E$3,2,FALSE)で作成される値をB1にいれろ。 VlookupはA1セルの値を、表$D$1:$E$3の第1列目を引いて、一致した行の2列目(E列)の値を持って来い、と 言うことです。FalseはA1と一致した値がD列にあったときだけ値を拾え、と言うことです。 B2から必要行数まで複写してください。 入力すると (A) (B) 愛情 1 恋愛 2 愛情 1 学校 3 学校 3 のようになります。
お礼
このやりかた、よく分からないです・・・ データ数が多いので、今回はマクロをつくってみました。 回答ありがとうございました。
- tamagawa49
- ベストアンサー率46% (123/265)
Sub 変換() Dim n As Integer For n = 1 To 50 If Cells(n, 1) = "愛情" Then Cells(n, 2) = 1 ElseIf Cells(n, 1) = "恋愛" Then Cells(n, 2) = 2 ElseIf Cells(n, 1) = "学校" Then Cells(n, 2) = 3 Else End If Next End Sub のようなマクロでできると思います。 For n=1 to 50 は1行目から50行目ということなので適当に変えて下さい。
お礼
ありがとうございます。 早速やってみます。 ポイント発行は自分が納得できてからということでお待ちください。
補足
きちんとできたのですが、データ数が毎回かわる場合、データのない部分の表示を無くすにはどうしたらよいのでしょうか? 例えば、一列目に入れたのが5こだった場合に、5こだけ実行するように指定する方法があれば教えてください。
お礼
再度ありがとうございました。 何とか必要なものができ、使えました。 ありがとうございます。