
取り消し線の入った文字を一気に削除したいと思い、VBAで下記を実行しようとしましたが、
選択範囲が多いため非常に時間がかかっております。
(ネットで見つけた構文に少し手を加えています。)
速くする方法あれば構文をご教授お願いいたします。
Dim lastRow As Long
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "K").End(xlUp).Row
Range("K7", Cells(lastRow, "S")).Select
For Each myCell In Selection
textBefore = myCell.Value
textAfter = ""
For i = 1 To Len(textBefore)
If myCell.Characters(Start:=i, Length:=1).Font.Strikethrough = False Then
textAfter = textAfter & Mid(textBefore, i, 1)
End If
Next i
myCell.Value = textAfter
Next myCell
Application.ScreenUpdating = True
No.3ベストアンサー
- 回答日時:
No.1のお礼にあるmyCell.Font.Strikethrough = Trueだと、削除
されるように書かれていますね。
Next i
myCell.Value = textAfter
この順番が逆にならないと削除されます。
セル内の一部に取り消し線がある文字列のみを対象にする場合は、
上記でのTrueでは判定できないと思います。
If (IsNull(n) = True) Then
このような判定でないと、処理がされません。
処理の速さは別にして、判定処理するものをお礼のマクロに追加を
してみました。
Sub StrikethroughDelete()
Dim lastRow As Long
Dim textBefore As String
Dim textAfter As String
Dim myCell As Range
Dim i As Long
Dim n As Variant
n = Null
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "K").End(xlUp).Row
Range("K7", Cells(lastRow, "S")).Select
For Each myCell In Selection
textBefore = myCell.Value
textAfter = ""
n = myCell.Font.Strikethrough
If (IsNull(n) = True) Then
For i = 1 To Len(textBefore)
If myCell.Characters(Start:=i, Length:=1).Font.Strikethrough = False Then
textAfter = textAfter & Mid(textBefore, i, 1)
End If
Next i
myCell.Value = textAfter
Else
If myCell.Font.Strikethrough = True Then
myCell.ClearContents
End If
End If
Next myCell
Application.ScreenUpdating = True
End Sub
No.2
- 回答日時:
コードの最初に以下を追加する。
すべての変数の型宣言を追加することで、若干速くできるはずです。効果は未検証ですがそんなに大きくはないです。
Dim textBefore as String
Dim textAfter as String
Dim myCell as Range
Dim i As Long
No.1
- 回答日時:
>For i = 1 To Len(textBefore)
>If myCell.Characters(Start:=i, Length:=1).Font.Strikethrough = False Then
>textAfter = textAfter & Mid(textBefore, i, 1)
>End If
>Next i
その前に条件分岐するようにしてみては?
もし、その文字全体のFont.StrikethroughがFalseだったら何もしない。
その他はそのままのように。
もし、取り消し線が入っているセルの方が多かったら逆でやったらいいと思います。
それ以上の短縮はちょっと思いつきません。
お力になれれば幸いです。
ありがとうございます。下記のようにしてみたらすべてのセル文字削除となってしました。
根本が間違っていると思うのですが、何がダメかご教授頂けると幸いです。
VBA初心者すみません。
Dim lastRow As Long
Dim textBefore as String
Dim textAfter as String
Dim myCell as Range
Dim i As LongApplication.ScreenUpdating = False
lastRow = Cells(Rows.Count, "K").End(xlUp).Row
Range("K7", Cells(lastRow, "S")).Select
For Each myCell In Selection
textBefore = myCell.Value
textAfter = ""
If myCell.Font.Strikethrough = True Then
For i = 1 To Len(textBefore)
If myCell.Characters(Start:=i, Length:=1).Font.Strikethrough = False Then
textAfter = textAfter & Mid(textBefore, i, 1)
End If
Next i
End If
myCell.Value = textAfter
Next myCell
Application.ScreenUpdating = True
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Word文書、取り消し線部分の一括削除について
Word(ワード)
-
WORDの文字が赤になり取消線が引かれる
Excel(エクセル)
-
Excel VBA セル内に設定されたテキストを書式ごとコピー(複数セル)
Excel(エクセル)
-
-
4
Excel countif関数で取り消し線のセルをカウントしないようにしたい countif関数で文
Excel(エクセル)
-
5
エクセルの取り消し線を検出するコード
Visual Basic(VBA)
-
6
Word、VBAでの取り消し線文字の検索削除について
Visual Basic(VBA)
-
7
配列のペースト出力結果の書式について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
銀行の窓口処理の件で知ってる...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
月度は何て読みますか?
-
UMLでの例外処理
-
VBAでループ内で使う変数名を可...
-
ボタンクリックイベント 重複...
-
実時間処理ってなんですか?
-
vba 空のデータをSplitする時の...
-
C#です。リストボックスの項目...
-
VBAでCOPYを繰り返すと、処理が...
-
FFTの結果ついて
-
NULLを含むフィールド値の条件分岐
-
VB.NET Excelを読み込んでDataT...
-
処理の実行中にOutLookがまとも...
-
waitせずにキー入力があった場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
銀行の窓口処理の件で知ってる...
-
VBAでCOPYを繰り返すと、処理が...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
月度は何て読みますか?
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
DoEventsがやはり分からない
-
お家デートをしててハグを長い...
-
セックスレスの既婚女性は自慰...
-
リョウ・・・量?料?
-
findは動くがfindnextがマクロ...
-
取り消し線が入った文字を削除...
-
生活保護受給者は性欲をどんな...
-
Loadイベント中にほかのイベン...
おすすめ情報