• ベストアンサー

エクセル・マクロを使って・・

1列目に漢字の名前を入力しておき、 これをみて愛情⇒1、恋愛⇒2、学校⇒3・・ といった変換後の数字を2列目に入れるプログラムを作りたいと思っています。 マクロ自体ほとんど分からない(使ったことはある)のですが、 このようなプログラムの書き方を教えてください。 あと、参考になる文献があれば、文献のみでも教えてください。 よろしくお願いします。

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

  • ベストアンサー
回答No.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))から上に上がってきてデータのある行を選ぶ。 つまり途中に空白セルがあっても最終行まで実行できます。 試してみて下さい。 もちろん最終行が空白セルだったらダメですけどね。

NyaoT1980
質問者

お礼

再度ありがとうございました。 何とか必要なものができ、使えました。 ありがとうございます。

その他の回答 (3)

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

#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で出来ます。

NyaoT1980
質問者

お礼

詳細ありがとうございました。 マクロのプログラムを組んでしまったので、 今度この方法を使わせて頂こうと思います。

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

ぴったりの関数があります。マクロも良いが本件では 関数がお勧めです。 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 のようになります。

NyaoT1980
質問者

お礼

このやりかた、よく分からないです・・・ データ数が多いので、今回はマクロをつくってみました。 回答ありがとうございました。

回答No.1

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行目ということなので適当に変えて下さい。

NyaoT1980
質問者

お礼

ありがとうございます。 早速やってみます。 ポイント発行は自分が納得できてからということでお待ちください。

NyaoT1980
質問者

補足

きちんとできたのですが、データ数が毎回かわる場合、データのない部分の表示を無くすにはどうしたらよいのでしょうか? 例えば、一列目に入れたのが5こだった場合に、5こだけ実行するように指定する方法があれば教えてください。

