指定の文字列を含むセルのみ、左から60文字以上の文字列を削除したい。

今、次のようなデータがA列の1行目からズラリと並んでいるとします。

-----------------------------------------
aaa
bbb
ccc
【長い】abcdefgggggggggggggggggggggggggggh
ddd
eee
fff





-----------------------------------------

15000行ほどです。
ここにおきまして、上記のように“【長い】”という文字列を含むセルがいくつかあります。
そのセルだけを、“【長い】”という4文字分も含めまして、合計で左から60文字だけにしたいのです。
61文字以上の文字は削除したいのです。
関数およびマクロ等で効率的に処理する方法等、もしありましたらご教授いただきたい次第です。
よろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2015/04/18 12:57:18
  • 終了:2015/04/23 00:53:56

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4505ベストアンサー獲得回数18702015/04/18 14:03:37

ポイント300pt

式でやるとしたら、こんな感じです。

=IF(ISERROR(FIND("【長い】",A1)),A1,LEFT(A1,60))

もしくは、

=IF(ISERROR(FIND("【長い】",A1)),A1,LEFTB(A1,60))

最初の LEFT は文字数。半角英数もひらがな漢字も1文字です。
二番目の LEFTB はバイト数。
全角だけだと30文字になります。

"【長い】" の文字の判定が要らないのであれば、LEFT もしくは LEFTB だけで OK です。
60文字未満はそのまま表示されます。

=LEFT(A1,60)



追記です。

空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?

式を、以下のようにしてください。

=IF(ISERROR(FIND("【長い】",A1)),IF(ISBLANK(A1),"",A1),LEFT(A1,20))
他1件のコメントを見る
id:a-kuma3

空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?

回答に追記しました。

2015/04/19 06:38:22
id:moon-fondu

ありがとうございます、うまくいきました!

2015/04/23 00:49:39

その他の回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4505ベストアンサー獲得回数18702015/04/18 14:03:37ここでベストアンサー

ポイント300pt

式でやるとしたら、こんな感じです。

=IF(ISERROR(FIND("【長い】",A1)),A1,LEFT(A1,60))

もしくは、

=IF(ISERROR(FIND("【長い】",A1)),A1,LEFTB(A1,60))

最初の LEFT は文字数。半角英数もひらがな漢字も1文字です。
二番目の LEFTB はバイト数。
全角だけだと30文字になります。

"【長い】" の文字の判定が要らないのであれば、LEFT もしくは LEFTB だけで OK です。
60文字未満はそのまま表示されます。

=LEFT(A1,60)



追記です。

空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?

式を、以下のようにしてください。

=IF(ISERROR(FIND("【長い】",A1)),IF(ISBLANK(A1),"",A1),LEFT(A1,20))
他1件のコメントを見る
id:a-kuma3

空白セルの場合は「0」が返されるようですが。
この空白セルも、空白セルのまま返す、ということはできないでしょうか?

回答に追記しました。

2015/04/19 06:38:22
id:moon-fondu

ありがとうございます、うまくいきました!

2015/04/23 00:49:39
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982015/04/18 14:39:53

ポイント300pt
Sub main()
    Dim a As Long
    For a = 1 To Rows.Count
        If Cells(a, "A") = "" Then Exit For
        If InStr(Cells(a, "A"), "【長い】") > 0 Then
            Cells(a, "A") = Left(Cells(a, "A"), 60)
        End If
    Next a
End Sub
他1件のコメントを見る
id:taknt

対象のシートのところでやればいいです。

2015/04/19 11:31:32
id:moon-fondu

すごいです、60文字以上がパッと消えました!ありがとうございます。

2015/04/23 00:51:07
id:moon-fondu

お二人ともありがとうございます。
a-kuma3さんもきゃづみぃさんもどちらもベストアンサーなのですが、一人しか選べないので、早く回答いただいたa-kuma3さんの方にさせていただきました。私は返事が遅くなったのにすみません・・・(^_^;)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません