[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『末尾を8に変換するマクロのエラー』(Erika)
マクロ初心者です。
以下の内容で、なぜか1文だけ赤字でエラーが出てしまいます。
構文エラーだそうです。
Range("G2:G" & Lastlow).Formula = "=SUBSTITUTE(F2,RIGHT(F2,1),"8")"
エラーの原因はなんでしょうか。
以下全文です。
↓
Sub 末尾8変換()
'
' 末尾8変換 Macro
'
' Keyboard Shortcut: Ctrl+Y
'
Columns("G").Insert Columns("G").Select Selection.NumberFormatLocal = "G/標準"
'最終行を取得 Lastlow = Cells(Rows.Count, 2).End(xlUp).Row
'G列の末尾を8に変換するための数式貼付け Range("G2:G" & Lastlow).Formula = "=SUBSTITUTE(F2,RIGHT(F2,1),"8")"
'F列のLCCDを式→数値 Range("F2:F" & Lastlow).Value = Range("F2:F" & Lastlow).Value
Range("F1").Select Application.CutCopyMode = False Selection.Cut
Range("G1").Select ActiveSheet.Paste
Columns("F:F").Select Selection.Delete Shift:=xlToLeft
End Sub
よろしくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
"8" を ""8"" に変更 Range("G2:G" & Lastlow).Formula = "=SUBSTITUTE(F2,RIGHT(F2,1),""8"")"
(seiya) 2017/12/26(火) 12:10
SUBSTITUTE関数だと例えばAABAが88B8になってしまう。 Range("G2:G5").Formula = "=IFERROR(LEFT(F2,LEN(F2)-1)&""8"","""")" ではどうか。 (ねむねむ) 2017/12/26(火) 12:34
質問内容には関係ない回答ですが、数式を貼り付け後に値貼り付けをしているようなので
Sub test()
Dim LastRow As Long, i As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To LastRow Cells(i, "F").Value = Application.Replace(Cells(i, "F"), Len(Cells(i, "F")), 1, 8) Next
End Sub
みたいな感じでもいいかもしれません。 (bi) 2017/12/26(火) 13:52
biさん、範囲内に空白セルがある場合の対策もしておいた方がいいのでは? (途中に空白セルがあってもエラーにならないようにSUBSTITITE関数使ったのではと想像) (ねむねむ) 2017/12/26(火) 14:02
>範囲内に空白セルがある場合の対策もしておいた方がいいのでは?
その通りですね。失礼しました。
Sub test()
Dim LastRow As Long, i As Long
LastRow = Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To LastRow If Cells(i, "F").Value <> "" Then Cells(i, "F").Value = Application.Replace(Cells(i, "F"), Len(Cells(i, "F")), 1, 8) Next
End Sub (bi) 2017/12/26(火) 14:33
Erikaさん
一連の 挿入 数式挿入 値貼り付け 削除は
Sub test() [f2:f10000] = [if(len(f2:f10000),left(f2:f10000,len(f2:f10000)-1)&"8","")] End Sub
で事足りると思いますが? (seiya) 2017/12/26(火) 14:50
>ねむねむさん
”SUBSTITUTE関数だと例えばAABAが88B8になってしまう。” との事ですが、 Range("G2:G" & Lastlow).Formula = "=SUBSTITUTE(F2,RIGHT(F2,1),""8"")" これでF2セルの右から1文字目、という設定になっていると思うのですが、 上記のように変換されてしまうことはありますか?
>biさん
値貼り付けのマクロのようですが、私が貼った前文にあるものとなにか結果的に違いはありますか?(○○の場合でもマクロが作動するなど)
ちなみに、途中で空白があることはないデータファイルで使用するマクロを作成しています。
>seiyaさん
この一連のマクロをこの1行でできるということですか?!
初心者なので、何が何だかさっぱりわからないので、よければ説明していただけますでしょうか。
(Erika) 2017/12/27(水) 16:11
F列の末尾の数値を直接書き換えているだけで結果的には違いはありません。 ちなみにですが
'G列の末尾を8に変換するための数式貼付け ↓ 'F列の末尾を8に変換するための数式貼付け
'F列のLCCDを式→数値 Range("F2:F" & Lastlow).Value = Range("F2:F" & Lastlow).Value ↓ 'G列のLCCDを式→数値 Range("G2:G" & Lastlow).Value = Range("G2:G" & Lastlow).Value
ではないですか?勘違いでしたらすみません。 (bi) 2017/12/27(水) 16:49
F列の文字列/数値の末尾を8に変換するために 1)G列に列を挿入(作業列)して数式を挿入する 2)G列の結果を値貼り付けでF列を更新する 3)用済みのG列を削除
ということですよね?
EvaluateメソッドでF列のデータをメモリ内で数式を使用して処理した結果でF列を更新しています。 [[20070212134849]] 『Evaluate Method の研究』(seiya) ループ処理をする方が一般的でしょう。 例 Dim r As Range For Each r in Range("f2", Range("f" & Rows.Count).End(xlUp)) If r.Value <> "" Then r.Value = Left$(r.Value,Len(r.Value) - 1) & "8" End If Next とか... (seiya) 2017/12/27(水) 17:26
SUBSTITUTE関数は SUBSTITUTE(文字列, 検索文字列, 置換文字列, [置換対象]) という構文で置換対象を指定しない限り文字列内の検索文字列をすべて置換文字列に置き換えてしまう。 なので文字列内に最終文字列と同じ文字があればそれをすべて8に置き換える。 (試せばすぐにわかることだが) (ねむねむ) 2018/01/04(木) 10:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.