- ベストアンサー
Excel 2013のコードを短くする方法
- Excel 2013のコードを短くする方法について教えてください。
- セルの値に応じて、特定の文字列に変換するコードを短くしたいです。
- 現在、大量のIfステートメントを使用していますが、もっと効率的な方法はありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Select~Caseを使うと、半分くらいになると思います。 For Each c In Selection Select Case c.Value Case "北海道" c.Value = "01_北海道" Case "青森県" c.Value = "02_青森県" ~ Case "沖縄県" c.Value = "47_沖縄県" End Select コードが読みにくい、汎用性が多少削がれて構わない、横に長くなってOKなら、 "北海道_青森県_岩手県_・・・沖縄県_" って4文字ずつ列挙している文字列から、対象のC.Valueが何文字目に見つかるかInStr関数で検索して、何番目か計算、数字を付加とか。 Dim iFound as Integer iFound = Int((InStr("北海道_青森県_岩手県_~<中略>~東京都_神奈川県新潟県_~<中略>~沖縄県_", c.Value) -1 ) / 4) + 1 c.Value = Text(iFound, "00") & "_" & c.Value
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17070)
エクセルVBAの質問らしいね。 シートの使わない2列の範囲に府県コード隣列に県名のテーブルを作っておく 北海道 01 青森県 02 岩手県 03 以下行略 コード 下記から実際のニーズに合わせてコードを作れば仕舞。 標準モジュールに Sub test01() f = "青森県" x = Application.WorksheetFunction.VLookup(f, Range("h1:i47"), 2, False) MsgBox x MsgBox x & "_" & f End Sub と入れてやってみること。 既回答のMATCH関数と似ている。 ーー Findメッソッドでもできる。 Sub test02() f = "青森県" Set x = Range("h1:i47").Find(f) MsgBox x.Offset(0, 1) MsgBox x.Offset(0, 1) & "_" & f End Sub それにしても検索はコンピュターの処理の大問題です。 色々勉強するべきです。 質問の表現は稚拙で冗長。今までこういうことを考えたことがないのかな? 質問文はVBAで「府県名で、府県コードを検索したい」で済むこと。 ただ量が(府県は)50程度なんだか、10万(郵便番号など)にもなると表を作るのも大変。データベースを作って、ACCESSVBAなどで処理する分野だよ。
お礼
ありがとうございます。 勉強しています。
- mt2015
- ベストアンサー率49% (258/524)
私なら、せっかくExcelを使っているんですから、空いている列に都道府県名を順に入れておき、以下の様なコードにします。 #例としてA1:A47に都道府県名が入っているものとします。 Sub sample() Application.ScreenUpdating = False For Each c In Selection xCode = Application.Match(c.Value, Range("A1:A47"), 0) If IsNumeric(xCode) Then c.Value = Format(xCode, "00") & "_" & c.Value End If Next c Application.ScreenUpdating = True End Sub
お礼
ありがとうございます。 参考させていただきます。
お礼
ありがとうございます。 select caseを使わせていただきます。