4

Excel 2007 スプレッドシートで、セル内のテキストの一部を強調表示して検索置換したいと考えています。ただし、検索置換を使用すると、セル全体が再フォーマットされます。

たとえば、セルに次のものが含まれているとします。

Pellentesque vel massa sit amet magna eleifend placerat. Pellentesque dictum, nibh vitae tincidunt placerat, elit libero tristique tellus, vel imperdiet nulla tortor id diam. マウリス ポルタ ブランディット 前庭。

"Pellentesque" を見つけて、Pellentesqueに置き換えたいです。

これは、VBE や数式なしで実行できますか?

4

5 に答える 5

8

おそらくこれが適しているでしょう(実行する前に必要以上のセルを選択しないようにしてください。そうしないと、時間がかかる場合があります):

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(cl, SearchText)
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = TestPos + EndPos
    StartPos = InStr(TestPos, cl, SearchText, vbTextCompare)
  Loop
Next cl
End If
End Sub

勇気を出して赤く着色する必要があります。マクロを再実行しても、変更は上書きされません。色を変更しない場合は、.ColorIndex = 3 をコメントアウトします。

(@Skip Intro の SO15438731 の質問へのポインタと、SO10455366 の回答からのいくつかのコードに基づいています。)

于 2013-06-07T05:11:32.620 に答える
4

これは私にとってうまくいったものです:

  1. Excel で選択したセル (一度に 1266 個を選択しました。実際に制限があるかどうかはわかりません)

  2. コピーをクリックしました

  3. 空白の単語ファイルを開き、貼り付けをクリックしました

  4. CNTL+H を使用して検索と置換を取得しました

  5. 検索する文字と置換する文字を入力し、必要な書式を追加して [すべて置換] を選択しました (処理に 2 秒もかかりませんでした)。

  6. WordファイルでEdit-Select-Select Allを選択し、Shiftキーを押しながら左矢印を押しました(これを行わないと次の操作に行が追加されると思います)

  7. Excel に戻り、予備の領域で [貼り付け - ソースの書式設定を保持] オプションを選択しました。

それはまさに私が望んでいたものをExcelに入れました。そこから、好きな場所に移動できました。

于 2015-07-01T20:52:38.823 に答える
1

標準の検索と置換の CTRL+F コマンドを使用してこれを行う最も簡単な方法は、"Calibri Font" Character • aka を "一時的に" アドインすることです。「黒い弾丸」

次のように: • サンプル •

[挿入] タブから --> 記号 --> Calibri フォント --> そして最後に)

したがって、Excel データの多くの行を読みやすくすることができます。

また、後で簡単に削除して元に戻すこともできます。検索と置換を元に戻すだけです。

これが誰かの役に立てば幸いです。確かに、私の目がより速くスキャンするのに役立ちました.


古い応答

これを行うための簡単な非プログラミング方法は、次のとおりです。

  1. テキストをMS Wordに貼り付けます

  2. 次に、そこで検索と置換 (CTRL+F) を実行します (左下の [その他] > [>] ボタンでカスタム書式設定を変更し、必要に応じて [書式設定] をカスタマイズします)。これにより、すべての変更が完全に行われます。 .

  3. そして、PASTE SPECIALをExcelに実行するのではなく(ホームタブ->貼り付け->形式を選択して貼り付け-> HTMLとして貼り付け(フォーマットを保持するため)を使用します)(これは、メモリを大量に消費し、何かに対して遅すぎる可能性があります1000行以上)

Word から文書を RTF ファイルに「名前を付けて保存」し、単純な「ファイルを開く」を介してそのファイルを Excel に再インポートすることをお勧めします。

Excel には「繰り返しパターンのセル構造」認識が非常に優れていますが、もちろん、この回避策は、目的のセル分割を毎回完全に再現するとは限りませんが、ほとんどの場合、セルの順序を維持する必要があります。

Microsoft がセル全体を常に太字にするのではなく、セル内の見つかった結果テキストを「強調表示/太字」にするオプションの制限を停止するまで、これを行う簡単な方法はこれで終わりです。

挨拶マルコ

于 2013-10-13T13:51:33.367 に答える
0

@pnuts のコードには小さなバグがあります...修正版:

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(cl.Value2, SearchText)
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = EndPos + 1
    StartPos = InStr(TestPos, cl.Value2, SearchText)
  Loop
Next cl
End If
End Sub

実際には問題はこの行にありますTestPos = EndPos + 1- 以前はTestPos = TestPos + EndPos

于 2021-12-01T23:44:09.987 に答える
-1

検索項目を大文字と小文字を区別しないようにするには、次を使用できます。

Sub FormatSelection()

Dim cl As Range
Dim SearchText As String
Dim StartPos As Integer
Dim EndPos As Integer
Dim TestPos As Integer
Dim TotalLen As Integer

On Error Resume Next
Application.DisplayAlerts = False
SearchText = Application.InputBox _
(Prompt:="Enter string.", Title:="Which string to format?", Type:=2)
On Error GoTo 0
Application.DisplayAlerts = True
If SearchText = "" Then
Exit Sub
Else
For Each cl In Selection
  TotalLen = Len(SearchText)
  StartPos = InStr(Ucase(cl), Ucase(SearchText))
  TestPos = 0
  Do While StartPos > TestPos
    With cl.Characters(StartPos, TotalLen).Font
      .FontStyle = "Bold"
      .ColorIndex = 3
    End With
    EndPos = StartPos + TotalLen
    TestPos = TestPos + EndPos
    StartPos = InStr(TestPos, cl, SearchText, vbTextCompare)
  Loop
Next cl
End If
End Sub
于 2015-08-24T05:44:27.113 に答える