- ベストアンサー
マクロで指定したセル内の改行を削除
- エクセル2013で、既に動いているマクロに別な処理を追加したい場合、単独のコードを作成し、正しく動作することを確認後、今使用しているマクロの先頭に組み込むことができます。
- 指定した複数のセル内の改行を削除するためのマクロコードが、正しく動くことを確認できました。
- しかし、別のマクロの先頭に同じコードを組み込むと、「型が一致しません」のエラーが発生します。このエラーの原因はわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 対象範囲.Replace vbLf, "", xlPar 最後のtが抜けています。xlPart
その他の回答 (2)
- f272
- ベストアンサー率46% (8529/18254)
(1) Replace関数の第1引数は文字列です。セル範囲を指定すると「型が一致しません」になるのは当然です。複数セルを対象にしたければ,単一セルごとにReplaceしてそれをループさせるか,(2)で使っているようにReplaceメソッドを使用します。 (2) これだけではよくわからないが,エラーが出るとき「対象範囲」はどうなっていますか?ちゃんとRange型になっていますか?
お礼
no.3 kkkkkm様のご指摘で直りました。 >最後のtが抜けています。xlPart >Replace関数の第1引数は文字列です。 教えていただきありがとうございます。 あわてていて、よく確認もせず 質問して申し訳ありませんでした。
補足
大変申し訳ありません 対象範囲.Replace vbLf, "", xlPart ↑ ここで「型が一致しません」でERRです。 ↓ 「インデックスが有効範囲に有りません」 でERRでした。 ウィンドーで見ると 変数 【対象範囲】の型は Range/Range となっています。 f272様に教えていただいたコードの 先頭に入れたのですが...... Dim 何文字目 Dim 一時保管 Dim 対象範囲 As Range If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'オートフィルターで絞り込みがされていたら絞り込みをクリアする Application.Calculation = xlCalculationManual '自動計算停止 Application.ScreenUpdating = False '画面停止 最終行 = Cells(Rows.Count, 6).End(xlUp).Row 'F列の最終行を求める Set 対象範囲 = Range(Cells(4, 1), Cells(最終行, 6)) 対象範囲.Replace vbLf, "", xlPar Set 検索値 = Range("F4") 'カンマの入ったデータ列の最初の行(検索する所) Set 複写範囲 = Range("A4:E4") '同時に行挿入する列の最初の行 ↑ Set Range の仕方が間違ってるのでしょうか?
- kkkkkm
- ベストアンサー率66% (1733/2603)
Replace()は一度に複数のセルを置換できませんので、一括でしたら対象範囲.Replaceで置換するのが正しいと思います。 > なぜ単独では動作するのに、別のマクロの先頭に組み込むとERRに > なるのかわかりません。 別のマクロの動作状態や環境がわからないので・・・ですが 改行削除()が正常に機能した同一シートモジュールの別マクロに組み込んだのでしょうか。
お礼
素早い回答をありがとうございます。 >Replace()は一度に複数のセルを置換できません 今、NET検索で見つけました。 そのように説明されていました。
補足
大変申し訳ありません 対象範囲.Replace vbLf, "", xlPart ↑ ここで「型が一致しません」でERRです。 「インデックスが有効範囲に有りません」 でERRでした。 >改行削除()が正常に機能した同一シートモジュールの >別マクロに組み込んだのでしょうか。 はい。そうです。
お礼
本当です。tが有りません。 今修正したら、正常動作しました。 あわてていて申し訳ありません。 ありがとうございました。