• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel2013 コードを短く)

Excel 2013のコードを短くする方法

このQ&Aのポイント
  • Excel 2013のコードを短くする方法について教えてください。
  • セルの値に応じて、特定の文字列に変換するコードを短くしたいです。
  • 現在、大量のIfステートメントを使用していますが、もっと効率的な方法はありますか?

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

  • ベストアンサー
回答No.2

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

meronsodanomu
質問者

お礼

ありがとうございます。 select caseを使わせていただきます。

その他の回答 (2)

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

エクセル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などで処理する分野だよ。

meronsodanomu
質問者

お礼

ありがとうございます。 勉強しています。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

私なら、せっかく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

meronsodanomu
質問者

お礼

ありがとうございます。 参考させていただきます。