• ベストアンサー

計算式の簡素化

よろしくお願いします。 下の構文を簡単に記述する方法をお教え願えないでしょうか。 Range("F5").Value = "=IF(LEN(V5)=4,MID(V5,1,1),IF(LEN(V5)=5,MID(V5,1,2),IF(LEN(V5)=6,MID(V5,1,3),IF(LEN(V5)=7,MID(V5,1,4),IF(LEN(V5)=8,MID(V5,1,5),"""")))))" Range("F7").Value = "=IF(LEN(V7)=4,MID(V7,1,1),IF(LEN(V7)=5,MID(V7,1,2),IF(LEN(V7)=6,MID(V7,1,3),IF(LEN(V7)=7,MID(V7,1,4),IF(LEN(V7)=8,MID(V7,1,5),"""")))))" ~省略~ Range("F31").Value = "=IF(LEN(V31)=4,MID(V31,1,1),IF(LEN(V31)=5,MID(V31,1,2),IF(LEN(V31)=6,MID(V31,1,3),IF(LEN(V31)=7,MID(V31,1,4),IF(LEN(V31)=8,MID(V31,1,5),"""")))))" Range("F33").Value = "=IF(LEN(V33)=4,MID(V33,1,1),IF(LEN(V33)=5,MID(V33,1,2),IF(LEN(V33)=6,MID(V33,1,3),IF(LEN(V33)=7,MID(V33,1,4),IF(LEN(V33)=8,MID(V33,1,5),"""")))))"

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

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

こんにちは。 ご提示の構文を見る限り、ExcelのVBAのコードだと思われますので、そう解釈した 上でのコメントになります。 まず、ご提示のコードの処理内容は、  ・F列のセルに、V列のセルを参照する「ワークシート関数」の「数式」を設定する。  ・その際、数式を設定するセルは、F5~F33までの間で、1つ飛ばしで設定する。  ・また、数式内で参照する側のセルは、V5~V33までの間で、1つ飛ばしで参照する。 と解釈しました。 それぞれの構文は、セルのアドレスが1つ飛ばしで変化している以外は、どれも 同じ構文になっていますので、 これを簡素化(というか単純化)するとしたら、ループ処理にして、セルのアドレス のみ変化するようにコードを組めば良いと思われます。 また、マクロによりセルに「ワークシート関数」の「数式」を設定する場合は、   Range("F5").Value = "関数式の文字列" とするよりも、   Range("F5").NumberFormatLocal = "G/標準"   Range("F5").Formula = "関数式の文字列" のように、   NumberFormatLocal プロパティで、「表示形式」を「標準」に設定       ↓   Formula プロパティで、「関数式」を設定 とした方が確実だと思われます。 以上に加え、#1さんが示された「数式」自体の簡略化も行えば、さらに簡略化 できると思います。 下記は、以上の内容を踏まえて作成したマクロの一例です。 ※セルに設定する「数式」は、#1さんが示された「数式」を使用させて戴きました。 ■サンプルマクロ 注)インデント等のため全角スペースを入れています。 ========================= Option Explicit '== セルへの数式設定(サンプル) == Sub SetFormula()   Dim nCnt As Long   'ループカウンタ   Dim nCntMax As Long  'ループカウンタの最大値   Dim sAdr1 As String  'セルアドレス1   Dim sAdr2 As String  'セルアドレス2   '数式を設定するセル範囲の行数を取得   nCntMax = Range("F5:F33").Rows.Count   '行数分ループ(増分は2=1つ飛ばし)   For nCnt = 0 To nCntMax - 1 Step 2     sAdr1 = "F" & 5 + nCnt '数式を設定するセルのアドレスを決定     sAdr2 = "V" & 5 + nCnt '参照するセルのアドレスを決定     '数式を設定するセルの表示形式を「標準」に設定     Range(sAdr1).NumberFormatLocal = "G/標準"     'セルに数式を設定(Formulaプロパティによる設定)     Range(sAdr1).Formula = _       "=IF(AND(LEN(" & sAdr2 & ")>=4,LEN(" & sAdr2 & ")<=8)," & _       "MID(" & sAdr2 & ",1,LEN(" & sAdr2 & ")-3),"""")"   Next nCnt End Sub ========================= 以上です。参考になれば幸いです。

その他の回答 (1)

noname#102340
noname#102340
回答No.1

Range("F5").Formula = "=IF(AND(LEN(V5)>=4,LEN(V5)<=8),MID(V5,1,LEN(V5)-3),"""")" V5が4文字以上と決まってるなら Range("F5").Formula = "=IF(LEN(V5)<=8,MID(V5,1,LEN(V5)-3),"""")"

関連するQ&A

専門家に質問してみよう