
取り消し線の入った文字を一気に削除したいと思い、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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
このQ&Aを見た人はこんなQ&Aも見ています
-
Word文書、取り消し線部分の一括削除について
Word(ワード)
-
Excel countif関数で取り消し線のセルをカウントしないようにしたい countif関数で文
Excel(エクセル)
-
WORDの文字が赤になり取消線が引かれる
Excel(エクセル)
-
-
4
Excel VBA セル内に設定されたテキストを書式ごとコピー(複数セル)
Excel(エクセル)
-
5
エクセルの取り消し線を検出するコード
Visual Basic(VBA)
-
6
Word、VBAでの取り消し線文字の検索削除について
Visual Basic(VBA)
-
7
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
8
EXCELのSheet番号って変更できる!?
Visual Basic(VBA)
-
9
エクセルのシート連番の振り直し
Excel(エクセル)
-
10
文字だけでなく書式も判別できる関数について
Excel(エクセル)
-
11
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
12
配列のペースト出力結果の書式について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男性に対して、『女性への気遣...
-
「ご処理進めて頂きますようお...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
エクセルで、日付を入力すると...
-
お家デートをしててハグを長い...
-
switch の範囲指定
-
findは動くがfindnextがマクロ...
-
インタラクティブの反対語は?
-
waitせずにキー入力があった場...
-
DoEventsがやはり分からない
-
Lispでリストの中身もすべて反...
-
マクロ 変数のコードのようにま...
-
EXCEL VBA マクロ 実行する度に...
-
[ホルマール」って何ですか
-
VBAでセルに値が入力されるまで...
-
UMLでの例外処理
-
読み方教えてください。
-
エクセルVBA マクロ処理中のポ...
-
VBAでorを使用しているときの合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
VBAでループ内で使う変数名を可...
-
メルカリのメルカードで買い物...
-
月度は何て読みますか?
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
セックスレスの既婚女性は自慰...
-
switch の範囲指定
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
Do~Loopした回数をカウントしたい
-
VBの質問#if 0 then ってどう...
-
DoEventsがやはり分からない
-
お家デートをしててハグを長い...
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
生活保護受給者は性欲をどんな...
-
iD
おすすめ情報