- ベストアンサー
計算式の簡素化
よろしくお願いします。 下の構文を簡単に記述する方法をお教え願えないでしょうか。 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),"""")))))"
- みんなの回答 (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)
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),"""")"