関連するQ&A

  • エクセルのマクロを使って、例えば、「大阪太郎」を、「25」という数字に

    エクセルのマクロを使って、例えば、「大阪太郎」を、「25」という数字に一発&ごっそり変換したい。 上記の1件だけなら、エクセルの「置換」を使ってやればいいのはわかるのですが(実際、そのようにやってみたのですが、結構、大変だったものですから・・・)、実は、このような変換を、毎月、約70件こなさねばならない(つまりは、約70人分ある)ので、どうにか効率化できないかと調べた結果、「マクロ」というものを使って、そこに変換式(プログラム)を入れて、「適用」させれば、うまく行くのでは?と思い至りました。 「大阪太郎」→「25」、「東京次郎」→「26」、「北海道三郎」→「27」とかいう、そういう具合に、変換するのを、エクセルの「置換」を使わずに、変換のためのマクロ(VBA?)を一度だけ組んでしまって、後は、毎月、ポチッとボタンを押す、というようにしたいのです。 こういうことが、果たしてできるのかどうか、もしできるのなら、どういうプログラムを組めばよいのか、入り口だけでもよいので、ご教示いただけるでしょうか? (ちなみに、ウェブ検索したのですが、漢字の文字列をカナ変換するとか、そういう「変換」のためのページはたくさん出てきたのですが、私の希望する、特定の文字列を、数字に変換するためのページなどは、(ニーズが無いせいか)見つけることができませんでした。 以上、なにとぞよろしくお願いいたします。

  • エクセルでマクロを自動で実行させることはできますか?

    エクセルで 9-9-9 とか書いてあるとこを○の中に9という風に変換する マクロをこちらで教えてもらったのですが これを9-9-9とかのデータを貼り付けた途端に マクロで○の中数字に変換させることはできるんでしょうか? 変換させたい列は決まっていてUの列なんです。 宜しくお願いします。

  • エクセルのマクロについて 2

    たびたびすいません  マクロについて質問があります 例えばB列に連続した数字を入力していて 1 2 3 5 6 7 9 とあって飛び飛びの数字この場合は3と5の間 7と8の間に一列挿入シたいのですができますか すいませんがお願いします

  • エクセルかマクロで・・・

    エクセル関数かマクロで作りたいのですが、   A列に数字B列に個数を入力していくとします。   A列の数字をB列の個数分だけC列に表示したいのです。  例えばA1に300、B1に5、A2に500、B2に6と入力した場合、   C1からC5に300、C6からC11に500、と表示するにはどうしたらよい  でしょうか。 よろしくお願いいたします。

  • エクセルでマクロ

    エクセルで、数字を入力すると特定の人の名前がでる(例えば、 「1」を入力すると「鈴木」、「2」と入力すると「田中」・・)マクロって、どうすればいいのでしょうか?ほとんど初心者です。 アドバイスよろしくお願いします。

  • EXCELのマクロについて

    EXCELのマクロについて質問させてください。 一覧シートから、職種別の各シートへ集計(貼り付け)が出来るような プログラムを作成したいのでやってみたところ、私の知識では上手く出来ませんでした。 お力をお借り出来ると幸いです。 具体的には、一覧シートへ入力後(毎月入力) 『A』 『B』 『E』と分かれた職種別の各シートへ職種別かつ氏名の昇順でソートが掛かった状態で 貼り付け?集計?が出来るようにしたいです。 一覧シートのB列には「A・B・E」のどれかの職種が入力されており 氏名はD列E列へ記載しています。(漢字、カナ表示) A~AD列までデータを記入していますので、全て各シートへ集計出来ると嬉しいのですが・・・ 行は8行目から記載してます。 上記のようにプログラムを組む事は可能でしょうか。 具体的なプログラムも載せて頂けると嬉しいです。 宜しくお願い致します。

  • エクセルマクロ

    全くの素人です。 200人のお得意先に案内状を送付します。 sheet1 A列1~A列200に会社名、 B列1~200までに、代表者の名前を入力しています。 sheet2に案内状があります。 会社名と名前だけ変えて200回するのもひと苦労ですので、マクロを使えればと思います。 1マクロに記憶する 2A列1・B列1をコピー 3sheet2に貼り付け4印刷 5マクロ記憶終了 マクロを実行するとA列1・B列1ばかり印刷されます。 A列2・B列2 A列3・B列3 と言うように順番に下段を印刷させる設定はどのようにすれば良いのでしょうか

  • Excelのマクロ教えてください

    初めまして。 以下のようなマクロが欲しいのですが、知識不足のため、どうしたらよのかわからず困っております。 ウェブで色々と調べてやってみましたが、期待どおりの結果を得られませんでした。 どなたかお教えいただけたら幸いです。 行いたいのは、例えば、   セルA1に文字列『1. abc』が入っているとき、先頭の番号『1』の部分だけ取り出し   (または . 以下を除いて)、セルA1の内容を数字型の『1』に書き換える という動作です。 複数のセルをドラッグして選択し、マクロのショートカットで一発変換 できたら…と思っております。 変換したい部分のセルの内容はすべて、『1. abc』のように、文字列で 「1~7の数字」、「半角の.」、「半角スペース」、「英単語」 の順になっています。 簡単なことなのかもしれませんが、自分にはさっぱりでした… どなたか回答をお願いいたします。m(_ _)m

  • 【エクセル】マクロ

    すみません。 エクセルのマクロのプログラム教えてください。 セルA1~A30に 「1」~「5」のいずれかの数字が 入っています。 そのA列の数字をもとにB1~B30のセルの書式を 変えたいと思っています。 例えば、「1」なら赤色、「2」なら青色、「3」なら緑色・・・ となるように考えています。 for文で1~30まで繰り返し、if文とswitch文で実行すると 思うのですが、どのようなプログラムを書けばいいですか? よろしくお願いします。 3種類なら条件式書式が使えるのですが、4種類以上だと使えないので マクロで実行しようと思っています。

  • エクセルのマクロについて

    お世話になります。 エクセルで、列に入力された値が有る範囲を超えた場合、 その値のみを赤色に変換したいのですが、 どのようにマクロを組めばよろしいでしょうか。 VBAに関しては、全くの初心者ですので わかりやすく教えて頂ければ幸いです。