
取り消し線の入った文字を一気に削除したいと思い、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も見ています
-
教えて!gooグレードポイントがdポイントに変わります!
dアカウント連携を行っていただくと、グレードに応じて「dポイント」が進呈されるようになります。
-
VBAで打ち消し線の入った文字を特定する方法
その他(Microsoft Office)
-
文字だけでなく書式も判別できる関数について
Excel(エクセル)
-
エクセルの取り消し線を検出するコード
Visual Basic(VBA)
-
4
Word、VBAでの取り消し線文字の検索削除について
Visual Basic(VBA)
-
5
Excelのカウント関数に関しての質問です。
Excel(エクセル)
-
6
エクセルの取り消し線が引けない!!
Excel(エクセル)
-
7
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
8
Excel2010 条件付きで取り消し線
その他(Microsoft Office)
-
9
エクセルのSUM関数について
Excel(エクセル)
-
10
Excelでセル参照したとき、書式も一緒に持ってくるには?
Windows Vista・XP
-
11
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
12
Excel マクロ VBA プロシージャが大きすぎます のエラー対処方法
Visual Basic(VBA)
-
13
エクセルで文字が混じった数字を並べ替えしたいのですが
Excel(エクセル)
-
14
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
15
VBAでブック保護非保護を判定するには?
Excel(エクセル)
-
16
VBAで文字を反映させると255文字の制限になってしまいます。
Visual Basic(VBA)
-
17
VBAでユーザーに別ファイルのシートを選ばせたい場合
その他(Microsoft Office)
-
18
VBAでシート全体の塗りつぶしを解除する
Word(ワード)
-
19
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
20
split関数で区切り文字がない場合
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
VBAでループ内で使う変数名を可...
-
5
Do~Loopした回数をカウントしたい
-
6
DoEventsがやはり分からない
-
7
【Excel】特定の文字を含むセル...
-
8
switch の範囲指定
-
9
レジ返品交換について(時間がか...
-
10
【Find関数】あるのに見つから...
-
11
EXCEL VBA マクロ 実行する度に...
-
12
FFTの結果ついて
-
13
VB.NET Excelを読み込んでDataT...
-
14
Excel VBAにて2つの処理を同時...
-
15
findは動くがfindnextがマクロ...
-
16
取り消し線が入った文字を削除...
-
17
インタラクティブの反対語は?
-
18
RPGプログラムの*HIVALについて
-
19
リョウ・・・量?料?
-
20
音声マークを一括非表示にしたい。
おすすめ情報
公式facebook
公式twitter